Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизДинамический отбор по дате в базе данных Найти похожие ветки
← →
Виктор (2010-05-12 09:45) [0]При параметрическом запросе:
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-12 10:02) [1]парадокс и бде ничего не знают про StrToDate
← →
Медвежонок Пятачок © (2010-05-12 10:03) [2]и про ":=" тоже ничего не знают
← →
Anatoly Podgoretsky © (2010-05-12 10:09) [3]> Виктор (12.05.2010 09:45:00) [0]
Ты где такой синтаксис выкопал, какое еще :=
← →
Виктор (2010-05-12 10:37) [4]даже если так:
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 надо перевести в строковый параметр, но как это сделать в динамическом запросе?
← →
Dennis I. Komarov © (2010-05-12 10:42) [5]DateToStr...
← →
Виктор (2010-05-12 11:04) [6]ни
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;
не работает???
← →
Dennis I. Komarov © (2010-05-12 11:13) [7]Правда???
TDataSet(Any).Text:=(... from tablename where anyfield = """ + DateToStr(AnyDate) + """...
← →
Sergey13 © (2010-05-12 11:25) [8]> [0] Виктор (12.05.10 09:45)
> При параметрическом запросе:
> всё работает отлично!
Тогда какой смысл от него отказываться?
← →
Плохиш © (2010-05-12 11:25) [9]
> Query1.SQL.Add("WHERE Дата1.DateToStr like """+ (Edit3.Text
> + "%"""));
>
> Query1.SQL.Add("Дата1.DateToStr (DateEdit3.Text)");
>
Спасибо, повеселил.
← →
Anatoly Podgoretsky © (2010-05-12 11:40) [10]
> Виктор (12.05.10 10:37) [4]
Какой смысл в like? в данном случае?
← →
Виктор (2010-05-12 21:57) [11]Есть на форме Edit1, Edit2 Edit3 и т.д. для динамических запросов по разным параметрам, например по ФИО, улице, страховому полису и т.д. Если поле имеет строковый параметр, то проблем никаких не возникает (или использовать параметрический запрос как написано выше). Но для быстроты работы, в конце рабочего дня, подводя итог сделанному, я набираю цифры сегодняшней даты (к примеру: 12.05) и всё отбирается. Не сложно, конечно и с параметрическим запросом по дате, но это у меня на отдельной форме с DateEdit1 и DateEdit2, а хотелось бы все иметь на одной форме (и поиск, и запросы на выборку данных, и вывод информации на печать).
← →
Плохиш © (2010-05-12 23:17) [12]
> но это у меня на отдельной форме с DateEdit1 и DateEdit2,
> а хотелось бы все иметь на одной форме
Злобный насяльника запретил?
← →
Sergey13 © (2010-05-13 10:06) [13]> [11] Виктор (12.05.10 21:57)
> Но для быстроты работы, в конце рабочего дня, подводя итог сделанному, я набираю цифры сегодняшней даты
Зачитался! Какой слог! Прямо пестня! 8-)
Но про что пестня - я, увы, не понял. 8-(
← →
ixen © (2010-05-13 11:08) [14]
> 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));
← →
Anatoly Podgoretsky © (2010-05-13 11:55) [15]> Sergey13 (13.05.2010 10:06:13) [13]
А нафига их набирать то, при наличии компьютера?
← →
Виктор (2010-05-13 16:03) [16]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;
Видимо не судьба мне решить проблему. Спасибо за участие всем.
← →
Sergey13 © (2010-05-13 16:20) [17]> [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)
т.е. управляя "нуловостью" параметра запрос работает с разными полями
← →
Виктор (2010-05-13 17:50) [18]Разместил на форме 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’
← →
Sergey13 © (2010-05-13 17:54) [19]> [18] Виктор (13.05.10 17:50)
Ну так неправильная дата. Что есть DateEdit1?
← →
Омлет © (2010-05-13 19:46) [20]Даже в D5 есть TDateTimePicker. Зачем вручную вводить?
← →
Виктор (2010-05-13 21:11) [21]Всё правильно, в RxLibrary есть очень симпатичные компоненты, в том числе и DateEdit1 в виде календарика, так что вводим дату по науке, а как говорит Аркадий Райкин: "Включаешь-не работает!"
А дата у меня правильная - ввожу исходя имеющихся в базе данных.
← →
Омлет © (2010-05-13 21:21) [22]В справке по StrToDate все написано. Строка с датой должна соответствовать формату, заданному в переменной ShortDateFormat, и использовать правильный DateSeparator.
← →
Омлет © (2010-05-13 21:25) [23]У меня RxLibrary нет, но, подозреваю, что у TDateEdit есть свойство Date или DateTime типа TDateTime.
← →
Виктор (2010-05-13 21:31) [24]У меня рабочий вариант для 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:42) [25]"У тебя ошибка в программе." (с) АП
Если "is not a valid date", то что-то не так с DateEdit3, мне отсюда не виидно. Проверь формат ввода.
И, еще раз повторяю, должно быть свойство Date у DateEdit. Если есть, то не нужен StrToDate:
Query1.ParamByName("prm3").AsDate := DateEdit3.Date;
← →
Омлет © (2010-05-13 21:47) [26]"Удаленная пошаговая отладка ваших исходников нашими лучшими телепатами."
← →
Виктор (2010-05-13 22:03) [27]У всех 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-14 01:11) [28]
> Виктор (13.05.10 22:03) [27]
Рекомендую читать пост 23 до полного просветления.
← →
Омлет © (2010-05-14 01:13) [29]Вот такое условие я понимаю
WHERE ((column_name IS NULL) or (column_name = "2010-05-14"))
А это -Where (:prm1 is null or Дата1=: prm1)
- это что-то странное. С парадоксом я не знаком, извините.
← →
Германн © (2010-05-14 01:26) [30]
> Омлет © (13.05.10 21:25) [23]
>
> У меня RxLibrary нет, но, подозреваю, что у TDateEdit есть
> свойство Date или DateTime типа TDateTime.
>
У меня RxLibrary есть. И свойство Date там действительно есть! Да и как ему там не быть. RxLibrary писали очень грамотные программисты.
Ну а автору следует внимательнее читать ответы. Кроме уже упомянутого [23] ещё и [25].
Ну и заодно автору стоит понять суть параметров и суть их применения.
← →
Sergey13 © (2010-05-14 08:49) [31]> [27] Виктор (13.05.10 22:03)
Бывает такое. Попробуй разделить параметры на "флаговые" и собственно параметры для сравнения. Типа такогоWhere (:prF1 is null or Дата1=: prM1)
Возможно так же "мешает" проверка на нулл, можно переделать такWhere (:prF1 =0 or Дата1=: prM1)
← →
Anatoly Podgoretsky © (2010-05-14 08:58) [32]> Омлет (14.05.2010 01:13:29) [29]
Синтаксис не позволяет использовать что либо кроме column_reference, а
интерпритатор не позволяет параметры в качестве column_reference, он не
может "откомпилировать" неизвестное на момент "компиляции". И даже если это
вдруг как то заработает, то это из-за ошибки.
← →
Виктор (2010-05-14 10:24) [33]
> "Удаленная пошаговая отладка ваших исходников нашими лучшими
> телепатами."
Видимо потерпела вместе со мной фиаско.
И динамический запрос по дате, и параметрические запросы, рассмотренные выше, являются тупиковой ветвью в "возможностях Delphi" и в моих соответственно.
← →
Виктор (2010-05-14 11:19) [34]Вопрос для "начинающих" не решен!
← →
Sergey13 © (2010-05-14 11:29) [35]> [27] Виктор (13.05.10 22:03)
> and (:prm3 is null or Дата3=: prm3)
вот еще
Дата3=: prm3
пробел после : он и в программе есть?
← →
Sergey13 © (2010-05-14 11:31) [36]> [34] Виктор (14.05.10 11:19)
Что ж ты его не решаешь?
← →
Anatoly Podgoretsky © (2010-05-14 12:56) [37]> Виктор (14.05.2010 10:24:33) [33]
Динамический, параметрический запрос никак не является тупиковой ветвью, а
вот твоей это точно.
← →
Anatoly Podgoretsky © (2010-05-14 12:59) [38]
> Вопрос для "начинающих" не решен!
Ты не начинающий, тебе до него еще расти нужно.
← →
Виктор (2010-05-14 22:53) [39]
> Динамический, параметрический запрос никак не является тупиковой
> ветвью, а
> вот твоей это точно.
Анатолий, видимо, когда хочет узнать хоть что-то о своем заболевании - 6 лет штудирует медицинскую литературу, затем проходит курсы усовершенствования, а уж потом идет к врачу?
Я перевёл всю страничку форума с языка программирования на язык медицинский и понял, что пациенту не выжить, он уже умер.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.061 c