救命呀!为什么try{}catch(...){}不工作。(50分)

  • 主题发起人 主题发起人 DTHL
  • 开始时间 开始时间
D

DTHL

Unregistered / Unconfirmed
GUEST, unregistred user!
我用TQuery+TUpdateSQL来作缓存更新,环境是C++Builder4(14.4)+MsSQL7

在TQuery的AfterPost和AfterDelete事件中用以下程序段作更新

DM1->DbTbbus->StartTransaction();
try{
QryComm->ApplyUpdates();
DM1->DbTbbus->Commit();
}catch(...){
QryComm->CancelUpdates();
DM1->DbTbbus->Rollback();
Application->MessageBox("错误,取消所作修改!","警告",MB_OK + MB_ICONWARNING);
}
QryComm->CommitUpdates();

可是如果我所Insert,或Update数据如果Primary Key有冲突或其它数据库不完整错误的话,

try{}catch(...){}好象不工作。

总是先出现Mssql的错误提示信息,确认后再出现我用MssageBox作的提示,

例如:
Key violation.
Violation of PARMARY KEY constraint 'PK_mrcc'. Cannot insert duplicate
Key in object 'mrcc'.
然后再出现
'错误,取消所作修改!' 的提示信息要求确认


注明:我没有在IDE里面Run这个程序

这个问题我整了有一个星期了还不成,
真的很急,就要出货了,而且我大部份更新都是用这个方法来更新的,千万不要说没有办法!
有请各位大虾了!!
 
1、写写OnUpdateError事件
2、最好用 TDatabase.ApplyUpdates 而不是 dataset.ApplyUpdates
 
为什么要用catch而不是except
 
Pipi:
我想知道为什么不能截获异常,拉拉
Crane:
我用的是C++builder4呀?
 
试一下:
关闭project|option|optimization
关闭tools|debuger options|integrated debugging
如不行,再试一下其他设置.
 
不能截获异常的原因是 QryComm->ApplyUpdates(); 函数里面
又有一层 try ,因为它离发生错误的地方近,给他接去了。

你要是想只能你自己来接异常,那你只好改它的源代码。否则,
还是写OnUpdateError事件又简单又好
 
后退
顶部