【发布时间】:2018-09-13 11:52:12
【问题描述】:
当我提交时,我天真地认为数据库的物理文件会被更新(更改修改日期),但显然它不是那样工作的。 关闭数据库时修改数据库的物理文件!!!
我用 (delphi 10.2.3) 编写了一个小测试应用程序 * FDConnection1:TFDConnection; (所有默认设置)(cachedupdate 为 false) * FDQuery1:TFDQuery; (所有默认设置)
我的 SQLite 数据库只有一张表
创建表t_stritems(IdItels整数,St01VARCHAR(200),St02VARCHAR(200),St03VARCHAR(200),主键(IdItels))
我的代码很简单
连接数据库:
FDConnection1.Connected := false;
FDConnection1.Params.Clear;
FDConnection1.Params.Add('DriverID=SQLite');
FDConnection1.Params.ADD('Database=' + Edit1.text);
FDConnection1.Connected := true;
向数据库中插入行
FDQuery1.Connection := FDConnection1;
FDQuery1.close;
fdquery1.sql.clear;
fdquery1.sql.add('DELETE FROM t_stritems');
FDConnection1.StartTransaction;
fdquery1.ExecSQL;
FDConnection1.Commit;
fdquery1.sql.clear;
fdquery1.sql.add('SELECT * FROM t_stritems');
fdquery1.Open;
for i := 0 to 15 do
begin
for j:= 1 to 2000 do
begin
FDQuery1.append;
FDQuery1.FieldByname('IdItels').asInteger := (i*2000) + j;
FDQuery1.FieldByname('St01').asString := 'Text 01 Number : ' + FDQuery1.FieldByname('IdItels').asString;
FDQuery1.FieldByname('St02').asString := 'Text 02 Number : ' + FDQuery1.FieldByname('IdItels').asString;
FDQuery1.FieldByname('St03').asString := 'Text 03 Number : ' + FDQuery1.FieldByname('IdItels').asString;
FDQuery1.post;
end;
// FDConnection1.Commit;
end;
end;
测试过程: 连接数据库:(我数据库的t_stritems文件包含32000条记录;数据库文件大小为2338 ko) 删除 sql 后,我的数据库文件目录中有一个日志文件(xxxx.db-journal)。数据库文件大小为 2338 ko 在第一次提交之后,我总是在我的数据库文件的目录中保存日志文件(xxxx.db-journal)。数据库文件大小为 2338 ko(无物理更新) 然后程序添加 32000 条记录 数据库文件(.db)的修改日期只有在我离开我的应用程序时才会被修改。 !!! 日志文件 (.db-log) 将在我的应用程序结束时被删除
问题: 如何使提交将数据保存到数据库? 这是正常的吗? 数据库的物理文件只有在应用程序关闭时(并且在连接的同时)才被修改?
提前感谢您的回答 最好的祝福 罗莫尔德
【问题讨论】:
标签: sqlite delphi commit firedac