В таблице необходимо отсортировать данные по дате таким образом: 31.11.2002 02.07.2003 12.01.2004 07.12.2005 20.05.2006 использовал следующий код:
procedure TForm1.N8Click(Sender: TObject); begin DataModule1.BookTable.IndexFieldNames:= 'Дата'; end;
но он сортирует данные в таком порядке: 02.07.2003 07.12,2005 12.01.2004 20.05.2006 31.11.2002 т.е. сортировка происходит по первым числам а не по фактической величине даты. Пробовал таким образом:
procedure TForm1.N8Click(Sender: TObject); begin DataModule1.BookTable.sort:= 'Дата'; end;
но результат тот же самый. Подскажите, как правильно отсортировать данные по дате как описано выше
Для полей типа data/time нужно по-другому организовывать условия поиска
Естественно... LIKE работает именно с текстом, с датами работают при помощи других функций. Но "мы пойдем другим путем" (С):
1) OnChange Эдита чуть-чуть меняешь:
procedure TForm1.Edit1Change(Sender: TObject); begin if Length(Edit1.Text) > 0 then begin ADOTable1.Filtered := false; // Отключаешь фильтрацию ADOTable1.Filtered := true; // И тут же опять включаешь... Зачем - чуть ниже поймешь end else ADOTable1.Filtered := false; end;
2) А теперь - зачем нам понадобилось делать столь неразумно: отключать фильтр и тут же его опять включать, ничего не меняя. А вот зачем: есть у TADOTable такое событие - OnFilterRecord, в котором ты можешь задать для активного фильтра критерий, допускать ли запись или фильтровать ее. Вот для того, чтобы при каждом изменении содержимого Edit-а перефильтровывались данные, и надо отключить/включить Filtered. Ну, и сам обработчик:
procedure TForm1.ADOTable1FilterRecord(DataSet: TDataSet; var Accept: Boolean); begin Accept := Pos(Edit1.Text, DataSet.FieldByName('DateOfBirth').AsString) > 0; end;
(я везде оставил свои названия компонентов, поменяешь потом на то, что у тебя...)
Теперь можно в Эдите набирать любые сочетания, хоть так: 10/10/ (что выдаст тебе все данные с датой = 10 октября), хоть вот так: /12/ (что покажет все декабрьские даты). Ну, в общем, как и LIKE