delphi 当多个用户尝试在Lazarus中同时保存数据时,SQLite数据库锁定问题

uqzxnwby  于 2023-04-20  发布在  SQLite
关注(0)|答案(1)|浏览(168)

我在Lazarus中将数据保存到SQLite数据库时遇到问题。当多个用户试图同时将数据保存到数据库时,会发生冲突,因为数据库被锁定。
有没有人遇到过类似的问题,并且知道如何解决它?也许有一种机制允许等待访问数据库?
下面是引发问题的示例代码:

SQLite3Connection1.Connected:=true;

sql:= 'Insert into data (a, b, c) values (:a, :b, :c)';

SQLMaterial.SQL.Text:=sql;
SQLMaterial.ParamByName('a').AsString:=text1;
SQLMaterial.ParamByName('b').AsString:=text2;
SQLMaterial.ParamByName('c').AsString:=text3;

SQLMaterial.ExecSQL;  <-- collision problem

SQLMaterial.Close;
SQLite3Connection1.Connected:=false;

谢谢
我还在学习,还没有找到合适的解决方案。

k4aesqcs

k4aesqcs1#

PRAGMA忙碌_timeout -被证明是一个很好的解决方案。

`SQLite3Connection1.ExecuteDirect('PRAGMA busy_timeout = 3000;');
 SQLite3Connection1.Connected:=true;

 sql:= 'Insert into data (a, b, c) values (:a, :b, :c)';

 SQLMaterial.SQL.Text:=sql;
 SQLMaterial.ParamByName('a').AsString:=text1;
 SQLMaterial.ParamByName('b').AsString:=text2;
 SQLMaterial.ParamByName('c').AsString:=text3;

 SQLMaterial.ExecSQL; 

 SQLMaterial.Close;
 SQLite3Connection1.Connected:=false;`

相关问题