Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Фильтрация по дате [D7, MS Access]


Страницы:   1 2

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, и да, использовать параметры...

в общем сначала начни все делать правильно, помощь потом. т.к. помогать кому то бредокодить - себя не уважать.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо