Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite FireDac缓存更新停止更新_Sqlite_Delphi_Firedac - Fatal编程技术网

Sqlite FireDac缓存更新停止更新

Sqlite FireDac缓存更新停止更新,sqlite,delphi,firedac,Sqlite,Delphi,Firedac,我正在使用SQLite数据库Delphi西雅图FireDac组件。 我有两个以上的应用程序写入同一数据库的表中。 我遇到了锁问题,因此开始使用CachedUpdates,一切都很好 问题: 当应用程序运行超过几个小时时,应用程序会停止更新“编辑”、“删除我的数据库表”、“读取”和“选择”工作正常。 OnReconcienceError中没有出现错误。此问题发生在其中一个应用程序中,同时使用同一数据库的另一个应用程序工作正常。 若重新启动有问题的应用程序,一切都会恢复正常 这就是我打开数据库的方式

我正在使用SQLite数据库Delphi西雅图FireDac组件。 我有两个以上的应用程序写入同一数据库的表中。 我遇到了锁问题,因此开始使用CachedUpdates,一切都很好

问题: 当应用程序运行超过几个小时时,应用程序会停止更新“编辑”、“删除我的数据库表”、“读取”和“选择”工作正常。 OnReconcienceError中没有出现错误。此问题发生在其中一个应用程序中,同时使用同一数据库的另一个应用程序工作正常。 若重新启动有问题的应用程序,一切都会恢复正常

这就是我打开数据库的方式

LockingMode=Normal
StringFormat=Unicode
JournalMode=WAL
DriverID=SQLite
SharedCache=False
Synchronous=Full
BusyTimeout=20000
ForeignKeys=Off
典型文体

  try
    wQry:=TFDQuery.Create(Nil);
    wQry.Connection:=form_DatabaseWork.FDConnection1 ;
    wQry.CachedUpdates:=True ;
    wQry.Active:=false;
    wQry.sql.text:='Select * from Setups';
    wQry.Active:=True;
    wQry.Edit ;
    wQry.FieldByName('DisplayTitles').AsString:=wMsg ;
    ssPost(wQry) ;
    ssApplyUpdates(wQry);
  finally
    wQry.Active:=false;
    FreeAndNil(wQry);
  end;
调用函数

procedure ssApplyUpdates(pQry:TFDQuery);
var
  nErr:Integer ;
begin
  nErr:=pQry.ApplyUpdates ;
  if nErr>0 then
  begin
    pQry.OnReconcileError:=form_Tools.Qry_DummyReconcileError ;
    pQry.Reconcile ;
    pQry.OnReconcileError:=Nil ;
  end
  else
    pQry.CommitUpdates ;
end;

function ssPost(pQry:TFDQuery):Boolean ;
begin
  result:=false;
  try
    pQry.Post;
    result:=true;
  except
    on E: Exception do
      WriteSomewhere(E.Message) ;
  end;
end;

procedure Tform_Tools.Qry_DummyReconcileError(DataSet: TFDDataSet; E: EFDException; UpdateKind: TFDDatSRowState; var Action: TFDDAptReconcileAction);
begin
  Action:=raCorrect ; 
end;

我尚未添加FDconnection.transaction。。。希望这会有所帮助。谢谢。

您是否尝试过更改代码,以便执行流程遵循“应用更新”一节中的示例—这不会发生。受.NET启发,FireDAC有一个非常稳定的内部存储代码。无论它运行多长时间。这种行为的一个常见原因是启动显式事务,在事务提交之前阻止其他客户端看到更改。对于sqlite,这将是一个开始;没有后续承诺;或回滚@Brian,这不能解释这个问题。@TLama更新已完成,没有错误,但其他会话或连接未看到更新。。。。这是尚未提交的外部活动事务的模式。在这种情况下可能不是问题,但它确实遵循了模式。