線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1875
推到 Plurk!
推到 Facebook!

ADO 錯誤訊息攔截

尚未結案
chiang
一般會員


發表:4
回覆:7
積分:2
註冊:2002-08-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-16 10:17:24 IP:12.4.xxx.xxx 未訂閱
請問ADO的錯誤訊息攔截要如何撰寫,BDE有EBDEnginerror Object Support,那ADO呢? 謝謝!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-16 11:07:43 IP:211.22.xxx.xxx 未訂閱
參考李維 ADO 那本書, 有詳細說明。
chiang
一般會員


發表:4
回覆:7
積分:2
註冊:2002-08-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-16 11:38:27 IP:12.4.xxx.xxx 未訂閱
Hi,Hager 李維那本書已看過,那個範例在Delphi6.0 Run會有些問題,須再做一些宣告才能Run,我的問題出現在 "adoErrors:=adoConnection1.Errors" 找不到Errors 相關定義, 我該怎麼做?Thanks!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-16 11:54:17 IP:211.22.xxx.xxx 未訂閱
這樣可不可以?
uses ADODB;
  
var
  adoErrors: Errors;
begin
  adoErrors := adoConnection1.Errors;
  // ...
end;
chiang
一般會員


發表:4
回覆:7
積分:2
註冊:2002-08-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-16 14:04:26 IP:12.4.xxx.xxx 未訂閱
謝謝,Hager. 我將delphi/source/VCL的ADO相關檔案COPY至測試路徑,就可以RUN了.但是還是無法攔截錯誤訊息,經程式測試發現以下問題 1. FOR 迴路的ADOERRORS.COUNT值為0 2. LOCATE 一個不存在資料也無任何反應 請大家幫忙指正謝謝 ! unit fADOErrorsMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, ExtCtrls, DBCtrls, Db, ADODB, StdCtrls, DBTables; type TForm4 = class(TForm) ADOConnection1: TADOConnection; ADODataSet1: TADODataSet; ADODataSet1emp_id: TStringField; ADODataSet1fname: TStringField; ADODataSet1minit: TStringField; ADODataSet1lname: TStringField; ADODataSet1job_id: TSmallintField; ADODataSet1job_lvl: TWordField; ADODataSet1pub_id: TStringField; ADODataSet1hire_date: TDateTimeField; DataSource1: TDataSource; DBNavigator1: TDBNavigator; DBGrid1: TDBGrid; lbADOErrors: TListBox; btnSearchField: TButton; edtFieldName: TEdit; edtFieldValue: TEdit; procedure ADODataSet1PostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); procedure btnSearchFieldClick(Sender: TObject); private { Private declarations } procedure ShowADOErrors; public { Public declarations } end; var Form4: TForm4; implementation {$R *.DFM} procedure TForm4.ADODataSet1PostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); begin //開始處理ADO的Errors物件 ShowADOErrors; end; procedure TForm4.btnSearchFieldClick(Sender: TObject); var bResult : Boolean; begin try bResult := ADODataSet1.Locate(edtFieldName.Text, edtFieldValue.Text, [loCaseInsensitive , loPartialKey]); ShowADOErrors; except on E : Exception do ShowMessage(E.Message); end; end; procedure TForm4.ShowADOErrors; var adoErrors : Errors; adoError : Error; iCount : Integer; begin adoErrors := ADOConnection1.Errors; showMessage(inttostr(adoerrors.count)); for iCount := 0 to adoErrors.Count - 1 do // Iterate begin adoError := adoErrors.Item[iCount]; lbADOErrors.Items.Add('Error Number : ' IntToStr(adoError.Number)); lbADOErrors.Items.Add('Error Source : ' adoError.Source); lbADOErrors.Items.Add('Error Description : ' adoError.Description); lbADOErrors.Items.Add('Error HelpFile : ' adoError.HelpFile); lbADOErrors.Items.Add('Error SQLState : ' adoError.SQLState); lbADOErrors.Items.Add('Error NativeError : ' IntToStr(adoError.NativeError)); end; // for end; end.
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-16 14:48:40 IP:211.22.xxx.xxx 未訂閱
引言: procedure TForm4.btnSearchFieldClick(Sender: TObject); var bResult : Boolean; begin try bResult := ADODataSet1.Locate(edtFieldName.Text, edtFieldValue.Text, [loCaseInsensitive , loPartialKey]); ShowADOErrors; // 這一行應該放在 Except 下 except on E : Exception do ShowMessage(E.Message); end; end;
另外, 書上不是說 Error 有分 Provider 的 Error 跟什麼的 Error 嗎? (書沒在身邊, 所以 ...) 您的 OnPostError 是什麼 Error 呢?
chiang
一般會員


發表:4
回覆:7
積分:2
註冊:2002-08-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-16 15:07:12 IP:12.4.xxx.xxx 未訂閱
請參閱以下程式,我測試結果ADOERRORS.COUNT值為0,所以無任何錯誤訊息會被顯示出來,我想請問一下是程式撰寫有誤,還是call errors本身的vcl 有問題. procedure TForm4.ShowADOErrors; var adoErrors : Errors; adoError : Error; iCount : Integer; begin adoErrors := ADOConnection1.Errors; for iCount := 0 to adoErrors.Count - 1 do // Iterate begin adoError := adoErrors.Item[iCount]; lbADOErrors.Items.Add('Error Number : ' IntToStr(adoError.Number)); lbADOErrors.Items.Add('Error Source : ' adoError.Source); lbADOErrors.Items.Add('Error Description : ' adoError.Description); lbADOErrors.Items.Add('Error HelpFile : ' adoError.HelpFile); lbADOErrors.Items.Add('Error SQLState : ' adoError.SQLState); lbADOErrors.Items.Add('Error NativeError : ' IntToStr(adoError.NativeError)); end; // for end;
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-09-16 15:25:41 IP:211.22.xxx.xxx 未訂閱
這麼說好了, 您在 OnPostError 所觸發的 Error 不一定是 ADO 類的 Error。 所以有可能即使發生 Error, 但 ErrorCount 值還是 0。
chiang
一般會員


發表:4
回覆:7
積分:2
註冊:2002-08-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-09-16 15:55:09 IP:12.4.xxx.xxx 未訂閱
請問用delphi去修改資料,在未更新前用sql將同一資料改為另一個值,再到delphi去做更新動作產生錯誤 ,請問這是那一種error?
chiang
一般會員


發表:4
回覆:7
積分:2
註冊:2002-08-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-09-18 10:38:57 IP:12.4.xxx.xxx 未訂閱
to Hagar, 我弄懂了. Thanks!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-09-18 19:40:44 IP:211.22.xxx.xxx 未訂閱
引言: to Hagar, 我弄懂了. Thanks!
真的嗎? 小弟那天回家後, 趕緊拿了那本書來翻 結果發現您寫的跟書上的應該一樣 所以實在不知道為什麼達到預期的結果 可以說一下您試的結果嗎? 至於 Locate 的問題, 書上也說了 是 Delphi 的原始碼漏了一行, 補上去就行了 -- Everything I say is a lie.
系統時間:2024-05-03 21:53:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!