2番目のデータベースをアタッチした後、ON CONFLICT(id)DO UPDATEを使用して、最初のデータベースのテーブルにデータを挿入して更新しようとしました。フィールドIDは、最初のテーブルの主キーです。
FDQuery1.EXECSQL('ATTACH ''D:\Update2019.DB'' AS DBUpdate');
FDQuery1.SQL.Text:=
'INSERT INTO acts (id,title) SELECT id,title FROM DBUpdate.acts'+
' WHERE (DBUpdate.acts.id >100)'+
' ON CONFLICT(id) DO UPDATE SET'+
' title=excluded.title;'
FDQuery1.ExecSQL;
「ERRORnear "ON":syntax error」というエラーメッセージが表示されます。WHERE(DBUpdate.acts.id> 100の条件)を削除すると、エラーメッセージAS:「ERRORnear "DO":syntaxerror」が表示されます。
同じクエリがSQLITESTUDIOで正常に機能します。
コメントで正しく示されているように、アプリケーションが使用するSQLiteはこの構文をサポートしていません。新しいバージョンのSQLiteを使用する必要があります。これを行うには、トピックのダイナミックリンクの段落に従ってFireDAC SQLite connection
ください。そうでない場合、Delphiは、配布されているバージョンの静的にリンクされたSQLiteオブジェクトを使用してFireDACアプリケーションを構築します(これにより、アプリケーションは、SQLite DLLがどのようなものであっても、そのようなSQLiteバージョンに依存します)。
このタスクの最も重要な部分を忘れないでください。ダイナミックリンクを使用するようにFireDAC.incインクルードファイルを変更します。Delphiセットアップソースフォルダを壊したくない場合は、たとえばすべてのFireDACモジュールを別の場所にコピーし、それらをプロジェクトのビルド検索パスに追加して、そこにあるFireDAC.incインクルードファイルを変更します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加