Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.10.10;
Скачать: CL | DM;

Вниз

Фильтрация по дате   Найти похожие ветки 

 
lirikus   (2010-07-18 22:05) [0]

Здравствуйте. Имеется таблица. Необходимо вывести записи принадлежащие выбранному временному периоду. Пробовал делать следующим образом:

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". Поэтому пришлось перейти на строковый тип, что привело меня в тупик...

Очень прошу вашей помощи. Заранее, спасибо.


 
sniknik ©   (2010-07-18 22:13) [1]

для начала избавиться от ADOTable, перестать использовать фильтры вместо выборок, перейти на ADODataSet, потихоньку изучать sql, и да, использовать параметры...

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


 
Юрий Зотов ©   (2010-07-18 23:17) [2]


> lirikus   (18.07.10 22:05)  

select * from table where date betweeen (:date1, :date2);
И чудо произойдет само собой.


 
Anatoly Podgoretsky ©   (2010-07-18 23:37) [3]

И не путай представление в фильтре, никакого строгого сравнения не происходит.


 
lirikus   (2010-07-19 00:05) [4]


> 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 &#231;&#224;&#255;&#226;&#234;&#232;_&#238;&#242;&#240;");
  DataModule2.FndQuerry.SQL.Add("WHERE Дата BETWEEN """+StrToDate(DateTimePicker1.Date)+""" and """+DateToStr(DateTimePicker2.Date)+"""");
  DataModule2.FndQuerry.Active:=true;


 
Юрий Зотов ©   (2010-07-19 00:14) [5]

1. Вот это как понимать:
StrToDate(DateTimePicker1.Date)

2. Не надо никаких переводов даты в строку. Используйте параметры.


 
Плохиш ©   (2010-07-19 00:17) [6]


> lirikus   (19.07.10 00:05) [4]

Мда, не в состоянии даже скопировать. Может всё-таки деятельность сменить?


 
sniknik ©   (2010-07-19 00:34) [7]

> Может всё-таки деятельность сменить?
на что? даже дворнику требуется интеллект. по аналогии, покажут за какой конец метлы браться, а он ее перевернет, и будет говорить - не работает.


 
lirikus   (2010-07-19 00:36) [8]


>
> 2. Не надо никаких переводов даты в строку. Используйте
> параметры.


Подскажите, пожалуйста, как это будет выглядеть для моего конкретного случая.


 
sniknik ©   (2010-07-19 00:40) [9]

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:44) [10]


> sniknik ©   (19.07.10 00:34) [7]
>
> > Может всё-таки деятельность сменить?
> на что? даже дворнику требуется интеллект. по аналогии,
> покажут за какой конец метлы браться, а он ее перевернет,
>  и будет говорить - не работает.


Все когда-то были новичками... Остроумие здесь неуместно. Все, кто действительно способен помочь, откликнулись, остальным остается лишь стебаться...


 
Германн ©   (2010-07-19 01:57) [11]


> Все когда-то были новичками...

Да. Но переросли новичков только те, кто читал "учебники", а не просил
> Подскажите, пожалуйста, как это будет выглядеть для моего конкретного случая.


 
Юрий Зотов ©   (2010-07-19 03:02) [12]

> lirikus   (19.07.10 00:36) [8]

В строке запроса, там, где должно стоять значение даты1, вместо перевода даты в строку пишем:
:date1
(именно так, с двоеточием впереди).

А перед выполнением запроса присваиваем:
ParamByName("date1").Value := DateTimePicker1.Date;

Аналогично с date2.

См. справку по свойству Params и классу TParam.


 
Германн ©   (2010-07-19 03:21) [13]


> Юрий Зотов ©   (19.07.10 03:02) [12]

Имхо сей совет не поможет автору.
В [9] ему дали ответы через поиск в гугле. Вполне достаточные для понимания. Ну или хотя бы для того, что б попробовать на своём проекте.
Опять "ты не умничай, ты код давай".
Может я и не прав. Посмотрим что будет дальше.

P.S. Может лицею на Королевстве стоит завести ещё одну тему? По поводу "грамотного написания запросов"?


 
Юрий Зотов ©   (2010-07-19 03:29) [14]


> Германн ©   (19.07.10 03:21) [13]
> лицею на Королевстве стоит завести ещё одну тему

Так напиши на досуге, какие проблемы? Много времени не займет. А польза, судя по количеству таких вопросов, будет для многих.


 
Германн ©   (2010-07-19 03:42) [15]


> Так напиши на досуге, какие проблемы? Много времени не займет.
>  А польза, судя по количеству таких вопросов, будет для
> многих.

Это не ко мне. Вот sniknik такую тему бы потянул. Знаю по собственному опыту. Все его советы помогали мне. И не только мне.


 
бумбум   (2010-07-19 08:21) [16]


>
> DataModule2.FndQuerry.Active:=false;
>   DataModule2.FndQuerry.SQL.Clear;
>   DataModule2.FndQuerry.SQL.Add("SELECT *");
>   DataModule2.FndQuerry.SQL.Add("FROM &#231;&#224;&#255;&#226;&#234;&#232;_&#238;&#242;&#240;");
>   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 MyBase WHERE Data BETWEEN :Data1 and :Data2;");
DataModule2.FndQuerry.Parameters[0].Value:=DateTimePicker1.data;
DataModule2.FndQuerry.Parameters[1].Value:=DateTimePicker1.data;
DataModule2.FndQuerry.Open;


 
Anatoly Podgoretsky ©   (2010-07-19 08:49) [17]

> lirikus  (19.07.2010 00:05:04)  [4]

Какой умный и StrToDate и DateToStr одновременно, наверно что бы не
приставали.


 
sniknik ©   (2010-07-19 09:38) [18]

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;


 
бумбум   (2010-07-19 09:58) [19]

Если твой 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;


 
бумбум   (2010-07-19 09:59) [20]

З.Ы. У меня скоро женидьба пока я добрый :о)


 
Anatoly Podgoretsky ©   (2010-07-19 10:02) [21]


> бумбум   (19.07.10 09:58) [19]

А нафига ему пример из БДЕ?


 
бумбум   (2010-07-19 10:13) [22]


> А нафига ему пример из БДЕ?


Я как то не понял что это у него за FndQuerry
Да и если автор не может до тукатся как в инспекторе объекта устанавливать параметры то это ему здорово поможет


 
бумбум   (2010-07-19 10:14) [23]

Я тож с тупил, только додумался посмотреть
[D7, MS Access]


 
Плохиш ©   (2010-07-19 10:39) [24]


> DataModule2.FndQuerry.SQL.Clear;
> DataModule2.FndQuerry.Close;
> DataModule2.FndQuerry.SQL.Add("Select * from Prodaja WHERE
> Data BETWEEN :Data1 and :Data2;");
>

Я бы убил.


 
lirikus   (2010-07-19 13:07) [25]

Спасибо всем откликнувшимся. Дико извиняюсь, что испытываю ваше терпение. Но на запрос выдается ошибка "Несоответствие типов данных в условиях отбора". Какой тип должен быть у поля "дата" в Access?

DataModule2.FndQuerry.SQL.Clear;
DataModule2.FndQuerry.Close;
DataModule2.FndQuerry.SQL.Add("Select * from &#199;&#224;&#255;&#226;&#234;&#232;_&#238;&#242;&#240; WHERE Дата BETWEEN :Date1 and :Date2");
DataModule2.FndQuerry.Parameters.ParamByName("date1").Value:=DateTimePicker1.Dat e;   DataModule2.FndQuerry.Parameters.ParamByName("date2").Value:=DateTimePicker2.Dat e;
DataModule2.FndQuerry.Open;



> Германн ©   (19.07.10 01:57) [11]Да. Но переросли новичков
> только те, кто читал "учебники", а не просил



> sniknik ©   (19.07.10 09:38) [18]1 привязка к DataModule2
> 2 использование ADOQuery
> 3 то что делает ADOQuery опасным на старых версиях - внесение
> запроса частями
> 4 русское название таблицы (+ без кавычек)
> 5 параметры


Под рукой "Библия Делфи" Фленова. (Т.е. все-таки учебник я почитал прежде, чем обратиться к вам. Единственное, не знаю, правильную ли литературу выбрал, но до этого по его примерам все получалось)  И вот как раз там он использует и ADOQuerry, и внесение запроса по частям, и русские названия таблиц. Пытался делать по аналогии. С разработкой баз данных сталкиваюсь впервые. SQL - для меня, вообще, новое понятие. Можете называть меня ламером (наверное, так оно есть), но не уверен, что это добавит вам чести.


 
Dennis I. Komarov ©   (2010-07-19 13:12) [26]


> Под рукой "Библия Делфи" Фленова. (Т.е. все-таки учебник
> я почитал прежде, чем обратиться к вам. Единственное, не
> знаю, правильную ли литературу выбрал, но до этого по его
> примерам все получалось)

"Зина, в печку ее..."


 
Anatoly Podgoretsky ©   (2010-07-19 13:14) [27]


> Какой тип должен быть у поля "дата" в Access?

DateTime


 
Anatoly Podgoretsky ©   (2010-07-19 13:17) [28]


> Под рукой "Библия Делфи" Фленова. (Т.е. все-таки учебник
> я почитал прежде, чем обратиться к вам. Единственное, не
> знаю, правильную ли литературу выбрал, но до этого по его
> примерам все получалось)  И вот как раз там он использует
> и ADOQuerry, и внесение запроса по частям, и русские названия
> таблиц. Пытался делать по аналогии. С разработкой баз данных
> сталкиваюсь впервые. SQL - для меня, вообще, новое понятие.
>  Можете называть меня ламером (наверное, так оно есть),
> но не уверен, что это добавит вам чести.

В печку.
AdoQuery - в печку
запрос по частям - в печку
русские названия - если правильно используешь, то можно
За честь не беспокойся, по крайней мере мы не беспокоимся, если надо будет, то назовем.


 
Anatoly Podgoretsky ©   (2010-07-19 13:19) [29]


> русские названия - если правильно используешь, то можно

А ты используешь неправильно, поэтому тоже в печку.


 
lirikus   (2010-07-19 13:24) [30]


> Anatoly Podgoretsky ©   (19.07.10 13:14) [27]
> DateTime


Так и есть. В чем тогда несоответствие?


> Dennis I. Komarov ©   (19.07.10 13:12) [26]"Зина, в печку
> ее..."



> Anatoly Podgoretsky ©   (19.07.10 13:17) [28]В печку.
> AdoQuery - в печку
> запрос по частям - в печку
> русские названия - если правильно используешь, то можно


учту на будущее


 
И. Павел ©   (2010-07-19 13:28) [31]

А почему в [25] в "Select..." одно русское слово "Дата" отображается нормально, а то слово, которое после from - каракулями? Там что, три разных языка?


 
Юрий Зотов ©   (2010-07-19 13:35) [32]

> lirikus   (19.07.10 13:24) [30]

with DataModule2.FndQuerry.Parameters do
begin
 ParamByName("date1").AsDate := DateTimePicker1.Date;
 ParamByName("date2").AsDate := DateTimePicker2.Date;
end;

Часто приводимые на форумах примеры - это всего лишь подсказки. Их не следует понимать буквально.

А вот фразы типа "См. справку по разделу такому-то" следует понимать как раз буквально. И справку надо действительно смотреть.


 
sniknik ©   (2010-07-19 14:09) [33]

Юрий Зотов ©   (19.07.10 13:35) [32]
неправильно, говорили же уже, нужен datatime или готовсь к проблемам
т.е.
with DataModule2.FndQuerry.Parameters do
begin
 ParamByName("date1").AsDateTime := DateTimePicker1.DateTime;
 ParamByName("date2").AsDateTime := DateTimePicker2.DateTime;
end;


 
Anatoly Podgoretsky ©   (2010-07-19 14:11) [34]

> sniknik  (19.07.2010 14:09:33)  [33]

ParamByName("date1").AsDateTime -> ParamByName("date1").Value


 
sniknik ©   (2010-07-19 14:15) [35]

> Anatoly Podgoretsky ©   (19.07.10 14:11) [34]
а, ну да, "ступил". у нас тут уже дикая смесь BDE с ADO...


 
lirikus   (2010-07-19 14:34) [36]

Всем ОГРОМНЕЙШЕЕ СПАСИБО за помощь! В особенности sniknik  и Юрию Зотову. Заработал вариант с DateTime.

DataModule2.FndQuerry.SQL.Clear;
DataModule2.FndQuerry.Close;
DataModule2.FndQuerry.SQL.Add("Select * from &#199;&#224;&#255;&#226;&#234;&#232;_&#238;&#242;&#240; WHERE Дата BETWEEN :Date1 and :Date2");
DataModule2.FndQuerry.Parameters.ParamByName("date1").Value:=DateTimePicker1.Dat eTime;   DataModule2.FndQuerry.Parameters.ParamByName("date2").Value:=DateTimePicker2.Dat eTime;
DataModule2.FndQuerry.Open;


(Вместо value asdate/asdatetime  не подставлялось, ошибка Undeclared identifier: "AsDate")

P.S.: Не судите строго, я только учусь  =)


 
lirikus   (2010-07-19 14:35) [37]

Удалено модератором


 
Юрий Зотов ©   (2010-07-19 23:08) [38]

Вот и радость у человека...

Знакомо, проходили.

Жаль, что я уже не могу испытывать восторгов типа "блин, какой я крутой, не спал всего лишь пару суток, но запрос, гад такой, все же заработал".

Правда, подобный кайф все равно испытываешь, когда за ту же пару бессонных суток решишь сложную задачу. А уж если решишь ее еще и красиво, то полный кайф.

Но задачи такие попадаются очень редко, все больше рутина...
:-(


 
sniknik ©   (2010-07-20 00:58) [39]

> Вот и радость у человека...
а ошибки так и не исправил... только то на что "нарвался", до остального дела нет. радуется.


 
Германн ©   (2010-07-20 02:04) [40]


> а ошибки так и не исправил... только то на что "нарвался",
>  до остального дела нет. радуется.

Студент кулинарного техникума радуется, что наконец-то скинул зачет по ненавистному ему предмету "Программирование".
Может хоть кулинар из него получится грамотный?
:)



Страницы: 1 2 вся ветка

Текущий архив: 2010.10.10;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.011 c
15-1278793784
Юрий
2010-07-11 00:29
2010.10.10
С днем рождения ! 11 июля 2010 воскресенье


2-1279003263
И. Павел
2010-07-13 10:41
2010.10.10
RecordCount и все, что с ним связано


11-1225097570
Demiurg
2008-10-27 11:52
2010.10.10
Lazarus и ошибка "не найден файл"


2-1279176225
Шел мимо решил зайти
2010-07-15 10:43
2010.10.10
забрать файлик


4-1240850870
AndreyRus
2009-04-27 20:47
2010.10.10
hfile собственного процесса