首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于ADOQuery更新两个表时,可不可以同时更新或同时回滚?

2012-12-30 
关于ADOQuery更新两个表时,能否同时更新或同时回滚??我以前都是如下用:ADOQuery1-Close()ADOQuery1-SQL

关于ADOQuery更新两个表时,能否同时更新或同时回滚??
我以前都是如下用:

ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("update 表1 ...");
ADOQuery1->ExecSQL();

ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("update 表2 ...");
ADOQuery1->ExecSQL();

我现在需要更新这两个表时,同时更新或同时回滚。
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("update 表1 ...");
ADOQuery1->SQL->Add("update 表2 ...");
ADOQuery1->ExecSQL();

这样是否能够达到需要呢??

谢谢各位!!
[解决办法]
用事务。

ADOConnection1->BeginTrans();
try
{
    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("update 表1 ...");
    ADOQuery1->SQL->Add("update 表2 ...");
    ADOQuery1->ExecSQL();
    
    ADOConnection1->CommitTrans();
}
catch(...)
{
    ADOConnection1->RollbackTrans();
}

[解决办法]
当然,上面的代码是假设ADOQuery1的连接为ADOConnection1
[解决办法]

ADOQuery1->SQL->Add("update 表1 ...");
ADOQuery1->SQL->Add("update 表2 ...");

對於 IB/FB 來說,每次提交sQL命令都當成一個事務來處理,這樣做也就滿足了要求。
但對於 SQL Server來說,好象會視SQL語句是怎樣的,並不保障語句失敗就全部回溯,有部分成功不算失敗之說。不同的數據庫,其實現有所不一樣。所以還是象ccrun說的那樣,顯式使用事務,才能保障。

热点排行