掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
SqliteのDetachにおけるlockedエラー (ID:151757)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Sqlite3の処理について、教えてください。Delphiは 12 29.0.52631.8427 Win10 です。 デスク上のSqliteのDBからメモリ上にBackupし、Backupを更新した後、デスク上のSqliteのDBに書き戻す処理をしたいです。 下記において、Detachの行で、「プロジェクト PrgAAAA.exe は例外クラス ESQLiteNativeException (メッセージ '[FireDAC][Phys][SQLite] ERROR: database DisckDB is locked')を送出しました。」が発生し困っています。 省略・単純化をしてますが、流れは次のとおりです。 //******* // FDコネクション1のセット FDConnection1.Connected := False; FDConnection1.DriverName := 'SQLite'; FDConnection1.Params.Database := ':memory:'; //DBからメモリー上のSqliteにコピー FDSQLiteBackup1.DriverLink := FDPhysSQLiteDriverLink1; FDSQLiteBackup1.Database := SauceDataBaseFileName(); //SauceDataBaseFileName()はデスク上のデータベース名 FDSQLiteBackup1.DestDatabaseObj := FDConnection1.CliObj; FDSQLiteBackup1.Backup; FDConnection1.Connected := True; //[:memory:]に対して更新処理 //省略 //処理完了後 [:memory:]から、DisckDBに書き戻し //Attach FDConnection1.ExecSQL('Attach ' + SauceDataBaseFileName().QuotedString(#39) + ' as DisckDB'); //処理 AAA FDQuery1.SQL.Clear; FDQuery1.SQL.Add('Delete From DisckDB.TableAAA'); FDConnection1.StartTransaction; try FDQuery1.ExecSQL; FDConnection1.Commit; except FDConnection1.Rollback; end; //処理 BBB FDQuery1.SQL.Clear; FDQuery1.SQL.Add('Insert Into DisckDB.TableAAA Select * from TableAAA'); FDConnection1.StartTransaction; try FDQuery1.ExecSQL; FDConnection1.Commit; except FDConnection1.Rollback; end; //Detach FDConnection1.ExecSQL('Detach DisckDB'); //***** 最後の、 Detach処理で「プロジェクト PrgAAAA.exe は例外クラス ESQLiteNativeException (メッセージ '[FireDAC][Phys][SQLite] ERROR: database DisckDB is locked')を送出しました。」が発生します。 Delete、Insert処理ともCommitされ、DB Browser for SQLitewからデスク上のDBを確認すると、 [:memory:]から、DisckDBにコビーが成功していることも確認できます。また、lockedされてはいません。 「//処理 AAA」と「//処理 BBB」省いて、Attachの直後にDetachをした場合は、エラーは発生しません。 また、試しに、 Delete Insert (処理 AAAと 処理 BBB)に替えて、下記のようにSelect文でOpen,Closeしただけでも、Detachでエラーが発生します。 FDQuery1.SQL.Clear; FDQuery1.SQL.Add('Select * from DisckDB.TableAAA'); FDQuery1.Open; FDQuery1.Close; Detachの前に必要な処理があるのでしょうか??。 よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.