![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Фильтрация по дате [D7, MS Access]
lirikus © (2010-07-18 22:05:00)Здравствуйте. Имеется таблица. Необходимо вывести записи принадлежащие выбранному временному периоду. Пробовал делать следующим образом:
DataModule2.ADOTable3.Filtered:=false; DataModule2.ADOTable3.Filter:='[Дата]>='+QuotedStr(DateToStr(DateTimePicker1.DateTime))+'
and [Дата]<='+QuotedStr(DateToStr(DateTimePicker2.DateTime))+'';
DataModule2.ADOTable3.Filtered:=true;
В данном случае даты сравниваются как строки. Т.е. если сравнивать, к примеру, 18.07.2010 и 01.08.2010, то больше будет первая дата, что является ошибкой.
Чтобы сравнивать как даты,пробовал в MS Access задать полю "дата" тип "дата/время ". При попытке записать значение даты с DateTimePicker выдавалась ошибка "WideString actual: TDateTime". Поэтому пришлось перейти на строковый тип, что привело меня в тупик...
Очень прошу вашей помощи. Заранее, спасибо.
бумбум (2010-07-19 09:59:00) [21]З.Ы. У меня скоро женидьба пока я добрый :о)
бумбум (2010-07-19 09:58:00) [22]Если твой FndQuerry обычный TQuery то:
var
Par: TParams;
begin
Par:= TParams.Create;
Par.CreateParam(ftDate, 'Data1', ptInput);
Par.CreateParam(ftDate, 'Data2', ptInput);
Par[0].AsDate := DateTimePicker1.Date;
Par[1].AsDate := DateTimePicker2.Date;
DataModule2.FndQuerry.SQL.Clear;
DataModule2.FndQuerry.Close;
DataModule2.FndQuerry.SQL.Add('Select * from Prodaja WHERE Data BETWEEN :Data1 and :Data2;');
DataModule2.FndQuerry.Params:=Par;
DataModule2.FndQuerry.Open;
end;
sniknik (2010-07-19 09:38:00) [23]lirikus (19.07.10 00:44) [10]
> Все когда-то были новичками...
то что ты новичек, а не ламер еще доказать нужно... а то что ты полностью проигнорировал написанное в [1], + якобы на основании конкретного(правильного!) примера в [2] "сделал" свою "лажу" в [4]... с моей точки зрения поставило тебя во вторую категорию.
> Остроумие здесь неуместно.
очень даже уместно, ламеры по другому не реагируют. имхо.
Anatoly Podgoretsky © (19.07.10 08:49) [17]
> наверно что бы не приставали.
чтобы после сказать, это описка здесь, а в программе все правильно... но не работает.
вообще пример клевый, в 6 строчках насчитал 6 ошибок ... :)
1 привязка к DataModule2
2 использование ADOQuery
3 то что делает ADOQuery опасным на старых версиях - внесение запроса частями
4 русское название таблицы (+ без кавычек)
5 параметры
6 не скомпилится даже из-за "StrToDate и DateToStr"
а в [16] исправляя одно вносится другое...
вот это вот ошибочно
> DataModule2.FndQuerry.Parameters[0].Value:=DateTimePicker1.data;
из-за .data;
Anatoly Podgoretsky (2010-07-19 08:49:00) [24]> lirikus (19.07.2010 00:05:04) [4]
Какой умный и StrToDate и DateToStr одновременно, наверно что бы не
приставали.
бумбум (2010-07-19 08:21:00) [25]
>
> DataModule2.FndQuerry.Active:=false;
> DataModule2.FndQuerry.SQL.Clear;
> DataModule2.FndQuerry.SQL.Add('SELECT *');
> DataModule2.FndQuerry.SQL.Add('FROM çàÿâêè_îòð');
> DataModule2.FndQuerry.SQL.Add('WHERE Дата BETWEEN '''+StrToDate(DateTimePicker1.
> Date)+''' and '''+DateToStr(DateTimePicker2.Date)+'''');
>
> DataModule2.FndQuerry.Active:=true;
DataModule2.FndQuerry.SQL.Clear;
DataModule2.FndQuerry.Close;
DataModule2.FndQuerry.SQL.Add('Select * from MyBaseWHERE Data BETWEEN :Data1 and :Data2;');
DataModule2.FndQuerry.Parameters[0].Value:=DateTimePicker1.data;
DataModule2.FndQuerry.Parameters[1].Value:=DateTimePicker1.data;
DataModule2.FndQuerry.Open;
Германн (2010-07-19 03:42:00) [26]
> Так напиши на досуге, какие проблемы? Много времени не займет.
> А польза, судя по количеству таких вопросов, будет для
> многих.
Это не ко мне. Вот sniknik такую тему бы потянул. Знаю по собственному опыту. Все его советы помогали мне. И не только мне.
Юрий Зотов (2010-07-19 03:29:00) [27]
> Германн © (19.07.10 03:21) [13]
> лицею на Королевстве стоит завести ещё одну тему
Так напиши на досуге, какие проблемы? Много времени не займет. А польза, судя по количеству таких вопросов, будет для многих.
Германн (2010-07-19 03:21:00) [28]
> Юрий Зотов © (19.07.10 03:02) [12]
Имхо сей совет не поможет автору.
В [9] ему дали ответы через поиск в гугле. Вполне достаточные для понимания. Ну или хотя бы для того, что б попробовать на своём проекте.
Опять "ты не умничай, ты код давай".
Может я и не прав. Посмотрим что будет дальше.
P.S. Может лицею на Королевстве стоит завести ещё одну тему? По поводу "грамотного написания запросов"?
Юрий Зотов (2010-07-19 03:02:00) [29]> lirikus (19.07.10 00:36) [8]
В строке запроса, там, где должно стоять значение даты1, вместо перевода даты в строку пишем:
:date1
(именно так, с двоеточием впереди).
А перед выполнением запроса присваиваем:
ParamByName('date1').Value := DateTimePicker1.Date;
Аналогично с date2.
См. справку по свойству Params и классу TParam.
Германн (2010-07-19 01:57:00) [30]
> Все когда-то были новичками...
Да. Но переросли новичков только те, кто читал "учебники", а не просил
> Подскажите, пожалуйста, как это будет выглядеть для моего конкретного случая.
lirikus (2010-07-19 00:44:00) [31]
> sniknik © (19.07.10 00:34) [7]
>
> > Может всё-таки деятельность сменить?
> на что? даже дворнику требуется интеллект. по аналогии,
> покажут за какой конец метлы браться, а он ее перевернет,
> и будет говорить - не работает.
Все когда-то были новичками... Остроумие здесь неуместно. Все, кто действительно способен помочь, откликнулись, остальным остается лишь стебаться...
sniknik (2010-07-19 00:40:00) [32]http://www.google.ru/search?hl=ru&newwindow=1&client=firefox&hs=0Jb&rls=org.mozilla:ru:official&&sa=X&ei=nGZDTOKIDIyCOOPQ9I0N&ved=0CBUQvwUoAQ&q=ADODataSet+sql+%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B+%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80&spell=1
lirikus (2010-07-19 00:36:00) [33]
>
> 2. Не надо никаких переводов даты в строку. Используйте
> параметры.
Подскажите, пожалуйста, как это будет выглядеть для моего конкретного случая.
sniknik (2010-07-19 00:34:00) [34]> Может всё-таки деятельность сменить?
на что? даже дворнику требуется интеллект. по аналогии, покажут за какой конец метлы браться, а он ее перевернет, и будет говорить - не работает.
Плохиш (2010-07-19 00:17:00) [35]
> lirikus (19.07.10 00:05) [4]
Мда, не в состоянии даже скопировать. Может всё-таки деятельность сменить?
Юрий Зотов (2010-07-19 00:14:00) [36]1. Вот это как понимать:
StrToDate(DateTimePicker1.Date)
2. Не надо никаких переводов даты в строку. Используйте параметры.
lirikus (2010-07-19 00:05:00) [37]
> select * from table where date betweeen (:date1, :date2);
>
> И чудо произойдет само собой.
Выдает следующую ошибку: Type mismatch for field 'Дата' , expecting: WideStringActual: DateTime.'
DataModule2.FndQuerry.Active:=false;
DataModule2.FndQuerry.SQL.Clear;
DataModule2.FndQuerry.SQL.Add('SELECT *');
DataModule2.FndQuerry.SQL.Add('FROM çàÿâêè_îòð');
DataModule2.FndQuerry.SQL.Add('WHERE Дата BETWEEN '''+StrToDate(DateTimePicker1.Date)+''' and '''+DateToStr(DateTimePicker2.Date)+'''');
DataModule2.FndQuerry.Active:=true;
Anatoly Podgoretsky (2010-07-18 23:37:00) [38]И не путай представление в фильтре, никакого строгого сравнения не происходит.
Юрий Зотов (2010-07-18 23:17:00) [39]
> lirikus (18.07.10 22:05)
select * from table where date betweeen (:date1, :date2);
И чудо произойдет само собой.
sniknik (2010-07-18 22:13:00) [40]для начала избавиться от ADOTable, перестать использовать фильтры вместо выборок, перейти на ADODataSet, потихоньку изучать sql, и да, использовать параметры...
в общем сначала начни все делать правильно, помощь потом. т.к. помогать кому то бредокодить - себя не уважать.