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

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

Динамический отбор по дате в базе данных [D5, Paradox]


Страницы:   1 2

Виктор ©   (2010-05-12 09:45:00) 

При параметрическом запросе:
procedure TForm3.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.ParamByName('prm1').AsDate:=StrToDate(DateEdit1.Text);
Query1.ParamByName('prm2').AsDate:=StrToDate(DateEdit2.Text);
Query1.Open;

end;
всё работает отлично!

при попытке динамического отбора по дате в выражении:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select*');
Query1.SQL.Add('From Istorii_full.DB');
Query1.SQL.Add('WHERE Дата1:=StrToDate like '''+ (Edit3.Text + '%'''));
Query1.Open;
возникает ошибка. Подскажите, пожалуйста, где ошибка.


Виктор   (2010-05-14 22:53:00) [1]


> Динамический, параметрический запрос никак не является тупиковой
> ветвью, а
> вот твоей это точно.

Анатолий, видимо, когда хочет узнать хоть что-то о своем заболевании - 6 лет штудирует медицинскую литературу, затем проходит курсы усовершенствования, а уж потом идет к врачу?
Я перевёл всю страничку форума с языка программирования на язык медицинский и понял, что пациенту не выжить, он уже умер.


Anatoly Podgoretsky   (2010-05-14 12:59:00) [2]


> Вопрос для "начинающих" не решен!

Ты не начинающий, тебе до него еще расти нужно.


Anatoly Podgoretsky   (2010-05-14 12:56:00) [3]

> Виктор  (14.05.2010 10:24:33)  [33]

Динамический, параметрический запрос никак не является тупиковой ветвью, а
вот твоей это точно.


Sergey13   (2010-05-14 11:31:00) [4]

> [34] Виктор   (14.05.10 11:19)

Что ж ты его не решаешь?


Sergey13   (2010-05-14 11:29:00) [5]

> [27] Виктор   (13.05.10 22:03)
> and (:prm3 is null or Дата3=: prm3)

вот еще
Дата3=: prm3
пробел после : он и в программе есть?


Виктор   (2010-05-14 11:19:00) [6]

Вопрос для "начинающих" не решен!


Виктор   (2010-05-14 10:24:00) [7]


> "Удаленная пошаговая отладка ваших исходников нашими лучшими
> телепатами."

Видимо потерпела вместе со мной фиаско.
И динамический запрос по дате, и параметрические запросы, рассмотренные выше, являются тупиковой ветвью в "возможностях Delphi" и в моих соответственно.


Anatoly Podgoretsky   (2010-05-14 08:58:00) [8]

> Омлет  (14.05.2010 01:13:29)  [29]

Синтаксис не позволяет использовать что либо кроме column_reference, а
интерпритатор не позволяет параметры в качестве column_reference, он не
может "откомпилировать" неизвестное на момент "компиляции". И даже если это
вдруг как то заработает, то это из-за ошибки.


Sergey13   (2010-05-14 08:49:00) [9]

> [27] Виктор   (13.05.10 22:03)

Бывает такое. Попробуй разделить параметры на "флаговые" и собственно параметры для сравнения. Типа такого

Where (:pr F1 is null or Дата1=: pr M1)

Возможно так же "мешает" проверка на нулл, можно переделать так

Where (:pr F1 =0 or Дата1=: pr M1)


Германн   (2010-05-14 01:26:00) [10]


> Омлет ©   (13.05.10 21:25) [23]
>
> У меня RxLibrary нет, но, подозреваю, что у TDateEdit есть
> свойство Date или DateTime типа TDateTime.
>

У меня RxLibrary есть. И свойство Date там действительно есть! Да и как ему там не быть. RxLibrary писали очень грамотные программисты.
Ну а автору следует внимательнее читать ответы. Кроме уже упомянутого [23] ещё и [25].
Ну и заодно автору стоит понять суть параметров и суть их применения.


Омлет   (2010-05-14 01:13:00) [11]

Вот такое условие я понимаю
WHERE ((column_name IS NULL) or (column_name = '2010-05-14'))

А это - Where (:prm1 is null or Дата1=: prm1)- это что-то странное. С парадоксом я не знаком, извините.


Плохиш   (2010-05-14 01:11:00) [12]


> Виктор   (13.05.10 22:03) [27]

Рекомендую читать пост 23 до полного просветления.


Виктор   (2010-05-13 22:03:00) [13]

У всех DateEdit1, DateEdit2, DateEdit3 в свойствах стоит Date.
Но даже в моем выражении в проекте (без компиляции):
From Istorii.DB
Where Дата1 >= :prm1 and Дата1 <= :prm2
перевожу Query1.Active в True - не ругается, а в выражении
Select*
From Istorii.DB
Where (:prm1 is null or Дата1=: prm1)
and (:prm2 is null or Дата2=: prm2)
and (:prm3 is null or Дата3=: prm3)
при попытке перевести Query1.Active в True - пишет:
Invalid use of KeyWord
Token: prm1
and
Line Number: 3
Значит имеется ошибка в выражении, а именно в строке 3:
Where (:prm1 is null or Дата1=: prm1) и т.д.


Омлет   (2010-05-13 21:47:00) [14]

"Удаленная пошаговая отладка ваших исходников нашими лучшими телепатами."


Омлет   (2010-05-13 21:42:00) [15]

"У тебя ошибка в программе." (с) АП

Если "is not a valid date", то что-то не так с DateEdit3, мне отсюда не виидно. Проверь формат ввода.
И, еще раз повторяю, должно быть свойство Date у DateEdit. Если есть, то не нужен StrToDate:

Query1.ParamByName('prm3').AsDate := DateEdit3.Date;


Виктор   (2010-05-13 21:31:00) [16]

У меня рабочий вариант для Query1.SQL:
Select*
From Istorii.DB
Where Дата1 >= :prm1 and Дата1 <= :prm2
далее для Button1:
Query1.Close;
Query1.ParamByName('prm1').AsDate:=StrToDate(DateEdit1.Text);
Query1.ParamByName('prm2').AsDate:=StrToDate(DateEdit2.Text);
Query1.Open;
и все работает!!!
Добавил строку
Query1.ParamByName('prm3').AsDate:=StrToDate(DateEdit3.Text);
и поля Дата, Дата2 с тем же форматом и как говорит Папанов: "Шеф всё пропало"


Омлет   (2010-05-13 21:25:00) [17]

У меня RxLibrary нет, но, подозреваю, что у TDateEdit есть свойство Date или DateTime типа TDateTime.


Омлет   (2010-05-13 21:21:00) [18]

В справке по StrToDate все написано. Строка с датой должна соответствовать формату, заданному в переменной ShortDateFormat, и использовать правильный DateSeparator.


Виктор   (2010-05-13 21:11:00) [19]

Всё правильно, в RxLibrary есть очень симпатичные компоненты, в том числе и DateEdit1 в виде календарика, так что вводим дату по науке, а как говорит Аркадий Райкин: "Включаешь-не работает!"
А дата у меня правильная - ввожу исходя имеющихся в базе данных.


Омлет   (2010-05-13 19:46:00) [20]

Даже в D5 есть TDateTimePicker. Зачем вручную вводить?


Страницы:   1 2

Наверх

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