FireDAC 数据库开发笔记(2. 快储机制)

FireDAC 快储机制

FireDAC 快储功能(Cached Update) 是 新增或修改的数据暂时存储到客户端,等到适当的状态时在更新回后端数据库中。如: 新增或更新的数据量多的时使用此方法。

    1.  FDQuery 的 CachedUpdates = True  --- 开去 快储功能
    2. 使用 Insert , Edit , Delete 和 Post 方法异动数据
    3. 呼叫 ApplyUpdates 方法吧客户端的异动一次写回 后端数据库中
    4. 如果成功 -- 呼叫 FDQuery 的 CommitUpdates 方法清除客户端的异动记录、如果发生错误 -- 呼叫 FDConnection 的 Rollback 方法取消数据写回

Update Status 时每一个记录的变异情况记录

  • FDQuery 的 Data , Delta 特性

💡 计算字段  (Calculated Fields): 是指  这个字段并不真正储存在数据表中,而是在程序执行时动态建立的 暂时字段

 fdqData --- AfterPost

FDMemTable2.Active := False;
FDMemTable2.Data := fdqData.Delta;
FDMemTable2.Active := True;

 

💡 ApplyUpdates  参考代码

var
    Errors: Integer;
begin
    dmConn.fdConnection.StartTransaction;
    Errors := dmConn.fdqData.ApplyUpdates(-1);
    if Errors > 0 then 
        dmConn.fdConnection.Rollback
    else
    begin
      dmConn.fdConnection.Commit;
      dmConn.fdqData.CommitUpdates;  -- 清除客户端的异动记录
      dmConn.fdqData.Refresh;
    end;
    
end
  • SavePoint  (P 84)

💡 开始异动数据之前建立一个SavePoint , 如果因为特定原因应用程序需要放弃上次SavePoint到现在之间异动的资料,那么程序员可以回到上一次建立的SavePoint

所有的异动都自动恢复。

  •  RevertRecord方法  恢复到原始的状态
//  它先判断目前快储的资料,  如果不是未异动过的数
if dmConn.fdqData.UpdateStatus <> usUnmodified then
   dmConn.fdqData.RevertRecord;
  • FDQuery 的 Commit Updates 方法 

可以清除所有的快储异动, 快储异动 (Delta) 已经被清除

  • UndoLastChange方法

TFDQuery 的 UndoLastChange 方法可以以反相的方向逐一的恢复前一次对于数据的异动,一直到最开始的状态。

  • 处理FireDAC快储更新错误

       在使用FireDAC快储功能时,由于在客户端异动的数据是一次更新回后端,因此在更新数据时可能会发生问题

  例如主键值冲突,数据字段数据值己经被其他人/其他客户端异动了或是数据已被其他人/其他客户端删除了等状况。这些状况都会造成ApplyUpdates方法产生错误,对于无法成功更新回后端的数据,

  FireDAC会为每一笔无法更新的数据触发一次 OnReconcileError 事件处理函式,程序员需要在OnReconcileError事件处理函式处理这些产生错误的数据。

💡   程序员在OnReconcileError事件处理函式中处理错误时,可使用TFDQuery的下面2个特性来取得每一个字段的原始值以及异动过的数值:

 

posted @ 2022-05-25 14:43  麦麦提敏  阅读(908)  评论(0编辑  收藏  举报