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 代码段回滚,而是继续执行。
怎么回事?如何办???
用来的控件
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 代码段回滚,而是继续执行。
怎么回事?如何办???