请教Reconcile对话框的用法。(100分)

  • 主题发起人 主题发起人 lifanxi
  • 开始时间 开始时间
L

lifanxi

Unregistered / Unconfirmed
GUEST, unregistred user!
  我学习三层数据库开发时,为了解决数据提交冲突的问题,在工程中加入了Reconcile
对话框,但它似乎不起作用,向各位请教。
  加入Reconcile对话框后处理ClientDataSet的OnReconcile事件,写上
Action := HandleReconcileError(DataSet, UpdateKind, E);然后测试,运行程序,修改
一个数据,不提交。然后打开数据库,修改了同一条记录中的另一个数据,然后再回到程
序进行提交,弹出了Reconcile对话框,但上面只有Skip、Cancel、Correct三个选项,选
任何一个都无法把数据提交。于是我胡乱修改了Reconcile对话框的代码,去掉了
FCurColIdx > 0的条件,让Refresh和Merge选项出现,但仍然无济于事。
  我的问题是,像我做试验的这种情况,一个用户修改了数据未提交,另一个用户也修
改了数据但提交了,如何才能让第一个用户也把数据提交上去?或者不行的话,让第一个
用户的数据立即变成最新的也行,现在我的情况下,不管用户在Reconcile对话框中选什
么,他都处于一种很被动的地位,只能Revert操作再刷新数据才能继续工作。我对
Reconcile对话框的作用是否有所误解,请为我解释一下Reconcile对话框的具体功能。
  谢谢!
 
主要的作用就是当对数据集进行操作时出现的异常处理
const
InsertError = '不能插入重复记录!';
ModifyError = '修改错误!';
DeleteError = '删除错误!';
procedure TEditFrameBaseFrm.BaseDataReconcileError(DataSet: TCustomClientDataSet;
E: EReconcileError;
UpdateKind: TUpdateKind;
var Action: TReconcileAction);
begin
//数据提交错误!
if UpdateKind = ukInsert then
begin
ErrorCode := 101;
DataSet.Edit;
MessageBox(Self.Handle, PChar(InsertError), '信息提示窗体!', MB_ICONERROR + MB_OK);
end;
if UpdateKind = ukModify then
begin
ErrorCode := 102;
DataSet.Edit;
MessageBox(Self.Handle, PChar(ModifyError), '信息提示窗体!', MB_ICONERROR + MB_OK);
end;
if UpdateKind = ukDelete then
begin
ErrorCode := 103;
MessageBox(Self.Handle, PChar(DeleteError), '信息提示窗体!', MB_ICONERROR + MB_OK);
end;

Action := HandleReconcileError(DataSet, UpdateKind, E);
end;
 
//TReconcileAction = (raSkip, raAbort, raMerge, raCorrect, raCancel, raRefresh)case HandleReconcileError(dataset,updatekind,e) of
raAbort:exit;
//此時還會繼續執行applyupdate(0)后的語句
raCancel:exit;
//此時還會繼續執行applyupdate(0)后的語句.
end;
 
Action:=HandleReconcileError(DataSet,UpdateKind,E);
if (Action=raMerge) or (Action=raCorrect) then

DataSet.ApplyUpdates(0)
else
DataSet.Cancel;
需要根据Action的值处理。
 
大哥还没有结帖啊,不想给我分吗???????
 
后退
顶部