![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамический отбор по дате в базе данных [D5, Paradox]
Виктор © (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. Зачем вручную вводить?