私はアンドロイドアプリで作成されたテーブルを持っています。Delphi 10.1 FireDacとSqliteの日付発行
CREATE TABLE IF NOT EXISTS `TimeSheet
`TKey` INTEGER PRIMARY KEY AUTOINCREMENT,
`PriKey1` INT NOT NULL,
`PriKey2` DEFAULT NULL,
`PriKey3` DEFAULT NULL,
`STime` DATETIME DEFAULT NULL,
`ETime` DATETIME DEFAULT NULL,
`Note` BLOB);
いくつかのデータをさまざまな日付でロードしました。
また、一度に1日のデータしか表示されないようにフィルタリングする必要があります。私はどこステートメントSDATEは、いくつかのDD-MM-1800の日付を持って削除した場合、そうする
Delphiコードは
FD := "a date";
QuTimeSheet.Active := False;
QuTimeSheet.SQL.Text := 'Select Date(STime) as SDate, Time(STime) as STime, Time(ETime) as ETime, Task.TaskName From TimeSheet' + #13 + #10 +
' LEFT JOIN task ON (TimeSheet.PriKey1 = task.TKey)';// + #13 + #10 +
'Where SDate = ''' + formatdatetime('YYYY-MM-DD',FD) + ''';';
QuTimeSheet.Active := True;
を下回っています。これは、Date(STime)dosentがDelphiで動作することを示しています。
もSDATE
デルファイdosentとしてSTRFTIME(%Y- & M-%のD、STIME)を試みたSTRFTIME Androidデバイスのクラッシュを好むように見えます。
はフィルタ
QuTimeSheet.Filtered := False;
QuTimeSheet.Filter := 'SDate = ''' + formatdatetime('YYYY-MM-DD',FD) + '''';
QuTimeSheet.Filtered := True;
または
QuTimeSheet.Filtered := False;
QuTimeSheet.Filter := 'SDate = ''' + Datetostr(FD) + '''';
QuTimeSheet.Filtered := True;
これは何をフィルタリングしないを使用してみました。
これはMySqlとSqlite turorialsサイトで動作するような簡単なステートメントです。
なぜ私のアプリにはありませんか?
を停止し、SQLを連結します。パラメータ化されたクエリを代わりに使用します。 DBドライバは、パラメータ値を適切にフォーマットし、SQLから 'Date()'を削除し、基本的なクエリを最初にパラメータで正しく動作させるよう心配してください。ここでは、Delphiでパラメータを使用する方法について複数の例があります。 'formatdatetime'とそのすべてで停止し、単にパラメータを使用してください。 –
これを含める必要があります:TFDQuery.ParamByNameを参照し、FDQuery1.ParamByName( 'SDate')で使用します。文字列に書式設定する代わりにAsDateTime。 FireDACのためのものではありませんが、[この回答](http://stackoverflow.com/a/11834743/62576)は一般的な考え方を示します。 –
文字列にチューニングすることなく、日付スクリプト変数(FD)をテキストスクリプトに渡すことはできません。連結とパラメータ化された平均とは何ですか?値の時間的な側面を無視する必要があるので、値をフォーマットする必要があります。 –