|
|
|
АХТУНГ!!! Where [Поле] = Null
|
|||
|---|---|---|---|
|
#18+
В недрах унаследованного софта (Access 97) нашел такой кусочек кода: Set rst = CurrentDb.OpenRecordset("Select * From [Таблица] Where [Поле] = Null") И эта собака дикая - работает!!! Причем работает так, как (по всей видимости) задумывал неизвестный педераст - автор этой программы. Т.е. в полученном рекордсете содержаться записи, в которых [Поле] Is Null Обнаружил при переходе на Access 2002, который интерпретируют "[Поле]=Null" правильно, т.е. False при любом значении (в том числе отсутствии значения) в Поле Это глюк? Фича? Или это я америку открыл и на граблю наступил? З.Ы. Почему нет блюющего смайлика? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2004, 11:31 |
|
||
|
АХТУНГ!!! Where [Поле] = Null
|
|||
|---|---|---|---|
|
#18+
авторкоторый интерпретируют "[Поле]=Null" правильно, т.е. False Не знаю как в Аксе, но, вообще-то он не в false преобразовывает, а в Null Можно проверить 1. ([поле]=Null) = false 2. ([поле]=Null) is null ЗЫ: проверил - 1 первый вариант не выдает полей, а 2 - выдает все :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2004, 11:38 |
|
||
|
АХТУНГ!!! Where [Поле] = Null
|
|||
|---|---|---|---|
|
#18+
Сори Сравнение с Null'ом дает в итоге не False, конечно же, а Null Суть от этого не меняется. Null в предложении Where записей выводить не должен. Однако в 97-ом аксесе - сравнение с Null'ом (=Null) работает как проверка на Null (Is Null) Хочу блюющий смайлик. Как представлю, сколько таких мест еще осталось... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2004, 11:44 |
|
||
|
АХТУНГ!!! Where [Поле] = Null
|
|||
|---|---|---|---|
|
#18+
2 ЛП В MSSQL есть спец опция: SET ANSI_NULLS ON|OFF Вот она как раз такое и проделывает Т.е. если ON, то сравнение с NULL допустимы, иначе чисто NULL будет возвращать :) Может для 97 ANSI стандарт ближе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2004, 11:48 |
|
||
|
АХТУНГ!!! Where [Поле] = Null
|
|||
|---|---|---|---|
|
#18+
Q237992 SYMPTOMS When using an SQL statement with a WHERE clause that contains a test for NULL using the = operator, records that match the query are not returned in the recordset. These queries worked correctly with Jet 3.5 and returned the records as expected. This behavior will only be exhibited on computers with MDAC 2.1 and later that have Jet 4.0 installed. CAUSE Jet 4.0 made some changes to the SQL syntax and is now more SQL ANSI 92 compliant than before. Especially SQL ANSI 92 NULL behavior was implemented. Also remember that the result of a Boolean expression can have three results - TRUE, FALSE and NULL (in some documents referred as UNKNOWN). RESOLUTION Use the IS keyword in queries that test for NULL. This change will not break on systems with Jet 3.5 as Jet 3.5 accepted both types of queries. STATUS This behavior is by design. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2004, 14:03 |
|
||
|
АХТУНГ!!! Where [Поле] = Null
|
|||
|---|---|---|---|
|
#18+
Ну вот, опять меня носом в хелп ткнули Однако непонятен мне такой by disign Откуда вообще взялось в 97-м аксесе сравнение с Null'ом через знак равенства? В целях совместимости со 2-м аксесом что-ли? Кто-нибудь Access 2.0 помнит? Или 1.0? Может там не было слова Is, потому через "=" и сделали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2004, 14:18 |
|
||
|
АХТУНГ!!! Where [Поле] = Null
|
|||
|---|---|---|---|
|
#18+
Я начинал на Аксессе Втором. Но сколько себя помню - всегда знал, что нельзя писать =Null. Впрочем, возможно, у меня это сидит в голове из хелпа про VBA, в котором это касалось ифов. А на селекты я распространил сам... ХЗ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2004, 14:24 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32531993&tid=1674385]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 511ms |

| 0 / 0 |
