delphi如何取得異常代碼 |
尚未結案
|
BorlandAndy001
一般會員 發表:12 回覆:19 積分:6 註冊:2004-09-08 發送簡訊給我 |
|
boson
中階會員 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
以 ADO 為例, 你可以用類似底下的指令, 捕捉錯誤代碼
Try ..... except for i:=0 to ADOConnection1.Errors.Count-1 do begin j:=ADOConnection1.Errors.Item[i].NativeError; // 此處依 j 值處理後續動作 end; end;j 值即為錯誤代碼, 但其值為何 ? 要視你使用哪一套資料庫而定 以 SQL server 2000 為例, 2601 代表鍵值重覆, 515 代表某個 NOT NULL 的欄位其值為 NULL ... 但請注意, 可能發生錯誤的, 除了資料庫之外, 也可能是 VCL 元件 兩類錯誤處理的方式不同, 且二者都必須處理 我習慣以下列的程式處理 Try ...... except on E:Exception do begin // 此處可能要 rollback ProcessErrors(DataModule1.ADOConnection1.Errors,E); end; end; procedure ProcessErrors(ADOErr:Errors; E:Exception); var ADOErrors:Errors; i:integer; Temp:AnsiString; begin ADOErrors:=ADOErr; if ADOErrors.Count > 0 then begin Temp:=''; for i:=0 to ADOErrors.Count-1 do begin Temp:=Temp GetADOErrMsg(ADOErrors.Item[i]); end; MessageDlg(Temp,mtError,[mbOk],0); end else begin MessageDlg(E.Message,mtError,[mbOk],0); end; end; function GetADOErrMsg(Err:Error):AnsiString; var Temp:AnsiString; begin Temp:='ADO錯誤代碼:' IntToStr(Err.NativeError); Temp:=Temp #13 'ADO錯誤原因:' Err.Description #13#13; Result:=Temp; end;謹供參考 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |