Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.005 c
15-1314822593
Юрий
2011-09-01 00:29
2011.12.18
С днем рождения ! 1 сентября 2011 четверг


6-1248173569
Michael
2009-07-21 14:52
2011.12.18
smtp/pop3 без компонентов


15-1314687363
RDen
2011-08-30 10:56
2011.12.18
Список документов


2-1315253407
Captcha
2011-09-06 00:10
2011.12.18
Программный выбор элемента в ComboBox


15-1314332947
xayam
2011-08-26 08:29
2011.12.18
Приглашение на Хабр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский