Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.55 MB
Время: 0.068 c
2-1267350234
Pavia
2010-02-28 12:43
2010.08.27
Отоброзить TStringList на экране.


15-1268021733
rust-02
2010-03-08 07:15
2010.08.27
Нужно реализовать тестовую программу


15-1269108673
POP
2010-03-20 21:11
2010.08.27
Несколько форм в едиторе - Delphi 2007


15-1275405572
AKE
2010-06-01 19:19
2010.08.27
Кто-нибудь пользовал браузер Fine Browser?


15-1267749283
Дмитрий С
2010-03-05 03:34
2010.08.27
А я и не знал...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский