powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Западло с "=null" в Access97->Access2002
9 сообщений из 9, страница 1 из 1
Западло с "=null" в Access97->Access2002
    #32345357
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть кривой, но работающий код в Access97:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 strWere= "...and amount=null"  
 if isnull(dlookup( "field1" , "table1" ,strWere))=true then
   'Вариант1
  else 
 'вариант2
 end if



В Access97 при isnull(amount)=false данный кусок кода работает по варианту 2,
А в Access2000 - по варианту 1.Конечно, писать amount=0 - совершенно неправильно, но то, что преобразованный стандартным мастером код ведет себя совершенно по-разному, иначе как западлом не назовешь.
В чем причина?
...
Рейтинг: 0 / 0
Западло с "=null" в Access97->Access2002
    #32345391
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смысл данного куска в том, чтобы выполнить Вариант 1, если поле amount пусто, выполнить вариант 1, если там чего-то есть - вариант 2
...
Рейтинг: 0 / 0
Западло с "=null" в Access97->Access2002
    #32345428
strWere="...and amount Is Null "
...
Рейтинг: 0 / 0
Западло с "=null" в Access97->Access2002
    #32345432
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий (Киев ) , это понятно, что так надо писать, меня интересует, почему в разных версиях по-разному работает.
...
Рейтинг: 0 / 0
Западло с "=null" в Access97->Access2002
    #32345435
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...или strWere="...and IsNull(amount)=true" , что то же самое, наверное. Но вот почему кривой код по-разному работает в разных версиях - непонятно, уж я и DAO другое подключал, и открывал файл 97 акцесса 2002 без предоразования - результат все равно отличается.
...
Рейтинг: 0 / 0
Западло с "=null" в Access97->Access2002
    #32345445
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Varan
Совсем недавно тут видел информацию о том, что лишь несколько (одна-?) версия jet выделяет под хранение значения null спецзначение (видимо, за счет отъема одного значения у данного типа данных - например, заполняя все биты 1-ми). М.б. тут собака порылась?
С другой стороны, написано, сам соглашаешься, не совсем корректно. Удивляйся, что до этого работало, а не что перестало :)
...
Рейтинг: 0 / 0
Западло с "=null" в Access97->Access2002
    #32345456
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geo,
"Удивляйся, что до этого работало, а не что перестало :)"
Да, оказалось что принцип "если работает, то лучше не трогать, имеет, как и все в этой жизни, свои ограничения.
В данном случая действует принцип "Если написано криво, то рано или поздно прогу переклинит, и то, что ее не клинит сейчас, не значит, что не стоит ничего исправлять".
...
Рейтинг: 0 / 0
Западло с "=null" в Access97->Access2002
    #32346248
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
""Удивляйся, что до этого работало, а не что перестало :)"
- Хотя то, что один и тот же код, в разных версиях работает совершенно по-разному, по-моему, неправильно. А если бы данный код управлял ядерным реактором, и по варианту 1 шло действие "Опустить графитивые стержни", а по варианту 2 - "Поднять графитовые стержни", то результат работы данного кода при переходе к новой версии программы был бы не очень хорошим.
...
Рейтинг: 0 / 0
Западло с "=null" в Access97->Access2002
    #32348270
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
причина в том, что результат сравнения неопределенности по идее - неопределенность. т.е. (null=null) должно дать не Трую или Фальсу, а добротный null. При этом разные диалекты ссыкуля этого не реализуют. Операция сравнения "=" может пониматься ими или "обобщенно" - т.е. как Is (в т.ч. Is Null), или "конкретно" (т.е. Where x=null в них вернет пустое множество, ибо равно "Where null" что совпадает с "Where null<>False"). При всем том такое строгое формализаторство не всем нравится - кажется, что усложняет синтаксис (отдельно надо проверять совпадение сравниваемых, отдельно - пустоту в них). Посему во многих диалектах (null=null) возвращает True (т.е. понимается как обобщенное сравнение Is - вставь в запрос 97-го (Null=Null) AS Exp). Можно б было рекомендовать пользоваться только тем синтаксисом, что всегда проходит, но и "IS NULL" понимается не всеми диалектами :)

Для Акса сохраняется еще одна лазейка: Not(Null<>Null) AS Exp даже в 2000 вернет True. И именно в SQL, а не в VBA. (недоработка по части формализаторства: (1<>Null) вернет, как и нужно Null :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Западло с "=null" в Access97->Access2002
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]