2016-12-29 18 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型値に変換するには、たとえば次のようにします。 CONVERTマクロ関数、または{d}エスケープシーケンス。次に、式エンジンはDBMS固有の変換関数を選択します。

(すべてのバリアントの日付文字列フォーマットはYYYY-MM-DDである)これらのフィルタのいずれかを試してみてください。

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; 
関連する問題