Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите составить запрос


Dell3r ©   (2005-08-20 12:20:00) 

Есть база с полями Name, Data, Data2
В поле Data2 есть как даты так и пустые поля.
выполняю запрос

Memo.Lines.Strings[0]:='Select * from Name WHERE (((Data<= :Da) and (Data>= :Da1)) not (Data2<> :Da2)';
QueryTMC.SQL.Assign(Memo.Lines);
   QueryTMC.Params.Items[0].DataType:=ftDate;
   QueryTMC.Params.Items[0].Value:=da;
   QueryTMC.Params.Items[1].DataType:=ftDate;
   QueryTMC.Params.Items[1].Value:=da1;
   QueryTMC.Params.Items[2].DataType:=ftDate;
   QueryTMC.Params.Items[2].Value:=da2;
try
 QueryTMC.Open;
except
 MessageDlg('Невозможно связаться с таблицей',mtError,[mbOk],0);
end;


Почему ругается на "not" в запросе?


}{ander   (2005-08-21 10:22:00) [1]

2 Sam Stone ©   (20.08.05 21:35) [5]

> ну хотя бы результат "not(Data2<> :Da2)" будет аналогичен "Data2=:Da2"

Согласен. И что должен делать после этого интерпретатор выражений? Ака он будет обрабатывать следующий предикат:
(Условие1 and Условие2) Условие3
Явно не хватает операции между скобками и Условием3.

Кстати! Вот это:
(Data<= :Da) and (Data>= :Da1)
можно заменить на
Data between :Da1 and Da

Удачи.


Sam Stone   (2005-08-20 21:35:00) [2]

Ну, во-первых, not это унарная операция :)

2 }{ander
ну хотя бы результат "not(Data2<> :Da2)" будет аналогичен "Data2=:Da2", потому что отрицание производится над булевой величиной (даты либо равны, либо нет)

2 Dell3r
'Select * from Name WHERE (((Data<= :Da) and (Data>= :Da1)) and (Data2 is null)'
это для Вывести все записи в которых НЕ заполна дата (пустые)


Dell3r   (2005-08-20 12:56:00) [3]

Спасибо за подсказку.
>И вообще - можешь сказать, что конкретно ты хотел получить, выполняя этот запрос?
В данном поле указаны даты когда нужно созваниваться с клиентом.
В Data указывается дата редактирования записи.

Запрос выбирает записи по полю Data если прошло 2 месяца после последнего редактирования записи.
А поле Data2 нужно для того если нужно выводить записи не через 2 месяца, а в какой-то определенный день.
Получется, что имея две даты эти записи засоряют выборку.
Правдо их было максимум 5, а сейчас за 30 перевалило. вот и приходится от них избавляться.


}{ander   (2005-08-20 12:46:00) [4]

> Почему ругается на "not" в запросе?

"Потому что гладиолус" (с)
Как сервер должен обработать твое выражение? произвести побитное not результата выражения (Data2<> :Da2)?

> Я вообщето имел ввиду логическое условие not.

Что значит имел в виду условие not?

> т.е. Вывести все записи в которых НЕ заполна дата (пустые)

Записи, в которых в поле Data2 находится null (скорее всего именно это ты имеешь в виду, говоря, что оно пустое) находятся по условию:

Data2 is null

И вообще - можешь сказать, что конкретно ты хотел получить, выполняя этот запрос?


Dell3r   (2005-08-20 12:36:00) [5]

Я вообщето имел ввиду логическое условие not.
т.е. Вывести все записи в которых НЕзаполна дата (пустые)


sniknik   (2005-08-20 12:26:00) [6]

почитай про ошибки
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1124365701&n=1

после сделай нормально, и прочитай в ней причину...


Наверх

Титульная страница Поиск, карта сайта Написать письмо