|
|
|
Западло с "=null" в Access97->Access2002
|
|||
|---|---|---|---|
|
#18+
Есть кривой, но работающий код в Access97: Код: plaintext 1. 2. 3. 4. 5. 6. 7. В Access97 при isnull(amount)=false данный кусок кода работает по варианту 2, А в Access2000 - по варианту 1.Конечно, писать amount=0 - совершенно неправильно, но то, что преобразованный стандартным мастером код ведет себя совершенно по-разному, иначе как западлом не назовешь. В чем причина? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 18:17 |
|
||
|
Западло с "=null" в Access97->Access2002
|
|||
|---|---|---|---|
|
#18+
Смысл данного куска в том, чтобы выполнить Вариант 1, если поле amount пусто, выполнить вариант 1, если там чего-то есть - вариант 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 18:43 |
|
||
|
Западло с "=null" в Access97->Access2002
|
|||
|---|---|---|---|
|
#18+
strWere="...and amount Is Null " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 19:41 |
|
||
|
Западло с "=null" в Access97->Access2002
|
|||
|---|---|---|---|
|
#18+
Анатолий (Киев ) , это понятно, что так надо писать, меня интересует, почему в разных версиях по-разному работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 19:51 |
|
||
|
Западло с "=null" в Access97->Access2002
|
|||
|---|---|---|---|
|
#18+
...или strWere="...and IsNull(amount)=true" , что то же самое, наверное. Но вот почему кривой код по-разному работает в разных версиях - непонятно, уж я и DAO другое подключал, и открывал файл 97 акцесса 2002 без предоразования - результат все равно отличается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 19:56 |
|
||
|
Западло с "=null" в Access97->Access2002
|
|||
|---|---|---|---|
|
#18+
2Varan Совсем недавно тут видел информацию о том, что лишь несколько (одна-?) версия jet выделяет под хранение значения null спецзначение (видимо, за счет отъема одного значения у данного типа данных - например, заполняя все биты 1-ми). М.б. тут собака порылась? С другой стороны, написано, сам соглашаешься, не совсем корректно. Удивляйся, что до этого работало, а не что перестало :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 20:24 |
|
||
|
Западло с "=null" в Access97->Access2002
|
|||
|---|---|---|---|
|
#18+
Geo, "Удивляйся, что до этого работало, а не что перестало :)" Да, оказалось что принцип "если работает, то лучше не трогать, имеет, как и все в этой жизни, свои ограничения. В данном случая действует принцип "Если написано криво, то рано или поздно прогу переклинит, и то, что ее не клинит сейчас, не значит, что не стоит ничего исправлять". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 20:41 |
|
||
|
Западло с "=null" в Access97->Access2002
|
|||
|---|---|---|---|
|
#18+
""Удивляйся, что до этого работало, а не что перестало :)" - Хотя то, что один и тот же код, в разных версиях работает совершенно по-разному, по-моему, неправильно. А если бы данный код управлял ядерным реактором, и по варианту 1 шло действие "Опустить графитивые стержни", а по варианту 2 - "Поднять графитовые стержни", то результат работы данного кода при переходе к новой версии программы был бы не очень хорошим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2003, 12:17 |
|
||
|
Западло с "=null" в Access97->Access2002
|
|||
|---|---|---|---|
|
#18+
причина в том, что результат сравнения неопределенности по идее - неопределенность. т.е. (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 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2003, 17:32 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32348270&tid=1677748]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
192ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 545ms |

| 0 / 0 |
