ClientDataSet中的错误处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ClientDataSet中的错误处理相关的知识,希望对你有一定的参考价值。
当修改数据发生错误时会先触发DataSetProvider.OnUpdateError事件处理过程然后触发ClientDataSet.OnReconcileError事件处理过程。
OnUpDateError原型:
procedure OnUpdateError( Sender: TObject;//触发此事件的对象 DataSet: TCustomClientDataSet; //产生错误的数据集 E: EUpdateError; //生成的错误对象 UpdateKind: TUpdateKind;//指示是什么操作产生的错误TUpdateKind = (ukModify, ukInsert, ukDelete); var Response: TResolverResponse//产生错误生的操作TResolverResponse = (rrSkip, rrAbort, rrMerge, rrApply, rrIgnore); ); { rrSkip:跳过产生错误的记录。 rrAbort:停止操作找RollBack。 rrMerge:把原数据与修改的数据合并。 rrApply:已更正错误,再次更新数据。 rrIgnore:忽略错误。 }
OnReconcileError原型:
procedure OnReconcileError( DataSet: TCustomClientDataSet; E: EReconcileError; //Context错误堆栈信息,ErrorCode:DBExpress返回的错误码 UpdateKind: TUpdateKind; //TUpdateKind = (ukModify, ukInsert, ukDelete); var Action: TReconcileAction//TReconcileAction = (raSkip, raAbort, raMerge, raCorrect, raCancel, raRefresh); ); { raSkip:跳过错误记录并在Delta中保留本条记录。 raAbort:停止操作并RollBack。 raMerge:合并属性Data和Delta中的数据。 raCorrect:已更正错误继续更新。 raCancel:取消对错误记录的修改恢复原数据。 raRefresh:取消错误记录的修改并以当前数据代替这个记录。 }
在处理错误时还可以通过以下属性获取错误字段的之前现在的值。
Fields[Index].Value:当前修改后的值。
Fields[Index].OldValue:修改之前的值。
Fields[Index].NewValue:在错误处理过程中设置的新值。
Fields[Index].CurValue:在数据源中的值。
当更新数据出现错误时可以非常灵活的处理既可以让程序自己处理或不做处理,还可以返回错误信息和数据让用户自己处理。
以上是关于ClientDataSet中的错误处理的主要内容,如果未能解决你的问题,请参考以下文章
使用fdmemTable来代替clientDataset,解决MySQL5.6(含)以上版本用cds多次更新时的错误