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

delphi如何取得異常代碼

尚未結案
BorlandAndy001
一般會員


發表:12
回覆:19
積分:6
註冊:2004-09-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-04 17:50:00 IP:218.103.xxx.xxx 未訂閱
各位: delphi如何取得異常代碼,因爲我只能取得E.Message,但如何捕捉錯誤代碼? 還有,凴錯誤代碼如何判斷是連接的數據庫已經斷開還是SQL String有錯誤或是Table錯誤? 急!急!急! 非常感謝!!!
boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-04 20:36:39 IP:218.170.xxx.xxx 未訂閱
以 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;
謹供參考
系統時間:2024-04-26 15:10:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!