2016-12-29 1 views
0
procedure TForm2.Button1Click(Sender: TObject); 
begin 
    with qryWithFilter do 
    begin 
    Filtered := False; 
    OnFilterRecord := nil; 
    // date separator may be used any from [' ', '-', '\', '.', '/'] 
    // Filter := 'DATA_NAS < (''DatetoStr(date3)'')'; 
    // Filter := 'DATA_NAS < ''28/06/1939'''; 
    // Filter := 'DATA_NAS < (FormatDateTime(''dd/mm/yyyy'', ''28/06/1968''))'; 
    // Filter := 'DATA_NAS < TO_DATE(''1996-07-29'',''yyyy-mm-dd'')'; 
    Filter := 'DATA_NAS < (TO_DATE(''1996-07-29'',''yyyy-mm-dd''))'; 
    Filtered := True; 
    end; 
end; 

''28/06/1968' '에서만 작동합니다. 내가 갖는 오류 :DATE 값 상수로 FireDAC 데이터 집합을 필터링하는 방법은 무엇입니까?

enter image description here

어떻게 DATE 값 상수로 내 FireDAC 쿼리를 필터링 할 수 있습니다?

답변

1

Filter 속성은 DBMS 기능을 지원하지 않습니다. 자신 만의 연산자 집합. FireDAC을 사용하면 표현 엔진을 사용하여 더 멀리 갈 수 있습니다. 이를 위해 절을 사용하여 에 FireDAC.Stan.ExprFuncs 장치를 추가해야합니다. 다음은 표현 엔진에 의해 등록되지 않은 함수를 사용하려고 시도한 것입니다. 문자열 상수를 DATE 유형 값으로 변환하려면 Filter 속성 식을 사용합니다. 예를 들면 다음과 같습니다. CONVERT 매크로 함수 또는 {d} 이스케이프 시퀀스. 그런 다음 표현식 엔진이 DBMS 특정 변환 함수를 선택합니다.

uses 
    FireDAC.Stan.ExprFuncs; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    with FDQuery do 
    begin 
    { disable filter } 
    Filtered := False; 
    { filter with date escape sequence (is nicely readable) } 
    Filter := 'DATA_NAS < {d 1996-07-29}'; 
    { filter with CONVERT macro function without function escape sequence } 
    Filter := 'DATA_NAS < {CONVERT(''1996-07-29'', DATE)}'; 
    { filter with CONVERT macro function with function escape sequence } 
    Filter := 'DATA_NAS < {fn CONVERT(''1996-07-29'', DATE)}'; 
    { enable filter } 
    Filtered := True; 
    end; 
end; 
:

이러한 필터 중 하나를 시도하십시오 (모든 변종에 대한 날짜 문자열 형식은 YYYY-MM-DD입니다)

관련 문제