![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Необходимо реализовать поиск в интервале дат.
Есть 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
|
|||
|
|||
|
Цитата:
формат столбца стоит Date\Time(в бд). |
|
#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
|
||||
|
||||
|
Нет, так работать не будет. Вы сделали ошибку при проектировании структуры таблиц. У вас все поля для даты определены как текстовые. А сортировка текста и даты могут сильно различатся по результату.
Поэтому для начала измените тип полей в таблицах, а уже потом применяйте фильтр. |