2016-03-14 2 views
1

Итак, у меня есть запрос: "Select * FROM Payments WHERE Day([PayDate])=Day(Date()) AND Month([PayDate])=Month(Date())"
AdoQuery.Filter с датами

и мне было интересно, как я могу это сделать в ADOQuery.Filter СВОЙСТВ в ADOQuery.

Я знаю, что вы можете использовать «Ands», чтобы поставить несколько условий, но я не получаю Month(Date()) и Day(Date()). Я использую базу данных доступа кстати.

ответ

1

ADOQuery.Filter не совпадает с предложением SQL "WHERE".

Вам необходимо рассчитать функции в SQL перед их использованием.

Попробуйте сделать так:

ADOQuery.SQL.Text := 'SELECT *, Day([PayDate]) AS d, Month([PayDate]) AS m FROM Payments'; 

И затем использовать "D" и "M" поля в ADOQuery.Filter

uses DateUtils; 

procedure FilterQuery; 
var 
    D: TDateTime; 
begin 
    D := Now; 

    ADOQuery.Filtered := False; 
    ADOQuery.Filter := Format('d = %u AND m = %u', [DayOf(D), MonthOf(D)]); 
    ADOQuery.Filtered := True; 
end; 
+0

я получил некоторые ошибки, в 'ADOQuery.Filter 'line, мой код такой же, но я думаю, что это проблема с«% u »или« DayOf » –

+0

Если вы не можете скомпилировать, добавьте блок DateUtils в« uses ». – dustypup

+0

Код компилируется, но через несколько секунд он падает. Эта часть кода является атрибутом «OnActivate» формы, я определил, в какой части программа зависает, и находится в части фильтра. Также я получил ошибку недействительного предложения или что-то вроде этого –