FireDAC 数据库开发笔记(2. 快储机制)
FireDAC 快储机制
FireDAC 快储功能(Cached Update) 是 新增或修改的数据暂时存储到客户端,等到适当的状态时在更新回后端数据库中。如: 新增或更新的数据量多的时使用此方法。
-
- FDQuery 的 CachedUpdates = True --- 开去 快储功能
- 使用 Insert , Edit , Delete 和 Post 方法异动数据
- 呼叫 ApplyUpdates 方法吧客户端的异动一次写回 后端数据库中
- 如果成功 -- 呼叫 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个特性来取得每一个字段的原始值以及异动过的数值: