client中,用到socketConnection,clientDataSet1,dataSource1,clientDataSet2,dataSource2,
分别连接server中的table1,table2.
server中用ADOConnection,ADOTable1,ADOTable2,DataSetProvider1,DataSetProvider2.
现在要想用事务处理,实现两个表要么都保存,要么都不保存(防止断电),怎么办??
顺便问下,以下client,server中所用的控件是否合理,请指点,谢谢!!!!!!!!
分别连接server中的table1,table2.
server中用ADOConnection,ADOTable1,ADOTable2,DataSetProvider1,DataSetProvider2.
现在要想用事务处理,实现两个表要么都保存,要么都不保存(防止断电),怎么办??
顺便问下,以下client,server中所用的控件是否合理,请指点,谢谢!!!!!!!!
解决方案 »
- 求救:delphi,listview控件如何更改背景色
- 菜单界面里如何设置线性菜单?
- 现在我在query里把所有的字段又加上不出错了,但是我输2.2它给我2.200000434
- 如何将6个edit中的数据排序后,在他们的下面对应显示IMAGE格式的第一....第六的图图片???
- 在richedit中怎么添加表情符?
- 如何在DBGrideh行選中後控制其修改動作
- 控件问题~
- 检测edit里有非法字符???急用
- ClientDataSet.CommandText执行问题
- 如何调用保存的数据库(ACCESS),急,马上给分,谢谢,
- 在D7中如何屏蔽word、EXCEL中右上角的 关闭按钮
- 如何在新增记录时,合并新增字段中某一字段相同记录?
在分布式中使用事务会在多客户并发时造成错误!!!
你可以考虑先使用保存到本地的内存表,再向服务器提交,就可以解决你提出的问题
请问这个时候要怎么向服务器提交??是否应该一次性提交上去,当多个表同时提交时同样可能出现问题??
感谢以上各位的回答!!!!!!
Update(Delta1, Delta2: OleVariant);
var
ErrorCount: Integer;
begin
ADOConnection.BeginTrans;
try
// 有点矛盾的是充许发生几个错的情况, 如果一个错都不能发生就像下面 DataSetProvider1.ApplyUpdates(Delta1, 0, ErrorCount);
if ErrorCount > 0 then raise Exception.Create(...);
DataSetProvider2.ApplyUpdates(Delta2, 0, ErrorCount);
if ErrorCount > 0 then raise Exception.Create(...); ADOConnection.Commit;
except
ADOConnection.Rollback;
raise; // 报告客户机
end;
end;客户机这边COMObject.Update(Cds1.Detla, Cds2.Delta);
Cds1.MergeChangeLog;
Cds2.MergeChangeLog;有错就不会 MergeChangeLog, 还可以改
好象多层中不应该用吧,最好是用com的事务,但偶不会
希望大侠指点!
事务不能用在客户端 start 和 commit, 也不是说不能, 客户机作起来问题太多, 一次性提交更新数据, 让服务端作
那请问如何一次性提交呢,现在是要两个表同时处理?? 回复人: wozhuchuanwei(四库全输) ( ) 信誉:100 2004-12-31 13:41:00 得分: 0
为什么要用adoconnection的事务呢?
好象多层中不应该用吧,最好是用com的事务,但偶不会
希望大侠指点!
服务器端可以用ADOConnection,我也是问别人的,呵呵
改成try
...
SetComplete;
except
SetAbort;
raise;
end;com+ 事务好处在于如果上面操作是两个对像, dsp1(obj1) 和 dsp2(obj2) 在两个对像里, 又希望是一个事务完成操作, 可以写如下代码(大概)设 obj1, obj2 成 support transaction, 为了正常操作时, 并不想用到事务情况写个中间对像obj3.Update(李维书上有说, 叫协调对像), 写法各不同, 这个设成 require transactionobj3.Update
begin
try
obj1 := CreateCOMObject(ProgIDToClassID(...));
obj2 := CreateCOMObject(ProgIDToClassID(...)); obj1.ApplyUpdate
obj2.ApplyUpdate
SetComplete;
except
SetAbort;
raise;
end;
end;
里面的Clicked事件:
...
try
...
DataModule1.ClientDataSet1.ApplyUpdates(0);
DataModule1.ClientDataSet2.ApplyUpdates(0);
except
...
end;
...
以上的模块要怎么写呢,谢谢!!!!!
DataModule1.ClientDataSet1.ApplyUpdates(0);
DataModule1.ClientDataSet2.ApplyUpdates(0);
except
DataModule1.ClientDataSet1.CancelUpdates;
DataModule1.ClientDataSet2.CancelUpdates;
end;
我试过这样写好像可以,但不知道行不行得通??
这里好像已经有了一个隐含事务在里面??