Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.18;
Скачать: CL | DM;

Вниз

SQL-запрос в Access   Найти похожие ветки 

 
WorkWork   (2011-09-13 02:31) [0]

Привет! работаю с БД Access. Нужно отобрать записи, в которых поля пустые(тип - строка). Пишу такой запрос:


SELECT *
FROM Obrazovanie
WHERE ((Period="")and(Naimen="")and(Spec="") and (Prim=""))


Не выдает ни одной строчки, хотя в базе такие есть. Пробывал с одиночными апострофами, ставил Null никак не хочит выполнять. Как в Access написать такой запрос грамотно, чтобы сработал?


 
MonoLife ©   (2011-09-13 04:35) [1]

IS NULL


 
WorkWork   (2011-09-13 05:08) [2]

Тоже неработает (((


 
Омлет ©   (2011-09-13 07:53) [3]

Где-то опечатка.


 
WorkWork   (2011-09-13 08:02) [4]

Вроде все правильно пишу. Кто-нибудь хелп!!!


 
Омлет ©   (2011-09-13 08:28) [5]

Без дампа базы не разобраться.


 
Anatoly Podgoretsky ©   (2011-09-13 08:43) [6]

Построй запрос в Акцесс


 
WorkWork   (2011-09-13 08:46) [7]


> Омлет ©   (13.09.11 08:28) [5]
> Без дампа базы не разобраться.


Могу скинуть!

Только подскажите, работа стоит из-за этой непонятки.

В базе надо найти строчки, в которых указанные поля пустые. Они там точно есть. я даже сомниваюсь, что дамп нужен.


 
WorkWork   (2011-09-13 08:48) [8]


> Anatoly Podgoretsky ©   (13.09.11 08:43) [6]
> Построй запрос в Акцесс


Я даже в самом Access в SQL-запросе писал, тоже не работает ((((


 
И. Павел ©   (2011-09-13 08:52) [9]

> Я даже в самом Access в SQL-запросе писал, тоже не работает
> ((((

Поле случайно не memo?


 
WorkWork   (2011-09-13 08:54) [10]

Нет, тип текстовый.


 
Омлет ©   (2011-09-13 09:22) [11]

Так где дамп?


 
Медвежонок Пятачок ©   (2011-09-13 09:22) [12]

Не выдает ни одной строчки, хотя в базе такие есть.

Пока будешь так думать, у тебя ничего не получится.
Думать надо так:
Если запрос возвращает пустую выборку, это значит, что в базе нет ни одной записи, удовлетворяющей условию отбора.


 
Медвежонок Пятачок ©   (2011-09-13 09:29) [13]

например "записи точно есть" в одной базе, а запрос идет к другой, в которой их нет.
или в базе есть записи, которые только очень похожи на записи с пустыми полями, а на самом деле там пробелы.


 
WorkWork   (2011-09-13 09:41) [14]


> Медвежонок Пятачок ©

в таблице всего записей 10 из них 2 записи удовлетворяющие условию 100% я проверял там всего 4 поля пустые и без пробелов.


> Омлет ©   (13.09.11 09:22) [11]
> Так где дамп?

дай мне хотябы мейл


 
Медвежонок Пятачок ©   (2011-09-13 09:42) [15]

спорим, что там нет записей, удовлетворяющих условию запроса?


 
Inovet ©   (2011-09-13 09:47) [16]

> [14] WorkWork   (13.09.11 09:41)
> дай мне хотябы мейл

Файлообменники есть.


 
Inovet ©   (2011-09-13 09:49) [17]

> [15] Медвежонок Пятачок ©   (13.09.11 09:42)
> спорим, что там нет записей, удовлетворяющих условию запроса?

Виноват Билл Гейтс и криваые Виндоус с Делфи.


 
WorkWork   (2011-09-13 09:52) [18]

Интересный факт обнаружил. Если ставлю только Period="", то выдает все 2 из 2 записей, как только ставлю какое-то другое поле - выдает 0 записей.


> Омлет ©

вот тут база
http://www.fayloobmennik.net/968152


 
Медвежонок Пятачок ©   (2011-09-13 09:54) [19]

Интересный факт обнаружил. Если ставлю только Period="", то выдает все 2 из 2 записей, как только ставлю какое-то другое поле - выдает 0 записей.


ну так умный в этом месте задумался бы, а пустые ли остальные поля, если пустой период таки находится.


 
WorkWork   (2011-09-13 09:59) [20]

Да конечно пустые. Все поля текстового типа, одинаковые, только названия разные. я проверял, даже мышкой наводил на поле в самом Аксесе и проверил они точно пустые без пробелов.


 
Медвежонок Пятачок ©   (2011-09-13 10:04) [21]

Косяк в твоем поле период, которое не период, а Period0


 
Медвежонок Пятачок ©   (2011-09-13 10:05) [22]

И таблица не образование, а образ


 
WorkWork   (2011-09-13 10:08) [23]

Да без разници в принципе. Period0 - там вконце буква O


 
WorkWork   (2011-09-13 10:09) [24]

Это я для наглядности так написал в форуме


 
Медвежонок Пятачок ©   (2011-09-13 10:20) [25]

Что и требовалось доказать.

1. update Obraz set PeriodO = null where ID = 57 or ID = 58
2. update Obraz set naimen = null, spec = null, prim = null

select * from Obraz
where  PeriodO is null
    and naimen is null
    and spec is null
    and prim is null

2 (две) строки в выборке.

Не верь глазам своим, но верь движку.


 
Омлет ©   (2011-09-13 10:25) [26]

select * from Obraz
where ((trim(PeriodO) = "") or (PeriodO is NULL)) and
     ((trim(Naimen) = "") or (Naimen is NULL)) and
     ((trim(Spec) = "") or (Spec is NULL)) and
     ((trim(Prim) = "") or (Prim is NULL));


 
Медвежонок Пятачок ©   (2011-09-13 10:29) [27]

да нет, там же поля widestring
в периоде был честный нулл. а остальных где-то был мусор.
причем в датасете весь мусор приводился либо к нулу либо к пустой строке.

вот такое выдавало пустые строки на всех полях
With ADODataSet1 do
 begin
   First;
   while not eof do
    begin
     Memo1.Lines.Add(""" + varToStr(FieldValues["Naimen"])+""");
     Next;
    end;
 end;

а движок-то видит, что в полях не пусто.


 
Омлет ©   (2011-09-13 10:29) [28]

> WorkWork

Учебник кипи уже, если не отличаешь пустую строку от NULL.


 
sniknik ©   (2011-09-13 10:30) [29]

> Что и требовалось доказать.
т.е. как ожидалось путаница и бардак в данных

тогда вместо
SELECT *
FROM Obrazovanie
WHERE ((Period="")and(Naimen="")and(Spec="") and (Prim=""))


"универсальный" способ
SELECT *
FROM Obrazovanie
WHERE (Trim(Period)="" or  Period is NULL) and (Trim(Naimen)="" or Naimen is NULL) and (Trim(Spec)="" or Spec is NULL) and (Trim(Prim)="" or Prim is NULL)


 
Медвежонок Пятачок ©   (2011-09-13 10:32) [30]

учебник хорошо.
но этого мало.
если перефразировать одного персонажа, то я бы сказал так:

если выборка дает пусто, а глаза видят, что записи есть, то выколи себе глаза и верь выборке.


 
Омлет ©   (2011-09-13 10:32) [31]

> Медвежонок Пятачок ©   (13.09.11 10:29) [27]
> в периоде был честный нулл. а остальных где-то был мусор.


Наоборот. В PeriodO там пустая строка, в остальных - null.


 
Медвежонок Пятачок ©   (2011-09-13 10:42) [32]

запрос на исходном файле:

select ID,len(periodo), len(naimen), len(spec), len(prim)
from  Obraz

результат:
http://img571.imageshack.us/img571/5176/nullb.png

по картинке как бы видно, что везде как бы нулл.
после апдейта например периода на пустую строку в столбце видна нулевая длина.

так что версия с юникодным мусором побеждает.


 
WorkWork   (2011-09-13 10:48) [33]

Спасибо ребят очень помогли и понятно описали!!!


 
Inovet ©   (2011-09-13 10:48) [34]

> [31] Омлет ©   (13.09.11 10:32)
> Наоборот. В PeriodO там пустая строка, в остальных - null

Как и предполагалось, судя по постам автора, непонимание разницы между null и "".


 
Медвежонок Пятачок ©   (2011-09-13 10:52) [35]

если бы была простая смесь пустых строк и нуллов, то картинка была бы иная.
вот выборка, с проапдейтенным полем Период в пустую строку для id in (57,58)

http://img24.imageshack.us/img24/7967/nulll.png


 
Inovet ©   (2011-09-13 11:04) [36]

> [35] Медвежонок Пятачок ©   (13.09.11 10:52)
> если бы была простая смесь пустых строк и нуллов, то картинка была бы иная.

Значит автор врал

> [1] MonoLife ©   (13.09.11 04:35)
> IS NULL

> [2] WorkWork   (13.09.11 05:08)
> Тоже неработает (((

Автору. Ну так теперь будет понимание разницы, а оно ещё глубже чем может показаться сразу.


 
Медвежонок Пятачок ©   (2011-09-13 11:07) [37]

не, похоже я просто не заменил файл после апдейта.
последний скриншот - это как раз оригинальная база.
в поле период пустая строка, в остальных полях нулл.


 
Anatoly Podgoretsky ©   (2011-09-13 11:14) [38]

> WorkWork  (13.09.2011 09:41:14)  [14]

Пустые говоришь, так пустые это NULL, а с пробелами не пустые.


 
Anatoly Podgoretsky ©   (2011-09-13 11:23) [39]


> Если запрос возвращает пустую выборку, это значит, что в
> базе нет ни одной записи, удовлетворяющей условию отбора.

Так он даже запрос построить не может и отладку провести тоже.


 
И. Павел ©   (2011-09-13 13:21) [40]


> WorkWork

Запретите значение NULL для тех полей, в которых оно не используется. И расставьте вторичные ключи. Иначе с ростом базы еще бОльшие чудеса могут пойти.



Страницы: 1 2 вся ветка

Текущий архив: 2011.12.18;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.008 c
2-1315383105
Pushok
2011-09-07 12:11
2011.12.18
На форме исчезает TreeView


15-1314819288
armstrong
2011-08-31 23:34
2011.12.18
SQL order by


15-1314617994
Юра Погудин
2011-08-29 15:39
2011.12.18
Проблема с форматированием Windows


2-1315223947
vasiliy87
2011-09-05 15:59
2011.12.18
Вопрос о параметрах интефейсных функций


2-1315514369
Германн
2011-09-09 00:39
2011.12.18
Компонент для вывода текста.