|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Поиск в интервале дат (ADO)
Необходимо реализовать поиск в интервале дат.
Есть 2 компонента DateTimePicker1 и DateTimePicker2, так же есть DBGrid. Нужно чтобы всё это запускалось через обычную кнопку, и желательно что бы это было сделано на filtered Заранее спасибо. PS: бд ACCESS |
#2
|
|||
|
|||
Ну так и делай. Только там не на DBGrid, а на самом источнике данных делается.
Код:
procedure TForm1.ADOQuery1FilterRecord(DataSet: TDataSet; var Accept: Boolean); begin If FMyFiltered Then Accept := (DataSet.FieldByName('Date1').AsDateTime > DateTimePicker1.Date) And (DataSet.FieldByName('Date1').AsDateTime < DateTimePicker2.Date) Else Accept := True; end; procedure TForm1.Button1Click(Sender: TObject); begin FMyFiltered := True; end; ЗЫ. Предпочитаю пользоваться этим событием - больше возможностей. |
#3
|
|||
|
|||
Кхм...прошу прощения, но я нуб полный =\ выпускной курс, но увы, в колледже ничему не учили.
Цитата:
|
#4
|
||||
|
||||
Grid - это только средство отображения данных, потому запросы/фильтры надо использовать на источнике данных для отображения.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Если чесно всё равно не понимаю как ЭТО работает свой предыдущий фильтр писал так :
Код:
procedure TFindeUnit.btn1Click(Sender: TObject); begin DataModule1.ADOTable1.Filtered:=false; if Edit1.Text='' then exit; DataModule1.ADOTable1.Filter:=Combobox1.Text + ' LIKE ' + #39 + Edit1.Text + '%' + #39; DataModule1.ADOTable1.Filtered:=true; end; ....Приношу извинения за нубство, но на самом деле вот только сейчас всё это осваиваю. |
#6
|
||||
|
||||
Вот так для даты можно попробовать:
Код:
procedure TFindeUnit.btn1Click(Sender: TObject); begin DataModule1.ADOTable1.Filtered:=false; if Edit1.Text='' then exit; DataModule1.ADOTable1.Filter:=Format('Date1 between DateValue(%s) and DateValue(%s)',[DateToStr(DateTimePicker1.Date),DateToStr(DateTimePicker2.Date)]); DataModule1.ADOTable1.Filtered:=true; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
Цитата:
|
#8
|
||||
|
||||
Сделайте точку останова и посмотрите, что получается в DataModule1.ADOTable1.Filter, фозможно что параметр %s придется еще и кавычками окружать т.к. это предполагается строка.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
|||
|
|||
Вопрос решен(УРА!).
Всем спасибо за помощь. Прикрепляю файл-юнит, если кому понадобится. |
#10
|
|||
|
|||
Corwin Выложите Пожалуйста программа исходникам. Не понял там ничего... Я не понял какои база у тебя .... У меня такои база ,,Access" написал так Посмотрите... на один месяц работает нормально а кагда переходим на втарое месияц не Фильтрует нормально.... Помогите пожалуйста Ребята кто разабрал это ????
http://rapidshare.com/files/43077591...__________.rar |
#11
|
|||
|
|||
Уважаемые Программисты Помогите пожалуйста.... Покажите пример как это разбираться
|
#12
|
|||
|
|||
уважаемые коллеги помогите делать на это база SQL запрос
|
#13
|
||||
|
||||
А что именно вы хотите? Узнать как сделать SQL-запрос для интервала дат?
Тогда будет примерно так: Код:
select * from YouTable where YouDate between '01.01.2010' and '31.12.2010' Код:
select * from YouTable where YouDate between Cast('01.01.2010' as DateTime) and Cast('31.12.2010' as DateTime) или так: Код:
select * from YouTable where YouDate between Convert(DateTime,'01.01.2010',104) and Convert(DateTime,'31.12.2010',104) Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#14
|
|||
|
|||
Добры вечер Страдалецъ мне надо... чтобы фильтровать точно Мои пример базы. на Form1 иест 2 DateTimePicker ... База прикрепление наверх... помогите пожалуйста.... как сделать на нево фильтрация или SQL запрос чтобы нормально работал... КАК НЕ РАБОТАЕТ НОРМАЛЬНО
begin ADOTable1.Filtered:=false; ADOTable1.Filter:='[Äàòà]>='+QuotedStr(DateToStr(DateTimePicker1.DateTime)) +'and [Äàòà]<='+QuotedStr(DateToStr(DateTimePicker2.DateTime)) +''; ADOTable1.Filtered:=true; end; |
#15
|
||||
|
||||
Нет, так работать не будет. Вы сделали ошибку при проектировании структуры таблиц. У вас все поля для даты определены как текстовые. А сортировка текста и даты могут сильно различатся по результату.
Поэтому для начала измените тип полей в таблицах, а уже потом применяйте фильтр. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |