Как применить фильтр Delphi ADOTable к типу данных даты
В MS Access я могу отфильтровать дату в запросе, как это: например,
SignUpDate > #31/12/2013#
это заставит базу данных показывать только записи, где SignUpDate находится в 2014 или новее
Как я буду делать это в Delphi?
dmGym.tblMembers.filter: = 'SignUpDate>' '# 31/12/2013 #' '', похоже, не работает
пожалуйста, помогите ему будет высоко ценится
4 ответа
Попробуйте dmGym.tblMembers.filter:= 'SignUpDate > # гггг / мм / дд #' (2013/12/31)
-кредит к комментарию кобика
Ты можешь попробовать:
dmGym.tblMembers.Filter:='SignUpDate > 31/12/2013';
dmGym.tblMembers.Filtered:=True;
Это заставит базу данных показывать только записи, где SignUpDate в 2014 году или новее.
Удачи.
Delphi хранит дату и время как действительное число. Сегодня 05 июня 2016 года, а промежуточная часть DateTime - 42 526. Нулевая дата - начало 1900 года. Вам нужно сгенерировать переменную с именем DateInt.
Var DateInt: целое число Date1: TDate; Начало DateInt:= Trunc(Date1)
Когда вы сохраняете дату, сохраняйте DateInt в обработчике событий BeforePost. Это дополнительное поле, но фильтрация теперь проста. Например, ваш фильтр теперь может быть
NewDateInt:= Trunc(Date1); Фильтр: = 'NewDate = DateInt';
Я думаю, что вам не нужно #
с, попробуй
[...].Filter := '12/31/2013'; // this is for Sql Server and tested
// for UK locale, for Access you may need to swap the dd and mm,
//and maybe even the yyyy as suggested by @kobik in a comment.
Если вы используете поле TDateTime в TAdoDataSet.Locate(), функция GetFilterStr подключает #
выполняет вход для вас (и делает хэш (выделяет каламбур) при выполнении аналогичных действий для строковых полей - см. # знаки в ADO locates (Delphi XE5)).
Но установка простого фильтра для TAdoTable, кажется, обходит ADODB.GetFilterStr и выполняет прямое назначение свойству Filter его набора записей, поэтому я предполагаю, что если #
Они необходимы, они должны быть подключены слоем ADO/MDac.