-
При параметрическом запросе:
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;
возникает ошибка. Подскажите, пожалуйста, где ошибка.
-
парадокс и бде ничего не знают про StrToDate
-
и про ":=" тоже ничего не знают
-
> Виктор (12.05.2010 09:45:00) [0]
Ты где такой синтаксис выкопал, какое еще :=
-
даже если так:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select*');
Query1.SQL.Add('From Istorii_full.DB');
Query1.SQL.Add('WHERE Дата1 like '''+ (Edit3.Text + '%'''));
Query1.Open;
возникает ошибка. Понятно, что Дата1 надо перевести в строковый параметр, но как это сделать в динамическом запросе?
-
DateToStr...
-
ни
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select*');
Query1.SQL.Add('From Istorii_full.DB');
Query1.SQL.Add('WHERE Дата1.DateToStr like '''+ (Edit3.Text + '%'''));
Query1.Open;
ни
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select*');
Query1.SQL.Add('From Istorii_full.DB');
Query1.SQL.Add('Дата1.DateToStr (DateEdit3.Text)');
Query1.Open;
не работает???
-
Правда???
TDataSet(Any).Text:=(... from tablename where anyfield = ''' + DateToStr(AnyDate) + '''...
-
> [0] Виктор (12.05.10 09:45)
> При параметрическом запросе:
> всё работает отлично!
Тогда какой смысл от него отказываться?
-
> Query1.SQL.Add('WHERE Дата1.DateToStr like '''+ (Edit3.Text
> + '%'''));
>
> Query1.SQL.Add('Дата1.DateToStr (DateEdit3.Text)');
>
Спасибо, повеселил.
-
> Виктор (12.05.10 10:37) [4]
Какой смысл в like? в данном случае?
-
Есть на форме Edit1, Edit2 Edit3 и т.д. для динамических запросов по разным параметрам, например по ФИО, улице, страховому полису и т.д. Если поле имеет строковый параметр, то проблем никаких не возникает (или использовать параметрический запрос как написано выше). Но для быстроты работы, в конце рабочего дня, подводя итог сделанному, я набираю цифры сегодняшней даты (к примеру: 12.05) и всё отбирается. Не сложно, конечно и с параметрическим запросом по дате, но это у меня на отдельной форме с DateEdit1 и DateEdit2, а хотелось бы все иметь на одной форме (и поиск, и запросы на выборку данных, и вывод информации на печать).
-
> но это у меня на отдельной форме с DateEdit1 и DateEdit2,
> а хотелось бы все иметь на одной форме
Злобный насяльника запретил?
-
> [11] Виктор (12.05.10 21:57)
> Но для быстроты работы, в конце рабочего дня, подводя итог сделанному, я набираю цифры сегодняшней даты
Зачитался! Какой слог! Прямо пестня! 8-)
Но про что пестня - я, увы, не понял. 8-(
-
> Query1.SQL.Add('From Istorii_full.DB');
тут мне кажется нужно писать имя таблицы, а не имя файла таблицы, по крайней мере в фаерберде так..
> Query1.SQL.Add('WHERE Дата1.DateToStr like '''+ (Edit3.Text
> + '%'''));
попробуй так:
Query1.SQL.Add('WHERE pole_name containing '+ quotedstr(Edit3.Text));
-
> Sergey13 (13.05.2010 10:06:13) [13]
А нафига их набирать то, при наличии компьютера?
-
Query1.SQL.Add('WHERE Дата1 containing '+ quotedstr(Edit3.Text)); - не получается.
Хорошо, я успокоился, пусть будет так как было, т.е. на отдельной форме:
Query1.Close;
Query1.ParamByName('prm1').AsDate:=StrToDate(DateEdit1.Text);
Query1.ParamByName('prm2').AsDate:=StrToDate(DateEdit2.Text);
Query1.Open;
Видимо не судьба мне решить проблему. Спасибо за участие всем.
-
>
[16] Виктор (13.05.10 16:03)
Запрос может содержать примерно такие конструкции
where
(:par1 is null or Data=:par1)
and (:par2 is null or FIO=:par2)
and (:par3 is null or Polis=:par3)
т.е. управляя "нуловостью" параметра запрос работает с разными полями
-
Разместил на форме 3 DateEdit1 (соответственно: DateEdit1, DateEdit2, DateEdit3), Query1, DataSource1, Button1.
Пишу для Query1.SQL
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)
Для Button1
Query1.Close;
Query1.ParamByName('prm1').AsDate:=StrToDate(DateEdit1.Text);
Query1.ParamByName('prm2').AsDate:=StrToDate(DateEdit2.Text);
Query1.ParamByName('prm3').AsDate:=StrToDate(DateEdit3.Text);
Query1.Open;
Не работает – ошибка
Project Data.exe raised exception class EConvertError with message”..’is not a valid date’
-
> [18] Виктор (13.05.10 17:50)
Ну так неправильная дата. Что есть DateEdit1?
-
Даже в D5 есть TDateTimePicker. Зачем вручную вводить?
-
Всё правильно, в RxLibrary есть очень симпатичные компоненты, в том числе и DateEdit1 в виде календарика, так что вводим дату по науке, а как говорит Аркадий Райкин: "Включаешь-не работает!"
А дата у меня правильная - ввожу исходя имеющихся в базе данных.
-
В справке по StrToDate все написано. Строка с датой должна соответствовать формату, заданному в переменной ShortDateFormat, и использовать правильный DateSeparator.
-
У меня RxLibrary нет, но, подозреваю, что у TDateEdit есть свойство Date или DateTime типа TDateTime.
-
У меня рабочий вариант для 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 с тем же форматом и как говорит Папанов: "Шеф всё пропало"
-
"У тебя ошибка в программе." (с) АП
Если "is not a valid date", то что-то не так с DateEdit3, мне отсюда не виидно. Проверь формат ввода.
И, еще раз повторяю, должно быть свойство Date у DateEdit. Если есть, то не нужен StrToDate:
Query1.ParamByName('prm3').AsDate := DateEdit3.Date;
-
"Удаленная пошаговая отладка ваших исходников нашими лучшими телепатами."
-
У всех 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) и т.д.
-
> Виктор (13.05.10 22:03) [27]
Рекомендую читать пост 23 до полного просветления.
-
Вот такое условие я понимаю
WHERE ((column_name IS NULL) or (column_name = '2010-05-14'))
А это -
Where (:prm1 is null or Дата1=: prm1)
- это что-то странное. С парадоксом я не знаком, извините.
-
> Омлет © (13.05.10 21:25) [23]
>
> У меня RxLibrary нет, но, подозреваю, что у TDateEdit есть
> свойство Date или DateTime типа TDateTime.
>
У меня RxLibrary есть. И свойство Date там действительно есть! Да и как ему там не быть. RxLibrary писали очень грамотные программисты.
Ну а автору следует внимательнее читать ответы. Кроме уже упомянутого [23] ещё и [25].
Ну и заодно автору стоит понять суть параметров и суть их применения.
-
>
[27] Виктор (13.05.10 22:03)
Бывает такое. Попробуй разделить параметры на "флаговые" и собственно параметры для сравнения. Типа такого
Where (:prF1 is null or Дата1=: prM1)
Возможно так же "мешает" проверка на нулл, можно переделать так
Where (:prF1 =0 or Дата1=: prM1)
-
> Омлет (14.05.2010 01:13:29) [29]
Синтаксис не позволяет использовать что либо кроме column_reference, а
интерпритатор не позволяет параметры в качестве column_reference, он не
может "откомпилировать" неизвестное на момент "компиляции". И даже если это
вдруг как то заработает, то это из-за ошибки.
-
> "Удаленная пошаговая отладка ваших исходников нашими лучшими
> телепатами."
Видимо потерпела вместе со мной фиаско.
И динамический запрос по дате, и параметрические запросы, рассмотренные выше, являются тупиковой ветвью в "возможностях Delphi" и в моих соответственно.
-
Вопрос для "начинающих" не решен!
-
> [27] Виктор (13.05.10 22:03)
> and (:prm3 is null or Дата3=: prm3)
вот еще
Дата3=: prm3
пробел после : он и в программе есть?
-
> [34] Виктор (14.05.10 11:19)
Что ж ты его не решаешь?
-
> Виктор (14.05.2010 10:24:33) [33]
Динамический, параметрический запрос никак не является тупиковой ветвью, а
вот твоей это точно.
-
> Вопрос для "начинающих" не решен!
Ты не начинающий, тебе до него еще расти нужно.
-
> Динамический, параметрический запрос никак не является тупиковой
> ветвью, а
> вот твоей это точно.
Анатолий, видимо, когда хочет узнать хоть что-то о своем заболевании - 6 лет штудирует медицинскую литературу, затем проходит курсы усовершенствования, а уж потом идет к врачу?
Я перевёл всю страничку форума с языка программирования на язык медицинский и понял, что пациенту не выжить, он уже умер.