李维分布式多层应用问题两则(200分)

  • 主题发起人 主题发起人 puremoonstone
  • 开始时间 开始时间
P

puremoonstone

Unregistered / Unconfirmed
GUEST, unregistred user!
我在看李维的《DELPHI 5.X 分布式多层应用系统篇》中有两个问题,想请教:
1、关于OLDVALUE,NEWVALUE,CURVALUE
书4-3 (MIDAS功能展示)(PAGE 4-26)中
procedure TForm2.cbFieldsChange(Sender:TObject);
begin
edtOldValue.Text:=ClientDataSet1.FieldByName(cbFields.Text).OldValue;
edtNewValue.Text:=ClientDataSet1.FieldByName(cbFields.Text).NewValue;
edtValue.Text:=ClientDataSet1.FieldByName(cbFields.Text).CurValue;
end;
我在运行时发现,只有NewValue能正确显示,OldValue和CurValue都不行,经调试发现
它们是NULL,这是怎么回事呢?明明有值的,在我修改了之后,NewValue不为空,OldValue
也不为空啊。
2、 4-7(完善的错误处理)(PAGE 4-68)中
我按照书上写好了DATASETPROVIDER的ONUPDATEERROR过程,但在运行时发现它根本没捕获
错误;我又按照4-70在客户端加入了RECONCILE ERROR DIALOG,写好了CLIENTDATASET的
ONRECONCILEERROR,结果同样没捕获错误,请问大家遇到这个问题了吗?
谢谢!新年快乐!
 
1. NewValue = OldValue ??
 
什么意思?
 
在服务器端处理错误时严重依赖于OldValue, NewValue等,
NewValue的值仅在修改后才有,否则为Unassigned即VarIsEmpty(??.NewValue)=True.
可检查客户端应用更新相关的调用:
ClientDataSet1.ApplyUpdates(允许最多错误数)
不允许任何错误时应使用ApplyUpdates(0)
 
to lld:那么在修改了之后,OLDVALUE,CURVALUE不应该为空啊。
 
可能你的ClientDataSet有问题,应使用事件中的ClientDS,
如有多个ClientDataSet时(在Master/Detail中)应根据SourceDS区别选择
 
我做的这个例子很简单,只有一个clientdataset的。
 
如果老值為空新值不為空﹐說明這個這個欄位是新增狀態
如果新值為空老值不為空﹐說明這個這個欄位是刪除狀態
如果新值老值都不為空﹐這個欄位可能是異動狀態
用這個原則在AppServer里﹐在Provider的接收到數據包時,把它拆解
到具體的欄位 ,對多資料表更新
這就是李的本意﹐他書里的例子也不全都是對的
至于錯誤處理﹐應該錯誤可以被捕捉到﹐你是不是在delphi環境
里跑的﹐它會先于應用程序捕捉異常?
 
BTW : 也祝你新年快樂
 
RECONCILE ERROR DIALOG在delphi中有一个,你看看源程序吧!
 
多人接受答案了。
 
后退
顶部