全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1306
推到 Plurk!
推到 Facebook!

Delphi2007 dbExpress+MSSQL2000不能捕获异常。

答題得分者是:lucky4wj
pung4pung
一般會員


發表:8
回覆:8
積分:3
註冊:2007-10-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-23 15:41:01 IP:119.129.xxx.xxx 訂閱
代码像以下样子:

[code delphi]
try
sds.append;
//...........
sds.post;
sds.ApplyUpdates(0);
except
on E:exception do
ShowMessage(E.Message);
end;

[/code]
当插入数据时,比如主键重复错误。操作被忽略,except后面的代码没有执行。
lucky4wj
一般會員


發表:1
回覆:11
積分:17
註冊:2008-11-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-12 15:20:37 IP:61.155.xxx.xxx 未訂閱
我也在研究这个问题.
徐新华的 delphi4核心编程技术 P186提到:
post出错时会触发OnPostError事件,与之类似的还有OnDeleteError.

我的方式是:
procedure TfrmMain.btnSaveClick(Sender: TObject);
var
n:integer;
s:string;
begin
with dmMysql.smpTest do
if ChangeCount > 0 then
try
Edit;
post;
n:=ApplyUpdates(0);
str(n,s);
if n<>0 then // note:有错误
showmessage('写回数据库时出错!数据未能存盘!共' s '条出错!');
except
on e: exception do
showmessage('错误信息: ' e.Message);
end;
end;

原因如下:
function ApplyUpdates(MaxErrors:integer):Integer;virtual;
返回值标志错误数,所以如果有错误发生则返回值必<>0.
編輯記錄
lucky4wj 重新編輯於 2008-11-12 15:21:38, 註解 無‧
lucky4wj
一般會員


發表:1
回覆:11
積分:17
註冊:2008-11-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-20 18:09:57 IP:61.155.xxx.xxx 未訂閱
网络上搜索到一个方法,试验过确实能够使用.
=========================
在datasetProvider的onUpdateError
raise E;

然后就可以在客户端的
try
clientdataset1.applyUpdates(0);
except
on e:exception do
...
end;

====================
可是如果更改为
on e:edatabaseerror do
反而捕获不到.
很困惑!
編輯記錄
lucky4wj 重新編輯於 2008-11-20 18:11:43, 註解 無‧
系統時間:2024-05-06 8:53:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!