CDS错误处理


DataSetProvider.OnUpdateError

procedure TForm1.DataSetProvider1UpdateError(Sender: TObject;

  DataSet: TCustomClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind;
  var Response: TResolverResponse);
begin

//

end;

Sender--出发这个事件处理函数的对象。

DataSet--代表发生错误的数据集组件,而且DataSet中目前的记录就是发生错误的数据

 E ---发生错误时产生的异常对象,程序员可以从这个对象中取得所有详细的错误信息,入发生错误的原因,错误的原始数据库错误码等

UpdateKind---代表什么行为造成了错误,例如是新增,修改或是删除数据的动作。

Response---由程序员设置,单程序员设置了Response的参数值,并且OnUpdateError事件处理执行完毕之后,会根据甚至的值决定如何继续处理这个错误(非常重要)

附:

EUpdateError特性:

context ---错误堆栈的内容信息

ErrorCode--由dbExpress/BDE/ADO返回的错误码

OriginalException--代表这个修改错误的异常对象(ErrorCode<>0 ,可以通过OriginalException对象取得来进一步的错误信息)

ProviouxError--前一次修改行为的错误码


Response可以设置值

TResolverResponse = (rrSkip, rrAbort, rrMerge, rrApply, rrIgnore);

rrSkip---跳过这个错误的记录,并且把这个记录继续留在缓存内存中

rrAbort--中断整个更新行为,并且Rollback所有修改的数据

rrMerge--把数据封包中修改的数据和数据表中的数据互相合并

rrApply---这个设置代表程序员在OnUpdateData事件处理函数中修正了错误的原因,而要求再更新数据一次。

rrIgnore--忽略产生的错误的这个记录,而且也不会再把这估计产生错误的记录返回给客户端应用程序,让客户端应用程序有机会进行额外的处理。

}


OnReconcileError的函数参数代表意义和OnUpdateError非常相近

procedure TForm1.ClientDataSet1ReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin


end;

TReconcileAction = (raSkip, raAbort, raMerge, raCorrect, raCancel, raRefresh)代表程序员可以执行的动作

raSkip--跳过这笔记录,并且把用户对于这个记录的修改的值保留在TsimpleDataSet/ClientDataset的Delta中

raAbort--中止整个更新数据的流程,RollBack所有修改

raMerge--把这个需要修改的记录和目前的数据表中的数据合并

raCorrect--用事件处理函数中指定的新值更正目前需要更新的数据

raCancel--取消对于这个记录的所有修改,并且恢复所有字段的旧值。

raRefresh--取消对这个记录的所有修改,并且以目前数据表中的字段值来代替这个记录的值。


可以用字段对象的下面4个特性

Value ---目前修改过的字段值

OldValue ---代表知道在修改之前的值

NewValue--代表在OnUpdateError或OnReconcileError事件函数中设置的新字段值

curValue--代表目前存在于数据源中的数据表的字段值。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值