Форум: "Начинающим";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];
ВнизФильтрация по дате Найти похожие ветки
← →
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 çàÿâêè_îòð");
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 çàÿâêè_îòð");
> 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 Çàÿâêè_îòð 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 Çàÿâêè_îòð 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;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.004 c