请问大侠一个关于‘三层更新数据’的问题,Thanks!(40分)

P

pengd

Unregistered / Unconfirmed
GUEST, unregistred user!
[:)]我做三层结构应用程序,用到主要组件adoquery1>datasetprovider1>clientdataset->datasource1->dbgrid1,它们的属性都设置正确,客户端用socketconnection连接到中间层,当我在客户端的dbgrid1增加1000条记录数据,然后调用
clientdataset1.post;
clientdataset1.applyupdate(0);
更新回数据库,现在要求如果在更新的过程中突然客户端掉线了,数据更新还
没完成,请问如何处理该问题才恰到好处,如何向客户端回传此消息。请各位
提供解决方法和如何实现,谢谢!!!
 
用例外处理吧,
try
clientdataset1.applyupdate(0);
except
showmessage('error!');
end;
 
我在书上看到的。不过不知道该具体怎么用。‘
错误首先听在DatasetProvider.OnupdateError事件上。只是进行错误处理的一个好地方。
可以不需要太多的客户干预来解决问题。
错误最后到达的目的地是回到客户,在那里可以由用户决定如何处理记录。把一个事件处理
过程赋给TclientDataset。OnreconclieError事件就可以了。'
 
启动事务处理来控制
 
to cobi:
你好,启动事务处理来控制如何编写,请给我举一个例子,行吗?
 
这种问题,我想除了要通知用户出错以外,还应该保存用户所作的修改,否则,这么多的数据
又要重做一次,将是一个很麻烦的事情;
所以,最好利用ADO的BatchUpdate功能,将用户所作的修改存到一个临时文档中,所后再更
新到数据库里.
至于出错时的处理,利用事务管理如下:
在ADODataSet的Beforpost加入: ADOConnection.begin
trans;
在ADODataSet的Afterpost加入: ADOConnection.Committrans;
在ADODataSet的PostError加入: ADOcONNECTION.RollbackTrans;
action :=daAbort;
只是一个引导,具体代码,结合自己的程序加了。
 
从理论上讲,最后ADO会因为超时而Rollback事务;但最好还是自己来处理事务。
建议你仔细看看李维的《ADO/MTS/COM+篇》。
 
用 ReconcileErrorForm 把错误显示给用户先,还可以用DatasetProvider.OnupdateError
对错误进行一些特殊的处理,例如报什么错误信息等,
如何用 ReconcileErrorForm ,详细看看 /Delphi5/Demos/Midas/Alchtest
 
顶部