FireDAC引擎上的SQLite数据库不尊重回滚

时间:2017-05-12 16:52:50

标签: sqlite delphi transactions rollback firedac

我在Delphi(Delphi 10.1 Berlin)应用程序中有一个数据访问对象(DAO)。我创建了与SQLite数据库的连接,选择了一些数据(Simple select子句),然后使用TFDQuery组件的ExecSQL()方法执行update子句。数据库中的数据未更改

然后,我在连接中执行rollback()方法。数据库中的数据尚未更改

所以,我在连接中执行close()方法。数据库中的数据已更改

我不知道这是否是FireDAC和SQLite的预期行为,但我认为不应该这样。

一些代码:

FFDConnection                  := TFDConnection.Create(nil);
FFDConnection.Params.Database  := 'database.db3';
FFDConnection.Params.UserName  := '';
FFDConnection.Params.Password  := '';
FFDConnection.Params.DriverID  := 'SQLite';
FFDConnection.Open();

FFDQuery            := TFDQuery.Create(nil);
FFDQuery.Connection := FFDConnection;

FFDConnection.StartTransaction();
// ... Some update code ...
FFDConnection.Rollback();
FFDConnection.Close();
FFDConnection.Free();

FFDConnection.Rollback();之后FFDConnection.Close();之前,数据库中的数据仍未更改。在FFDConnection.Close();之后,数据库中的数据发生了变化。

这是SQLite的问题吗?

我非常感谢您提供的任何帮助。

编辑1:问题是我没有为我的连接创建TFDTransaction因为我认为创建是隐含的。我觉得很蠢。

0 个答案:

没有答案