![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Null в SQL и Delphi
Kostafey © (2006-12-28 19:23:00)Доброго времени суток! Взгляните на этот код. В нем заполняются items для ComboBox.
Active := false;
CommandText := 'select case when VOX.VOX_NAME is null then NULL else VOX.VOX_NAME end as Res from VOX';
Active := true;
ComboBox_VOX.Items.Clear;
ComboBox_VOX.Items.Add(GlbVar.Vse_VOX);
for i := 1 to RecordCount do begin
if FieldValues['Res'] = NULL then
begin
next; continue;
end;
ComboBox_VOX.Items.Add(FieldValues['Res']);
next;
end;
ComboBox_VOX.ItemIndex := 1;
Код успешно работает. Но вот на какие мысли наталкивает его рассмотрение.
1) В SQL 'is null' и '=null' не одно и то же, а в Delphi- пожалуста пишем if FieldValues['Res'] = NULL. Это правильно ?
2) Взгляните на вторую строчку кода. Казалось бы ничего не мешает написать просто 'select VOX.VOX_NAME as Res from VOX' но нет же ошибка.
Так вот чем это может быть вызвано ?
ЮЮ (2006-12-29 03:55:00) [1]Да и Дельфи лучче не сравнивать с Null и Unassigned, а использовать функции VarIsNull и VarIsEmpty, ибо случаются такие конфигурации, где прямое сравнение приводит е ошибкам преобразования. У меня дома такая конфигурация сложилась и я там отлавливаю такого типа ошибки, хотя на работе все происходит без ошибок.
DrPass (2006-12-29 01:24:00) [2]
> Kostafey © (28.12.06 19:55) [5]
Да, не мешало бы :)
Null в SQL = "неопределенное значение"
Null в вариантных переменных Delphi = "пустое значение"
Kostafey (2006-12-28 19:55:00) [3]> Ты тёплое с мягким путаушь. В случае Delphi - это тип данных
> Variant
Да? Возможно мне пора бы вернуться к фундаментальной литературе на эту тему.
Хм. Кстати, мысль, но это уже во флуде. В любом случае спасибо.
Ega23 (2006-12-28 19:47:00) [4]
> Хм. Просто я хочу сказать кто из них неправ? SQL (вкрнее
> стандарт ANSI SQL) или Delphi ?
Ты тёплое с мягким путаушь. В случае Delphi - это тип данных Variant
Kostafey (2006-12-28 19:40:00) [5]> Case в данном случае - бессмыслен.
Ух, смотри-ка заработало! А что-ж у меня до этого не работало-то...? А что-ж я до этого там пил-то...? :)
> В С (a==b) и (a=b) не одно и то же, а в Delphi- пожалуста
> пишем (a=b). Это правильно ?
Хм. Просто я хочу сказать кто из них неправ? SQL (вкрнее стандарт ANSI SQL) или Delphi ?
Ega23 (2006-12-28 19:31:00) [6]
> 1) В SQL 'is null' и '=null' не одно и то же, а в Delphi-
> пожалуста пишем if FieldValues['Res'] = NULL. Это правильно
> ?
В С (a==b) и (a=b) не одно и то же, а в Delphi- пожалуста пишем (a=b). Это правильно ?
Ega23 (2006-12-28 19:29:00) [7]Case в данном случае - бессмыслен.