Server:Tprovider TQuery
Client:TSocketConn,TClientdataset
不是调用用AppServer提供的方法需要Client本身来实现Transaction,如何做?
Client:TSocketConn,TClientdataset
不是调用用AppServer提供的方法需要Client本身来实现Transaction,如何做?
解决方案 »
- 新手问题2:showmessage后的form1.height怎么提示在form1后面不动了
- delphi 执行删除操作后,表中的元组并未被删除,请问为什么?
- 软件加密心得?
- TIdMappedPortTCP控件的使用问题!!!
- 哪里有取系统信息的VCL?比如取CPU主频,内存及硬盘参数等
- 初学,请大家帮忙。
- 写了一段压缩数据库的代码,在开发机上没问题,但发布到另外的机上有问题?
- 请问DELPHI中用哪个VCL可以做到这样的效果?
- ADOConnection连接EXCEL8.0时连接不上的问题
- MIDLETPascal 有谁知道怎么使用,或者到哪里有这方面的资料
- 局域网的问题,急!!!!
- 各位大哥大姐,我用QQ聊天被人骂了怎么办?
multi-tier中的事务,和客户端关系不大
服务器端的事务处理是自动的,它被remotedatamodual自动启动
你不用多管,如果你要进行精确控制,需要在下面的事件中进行处理
procedure TForm1.DataSetProvider1UpdateError(Sender: TObject;
DataSet: TCustomClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind;
var Response: TResolverResponse);
beginend;
procedure TForm1.ClientDataSet1ReconcileError(
DataSet: TCustomClientDataSet; E: EReconcileError;
UpdateKind: TUpdateKind; var Action: TReconcileAction);
beginend;
如果自己写SQl语句可以通过在服务器写一组接口方法,在客户端调用,完成事务控制.
或者直接将SQL 语句传递到服务器中,那是则完全由你控制了.
RDataModule已经完成了这些;特别是BDE/IDAPI在这方面做的相当出色;
ProviderABeforUpdate里进行控制也成;
如果客户段要求两个TClientDataSet的数据提交,并要求在一个事务中完成?
这时就服务器会产生两个事务分别管理,怎样解决这个问题?
try
备份clientdataset1的delta and data
clientdataset1.applyupdate(-1);
try
clientdataset2.applyupdate(-1);
except
根据备份,恢复clientdataset1的内容,并重新更新数据库
//要注意的是:恢复的时候仍可能出现异常,这就很难克服了,
需要添加智能算法
end;
except
。
end;