Форум: "Начинающим";
Текущий архив: 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