![]() |
| ||
|
|
Новости |
Поиск |
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;
возникает ошибка. Подскажите, пожалуйста, где ошибка.
Sergey13 (2010-05-13 17:54:00) [21]> [18] Виктор (13.05.10 17:50)
Ну так неправильная дата. Что есть DateEdit1?
Виктор (2010-05-13 17:50:00) [22]Разместил на форме 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 16:20:00) [23]> [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 16:03:00) [24]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;
Видимо не судьба мне решить проблему. Спасибо за участие всем.
Anatoly Podgoretsky (2010-05-13 11:55:00) [25]> Sergey13 (13.05.2010 10:06:13) [13]
А нафига их набирать то, при наличии компьютера?
ixen (2010-05-13 11:08:00) [26]
> 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 (2010-05-13 10:06:00) [27]> [11] Виктор (12.05.10 21:57)
> Но для быстроты работы, в конце рабочего дня, подводя итог сделанному, я набираю цифры сегодняшней даты
Зачитался! Какой слог! Прямо пестня! 8-)
Но про что пестня - я, увы, не понял. 8-(
Плохиш (2010-05-12 23:17:00) [28]
> но это у меня на отдельной форме с DateEdit1 и DateEdit2,
> а хотелось бы все иметь на одной форме
Злобный насяльника запретил?
Виктор (2010-05-12 21:57:00) [29]Есть на форме Edit1, Edit2 Edit3 и т.д. для динамических запросов по разным параметрам, например по ФИО, улице, страховому полису и т.д. Если поле имеет строковый параметр, то проблем никаких не возникает (или использовать параметрический запрос как написано выше). Но для быстроты работы, в конце рабочего дня, подводя итог сделанному, я набираю цифры сегодняшней даты (к примеру: 12.05) и всё отбирается. Не сложно, конечно и с параметрическим запросом по дате, но это у меня на отдельной форме с DateEdit1 и DateEdit2, а хотелось бы все иметь на одной форме (и поиск, и запросы на выборку данных, и вывод информации на печать).
Anatoly Podgoretsky (2010-05-12 11:40:00) [30]
> Виктор (12.05.10 10:37) [4]
Какой смысл в like? в данном случае?
Плохиш (2010-05-12 11:25:00) [31]
> Query1.SQL.Add('WHERE Дата1.DateToStr like '''+ (Edit3.Text
> + '%'''));
>
> Query1.SQL.Add('Дата1.DateToStr (DateEdit3.Text)');
>
Спасибо, повеселил.
Sergey13 (2010-05-12 11:25:00) [32]> [0] Виктор (12.05.10 09:45)
> При параметрическом запросе:
> всё работает отлично!
Тогда какой смысл от него отказываться?
Dennis I. Komarov (2010-05-12 11:13:00) [33]Правда???
TDataSet(Any).Text:=(... from tablename where anyfield = ''' + DateToStr(AnyDate) + '''...
Виктор (2010-05-12 11:04:00) [34]ни
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 10:42:00) [35]DateToStr...
Виктор (2010-05-12 10:37:00) [36]даже если так:
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 надо перевести в строковый параметр, но как это сделать в динамическом запросе?
Anatoly Podgoretsky (2010-05-12 10:09:00) [37]> Виктор (12.05.2010 09:45:00) [0]
Ты где такой синтаксис выкопал, какое еще :=
Медвежонок Пятачок (2010-05-12 10:03:00) [38]и про ":=" тоже ничего не знают
Медвежонок Пятачок (2010-05-12 10:02:00) [39]парадокс и бде ничего не знают про StrToDate