2012-04-19 111 views
0

我有一個數據庫連接的應用程序。
使用BDE組件和數據庫連接是MySQL。德爾福查找異常的具體原因

現在我正在做一些驗證,檢查插入語句執行時是否有重複的條目。

以下是檢查主鍵屬性是否有重複條目的代碼。

var 
    error :string; 
    cmpres:integer; 
begin 
... 
/* all my data queries */ 
    try 
    Query1.ExecSQL; 
    Except 
    on E: Exception do 
    /*check if its a Duplicate entry or other exception*/ 
    begin  
     error := E.Message; 
     error := copy(error,length(error)-16,length(error)-2); 
     cmpres :=CompareStr(LowerCase(error),'for key '+#39+'primary'+#39) ; 
     if cmpres = 0 then 
      MessageDlg('Entry already exist',mtError,[mbok],0) 
     else 
      MessageDlg('Invalid Data Entries',mtError,[mbok],0); 
     exit; 
    end; 
    end; 
end; 

數據庫異常廣泛裏面放EDatabaseError

誰能告訴我,有沒有什麼方法可以讓我這些錯誤區分,而不做信息比較。
在此先感謝

+0

調試器告訴你什麼? – 2012-04-19 13:33:16

+0

@DavidHeffernan調試器給我這個錯誤信息'錯誤'密鑰違規。'#$ D#$ A'[MySQL] [ODBC 5.1驅動程序] [mysqld-5.5.11]重複條目'64'主要'''''' – Shirish11 2012-04-19 13:37:59

+0

不,我的意思是什麼**類**是錯誤,以及該類爲您提供的屬性。 – 2012-04-19 13:40:49

回答

1

如果您使用BDE,例外應該是EDBEngineError,而不是EDatabaseError。你可以這樣做:

try 
    Query1.ExecSQL; 
except 
    on E: EDBEngineError do 
    begin 
     for i := 0 to E.ErrorCount - 1 do 
     begin 
      err := E.Errors[i]; 
      case err.ErrorCode of 
       ... stuff ... 
      end; 
     end 
    end; 
end 
+0

是否適用於其他數據庫組件和數據庫? – Shirish11 2012-04-19 14:03:46

+0

看起來像。你應該能夠很容易地通過檢查來檢查(如果E是EDBEngineError),那麼...... – JamesT 2012-04-19 14:31:51