2015-09-26 2 views
1

в MS Access Я могу отфильтровать дату в запросе типа: ex.Как применить фильтр Delphi ADOTable к типу данных даты

SignUpDate> # 31/12/2013 #

это сделает базу данных только показать записи, где SignUpDate находится в 2014 или более поздняя версия

Как я сделать это в Дельфах?

dmGym.tblMembers.filter: = 'SignUpDate> '' # 31/12/2013 #' '', кажется, не работает

пожалуйста, помогите Виль быть высоко оценили

+1

Попробуйте 'dmGym.tblMembers.filter: = 'SignUpDate> # yyyy/mm/dd #' '(' 2013/12/31') – kobik

+0

Спасибо, это сработало !!! – RaymondSWalters

ответ

0

Try dmGym.tblMembers.filter: = 'SignUpDate> дд # гггг/мм/#' (2013/12/31)

-credit к kobik Прокомментируем

0

Я думаю, что вы не нужно # с, попробуйте

[...].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 закупоривает # знаков в вас (и делает хэш от него (пятна каламбур) при выполнении аналогичных для строковых полей - см. # signs in ADO locates (Delphi XE5)).

Но установка простого фильтра на TAdoTable, кажется, обходит ADODB.GetFilterStr и выполняет прямое присвоение его свойствам фильтра Recordset, поэтому я предполагаю, что если нужны #, они должны быть подключены ADO/MDac.

+0

Спасибо, но kobik уже ответил на мой вопрос, и его способ работает – RaymondSWalters

+0

Нет проблем - как я набрал его, я думал, что могу также опубликовать его, esp, поскольку он немного отличается от вашего конкретного q. Я отредактировал его, чтобы подтвердить предложение @ kobik. – MartynA

0

Delphi хранит дату и время как действительное число. Сегодня 05 июня 2016 года, а промежуточная часть DateTime - 42 526. Нулевое значение даты - начало 1900 года. Вам нужно сгенерировать переменную с именем DateInt.

Var ДатаInt: целое Дата1: TDate; Начало ДатаInt: = Trunc (Date1)

Когда вы сохраняете дату, сохраните DateInt в обработчике событий BeforePost. Это дополнительное поле, но теперь фильтрация проста. Например, ваш фильтр теперь может быть

NewDateInt: = Trunc (Date1); Фильтр: = 'NewDate = DateInt';

2

Вы можете попробовать:

dmGym.tblMembers.Filter:='SignUpDate > 31/12/2013'; 
dmGym.tblMembers.Filtered:=True; 

Это позволит сделать базу данных только показать записи, где SignUpDate в 2014 или более поздней версии.

Удачи.

Смежные вопросы