三层结构,在服务器端使用adoconnection连接到sqlserver2000,然后想在
datasetprovider的beforupdaterecord中使用语句:
try
adoconnection.begintrans; //这一句出错,错误信息如下
....
adoconnection.committrans;
except
....
end错误信息如下:
无法在此会话中启动更多的事务我在启用adoconnection.begintrans前判断adoconnection.InTransaction是false,
为什么会出现这个错误?
datasetprovider的beforupdaterecord中使用语句:
try
adoconnection.begintrans; //这一句出错,错误信息如下
....
adoconnection.committrans;
except
....
end错误信息如下:
无法在此会话中启动更多的事务我在启用adoconnection.begintrans前判断adoconnection.InTransaction是false,
为什么会出现这个错误?
解决方案 »
- 如何让两个dbgrideh打印在一张纸上?
- 为什么这句话不正确:if s[j] not in ['0'..'9','x','X'] then continue; 而去掉not 就可以了。
- 跪拜恳求!!!DELPHI中怎样调用C#作的WEB SERVICE啊!!急啊!!!
- 请问QQ,UC图文,及表情发送是怎么实现的?
- 关于一些编程语言的用途,及适用场合的问题?!
- 关于控件失去焦点的门店
- 问:Numeric 类型和String 类型的互换。请朋友们进来帮帮忙。(在线等待)
- 高分求救公文包的设计?
- 求救。。。菜鸟的SOS
- Qreport制报表问题
- Out of memory while expanding memory stream!!! 各位达人,拜托了,偶郁闷的说
- 真歹命啊,自行车被盗--修罗散分帖
adoconnection.begintrans;
....
adoconnection.begintrans;
....
这种情况下,会发生报错。所以要保证begintrans和committrans或rollbacktrans成对出现,尤其是在try语句中。
其次,在单事务情况下:
try
ADOConnection.BeginTrans;
....
ADOConnection.CommitTrans;
except
ADOConnection.RollbackTrans;
end;
必须成套出现。
最后,可以在开始事务前调用ADOConnection1.InTransaction来判断
在Delphi中使用事务机制不如在应用服务器端使用好,搂主可以将SQL部分改为存储过程以事务实现会来的简洁而高效。
数据库本身支持嵌套事务可数据访问引擎没实现此功能,等于还是没有。
把业务逻辑在APPSERVER的代码和DATASERVER的SP,VIEW中散布,升级及维护会很麻烦。
如果是datasetprovider本身自带事务功能,那么怎样将这个事备用起来,或者将它屏蔽掉呢。
其实我在这几天的测试过程中,发现datasetprovider确实自带事务功能了
我找到解决的办法了。
ADOConnection.BeginTrans;在beforeapplyupdate中使用
ADOConnection.CommitTrans;在afterapplyupdate
ADOConnection.RollbackTrans;在applyupdateerr发生错误中使用