Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 &#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.004 c
15-1279091543
Cannon
2010-07-14 11:12
2010.10.10
Помогите составить запрос в Interbase


15-1278590211
ocean
2010-07-08 15:56
2010.10.10
Зачем металлическое кольцо


2-1279431185
Study
2010-07-18 09:33
2010.10.10
Работа с файлами концигурации


15-1278792046
Kerk
2010-07-11 00:00
2010.10.10
Посоветуйте WiFi-роутер


2-1279476319
lirikus
2010-07-18 22:05
2010.10.10
Фильтрация по дате





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский