請問一下例外事件該如何使用 |
尚未結案
|
suzukiyamaru
一般會員 ![]() ![]() 發表:18 回覆:8 積分:5 註冊:2003-06-09 發送簡訊給我 |
各位大大好!!
請問一下假如當使用者對dbedit進行輸入後 的onexit的事件執行時,該如何判別這筆資料是否存在資料表中,假如不存在則會跳出視窗要使用者重新輸入, 且鍵盤指標會停在那格dbedit上,假如使用例外指令應如何使用!!請大大幫忙解答!!謝謝 try Query1.Close;
Query1.SQL.Text := 'Select 客戶編號 From Table1 Where 客戶編號 = ' DBEdit1.Text;
Query1.Open;
if not Query1.IsEmpty then begin
ShowMessage(DBEdit1.Text ' 編號不存在');
DBEdit1.SetFocus;
end;
|
timhuang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 看您的程式碼似乎和您所述的要求有些不同喔.
if not Query1.IsEmpty then begin
ShowMessage(DBEdit1.Text ' 編號不存在');
以上這兩句指的是如果資料表不是空的, 則ShowMessage信息不存在. 所以, 應該改為:
if Query1.IsEmpty then begin
ShowMessage(DBEdit1.Text ' 編號不存在'); 另外, 如同timhuang前輩所講, 就您的要求而言, 是不需要用到Try...Except的例外處理語法, 類似于這樣的需求, 如果是使用例外處理的語法, 主要是針對Try里面的程式語法是否有錯誤而做Except, 您已經指定了正确的SQL語法, 所以并不需要. 參考看看! =====================
努力,相信會獲得美麗!
忻晟
------
忻晟 |
ha0009
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
你好:
通常引發意外事件是要給呼叫者(程序)能夠攔截錯誤,以方便作進一步的錯誤處理。
提供一個範例供大家參考。
type // 自訂錯誤代碼序列 TCustomExceptionEnum = (ceNoError, ceIDNotExists); // 自訂錯誤 TCustomException = Class (Exception) private FExceptionID : TCustomExceptionEnum; protected public // 改寫 Create 為傳入代碼 constructor Create(Const AExceptionID : TCustomExceptionEnum); Virtual; // 唯讀的錯誤代碼屬性 property ExceptionID : TCustomExceptionEnum read FExceptionID; published end; TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private // 模擬錯誤發生的程序 procedure TestException; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin TestException; end; procedure TForm1.Button2Click(Sender: TObject); begin try TestException; except On E : TCustomException Do begin Case E.ExceptionID of ceIDNotExists : begin memo1.Lines.Add('asas'); end; end; end; end; end; { TCustomException } constructor TCustomException.Create(const AExceptionID: TCustomExceptionEnum); Const ExceptionStr : array[Low (TCustomExceptionEnum)..High (TCustomExceptionEnum)] of String = ( '', '編號不存在。' ); begin FExceptionID := AExceptionID; inherited Create (ExceptionStr [AExceptionID]) end; procedure TForm1.TestException; begin raise TCustomException.Create (ceIDNotExists); end; end. ![]() ![]() |
changchuan
一般會員 ![]() ![]() 發表:7 回覆:12 積分:3 註冊:2003-10-07 發送簡訊給我 |
|
japhenchen
高階會員 ![]() ![]() ![]() ![]() 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
sql查不到資料是不會引發Exception錯誤的,簡單的講,Exception通常是用來處理系統層級的錯誤,像是EConvertError變數型態轉換錯誤,EMathError數學錯誤,EDivByZero除零錯誤,EInOutError 錯誤(找不到檔案或目錄不存在),OS錯誤啦,EAccessViolation記憶指標錯誤啦等等等等的.......... 如果不想等到發出windows系統錯誤訊息,藍底白字啊的時候,就要做好exception的掌控的~~ 如果我把SQL語法弄錯了,像
QUERY1.SQL.TEXT:=' SELECT FROM DATA1 WHERE A=1 AND B=2 ' ;
QUERY1.EXECSQL; // 沒有明確要SELECT什麼欄位的錯
要排除錯誤,是不是只有用ADOQUERY1.ParamCheck來做?還有其他方法嗎? 我不懂,不懂,不懂....所以我才來ktop學工夫
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |