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

dthl 2000-02-19 11:37:00
我用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这个程序

这个问题我整了有一个星期了还不成,
真的很急,就要出货了,而且我大部份更新都是用这个方法来更新的,千万不要说没有办法!
有请各位大虾了!!
...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dthl 2001-02-01
  • 打赏
  • 举报
回复
Check the OnUpdateError

The database error will first call the OnUpdateError
not the
AfterField
dthl 2000-02-23
  • 打赏
  • 举报
回复
OK了,
在OnUpdateError事件里有解释
killy 2000-02-20
  • 打赏
  • 举报
回复
只是猜测:从症状上看你的代码确实工作了,既然出现了像你那样的情况,应该是系统在
产生例外时就显示了自己的出错信息。这样从你自身的代码是无法比面这种情况的。
试着找一下有没有这方面的设置选项。
asj 2000-02-20
  • 打赏
  • 举报
回复
改代码吧

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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