关于ADOQuery更新两个表时,能否同时更新或同时回滚??

zhgwbzhd 2011-05-28 10:41:09
我以前都是如下用:

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();

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

谢谢各位!!
...全文
118 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhgwbzhd 2011-05-29
  • 打赏
  • 举报
回复
问题搞定。谢谢各位,特别是老妖。
方法如下:
ADOConnection_s1->BeginTrans();
try
{
ADOQuery_s1->Close();
ADOQuery_s1->SQL->Clear();
ADOQuery_s1->SQL->Add("update 表1 ...");
i = ADOQuery_s1->ExecSQL();
if(i > 0)
{
try
{
ADOQuery_s1->Close();
ADOQuery_s1->SQL->Clear();
ADOQuery_s1->SQL->Add("insert into 表2 ...");

i = ADOQuery_s1->ExecSQL();

if(i > 0)
ADOConnection_s1->CommitTrans();
else
ADOConnection_s1->RollbackTrans();
}
catch(...)
{
ADOConnection_s1->RollbackTrans();
}
}
else
ADOConnection_s1->RollbackTrans();

}
catch(...)
{
ADOConnection_s1->RollbackTrans();
}
勉励前行 2011-05-28
  • 打赏
  • 举报
回复

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

對於 IB/FB 來說,每次提交sQL命令都當成一個事務來處理,這樣做也就滿足了要求。
但對於 SQL Server來說,好象會視SQL語句是怎樣的,並不保障語句失敗就全部回溯,有部分成功不算失敗之說。不同的數據庫,其實現有所不一樣。所以還是象ccrun說的那樣,顯式使用事務,才能保障。
zhgwbzhd 2011-05-28
  • 打赏
  • 举报
回复
哦,还可以这么用啊。
谢谢 老妖。
ccrun.com 2011-05-28
  • 打赏
  • 举报
回复
当然,上面的代码是假设ADOQuery1的连接为ADOConnection1
ccrun.com 2011-05-28
  • 打赏
  • 举报
回复
用事务。

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();
}

1,178

社区成员

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

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