一个dbExpress 的事务的问题,很奇怪。 ( 积分: 20 )

  • 主题发起人 主题发起人 QSmile
  • 开始时间 开始时间
Q

QSmile

Unregistered / Unconfirmed
GUEST, unregistred user!
我用dbExpress 连接数据库
用来的控件
TSQLConnection -> TSQLDataSet -> TDataSetProvider -> TClientDataSet
现在我用 TDataSetProvider 来保存一个数据,同时可能会更新数据库的相关项目。
所以也在 TDataSetProver 的 OnBeforeUpdateRecord 中加入了代码。
自然我就用到了事务。
代码如下:
更新数据库
procedure UpdateDataBase(Data:OleVariant)
td:TTransactionDesc;
begin
td.TransactionID := 1;
td.IsolationLevel := xilREADCOMMITTED;
dmMain.SqlConn.StartTransaction(td);
// 开始事务
try
cdsDepart.Close;
cdsDepart.CommandText := 'select * from Departs where Departid =''''';
cdsDepart.Open;
proDepart.ApplyUpdates(Data,0,ErrorCount);
cdsDepart.Close;
dmMain.SqlConn.Commit(td);
// 提交
except
dmMain.SqlConn.Rollback(td);
// 回滚
end;

在 proDepart OnBeforeUpdateRecord 的代码如下:
// 也就是必要是要更新数据库中其它项目
if UpdateKind = ukModify then
begin
// 生成 sql
dmMain.SqlConn.ExecuteDirect(sql);
end;
end;

但执行是奇怪的问题来了。如果执行没有错误那正确,
但如果执行UpdateDatabase 时出现,程序不会执行 except 的代码段呢?
出错行是
proDepart.ApplyUpdates(Data,0,ErrorCount);
但出错后不会执行 except 代码段回滚,而是继续执行。
怎么回事?如何办???
 
我用dbExpress 连接数据库
用来的控件
TSQLConnection -> TSQLDataSet -> TDataSetProvider -> TClientDataSet
现在我用 TDataSetProvider 来保存一个数据,同时可能会更新数据库的相关项目。
所以也在 TDataSetProver 的 OnBeforeUpdateRecord 中加入了代码。
自然我就用到了事务。
代码如下:
更新数据库
procedure UpdateDataBase(Data:OleVariant)
td:TTransactionDesc;
begin
td.TransactionID := 1;
td.IsolationLevel := xilREADCOMMITTED;
dmMain.SqlConn.StartTransaction(td);
// 开始事务
try
cdsDepart.Close;
cdsDepart.CommandText := 'select * from Departs where Departid =''''';
cdsDepart.Open;
proDepart.ApplyUpdates(Data,0,ErrorCount);
cdsDepart.Close;
dmMain.SqlConn.Commit(td);
// 提交
except
dmMain.SqlConn.Rollback(td);
// 回滚
end;

在 proDepart OnBeforeUpdateRecord 的代码如下:
// 也就是必要是要更新数据库中其它项目
if UpdateKind = ukModify then
begin
// 生成 sql
dmMain.SqlConn.ExecuteDirect(sql);
end;
end;

但执行是奇怪的问题来了。如果执行没有错误那正确,
但如果执行UpdateDatabase 时出现,程序不会执行 except 的代码段呢?
出错行是
proDepart.ApplyUpdates(Data,0,ErrorCount);
但出错后不会执行 except 代码段回滚,而是继续执行。
怎么回事?如何办???
 
好,帮顶


--------签名档---------------------------

比肩国内顶尖源码下载站点 -> 源码我爱你

http://www.source520.com
http://www.source520.net
80G源码电子书免费免注册下载,大量精辟技术文档库随时更新
******************************************************************
附:为了站点持续发展,现有本站近年来收藏的大量大型商业源码低价出售,
详情请进入以下链接查看:
http://www.source520.com/building_delphi.htm

浏览商业代码请从如下URL进入查看实物:
1.商业源码库1: ftp://source520see3:browse@61.152.199.245/
2.商业源码库2: ftp://source520see2:browse@61.152.199.245/
 
接受答案了.
 
后退
顶部