DCOM + ADOConnection三层,执行数据库操作事务未提交?

Yothan 2011-07-20 05:36:11
我的程序是用的客户端用DCom连接到中间件,中间件使用AdoConnection连接到数据库。
我在中间件中写一个Create Table的语句,做法为:
1.使用TADOQuery,直接对其进行赋值,没有做其他属性设置
2.代码如下:
if ConnectDB then
begin
try
Connect_db.BeginTrans;
try
with tempUpdateQuery do
begin
Close;
SQL.Clear;
SQL.Add(vSQL);
ExecSQL;
end;
Connect_db.CommitTrans;
except
on e:Exception do
begin
OutMsg :='执行语句错误:' + E.Message;
Connect_db.RollbackTrans;
end;
end;
finally
stopdb;
end;
end;

遇到的问题:
1.如果加上事务处理的话,会一直报:无法在此会话中启动更多的事务(其他地方干干净净,没有做过事务处理)
2.不用事务处理,能正确执行,但是执行完毕后我到服务器中select 该表,发现被锁现象(或者说事务未能提交)。这是何原因呢?
...全文
212 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yothan 2011-10-20
  • 打赏
  • 举报
回复
关于这个问题,特地来说明一下。
此问题已经得到解决:
没有使用事务,因为不需要。至于数据被锁,是因为以前有一个人写了update语句没提交导致!
lyhoo163 2011-08-01
  • 打赏
  • 举报
回复
关注。
应在服务器端写一个事务方法。
客户端调用该事务方法。
Yothan 2011-07-28
  • 打赏
  • 举报
回复
还要说一句,其实真正的问题并不在组件这块,可能并不是几句delphi语句就能解决的
SQLDebug_Fan 2011-07-21
  • 打赏
  • 举报
回复
楼主做事很细致,发帖之后还把代码组织了。
xiaoxueren1983 2011-07-21
  • 打赏
  • 举报
回复
接分了
Yothan 2011-07-21
  • 打赏
  • 举报
回复
我已查明原因,是中间件在注册时配置【事务】改为“不支持”或者“支持”,就可以了。

来着送分
aawwmate 2011-07-21
  • 打赏
  • 举报
回复
中间件在注册时配置【事务】改为“不支持”或者“支持”

收藏
Yothan 2011-07-20
  • 打赏
  • 举报
回复

if ConnectDB then
begin
try
Connect_db.BeginTrans;
try
with tempUpdateQuery do
begin
Close;
SQL.Clear;
SQL.Add(vSQL);
ExecSQL;
end;
Connect_db.CommitTrans;
except
on e:Exception do
begin
OutMsg :='执行语句错误:' + E.Message;
Connect_db.RollbackTrans;
end;
end;
finally
stopdb;
end;
end;

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧