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

請問一下例外事件該如何使用

尚未結案
suzukiyamaru
一般會員


發表:18
回覆:8
積分:5
註冊:2003-06-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-12 20:07:18 IP:218.160.xxx.xxx 未訂閱
各位大大好!! 請問一下假如當使用者對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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-12 20:18:04 IP:61.62.xxx.xxx 未訂閱
Hi, 請問一定要使用 Exception 的處理嗎? 其實你的程式碼就應該可以工作了, 只是建議你最好查詢使用的 Edit 元件不要使用 TDBEdit, 直接用原本的 TEdit 元件即可, 另外, 需要使用 Exception 來處理的原因是什麼呢?
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-12 22:44:17 IP:63.84.xxx.xxx 未訂閱
您好!    看您的程式碼似乎和您所述的要求有些不同喔. 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-14 10:16:40 IP:61.30.xxx.xxx 未訂閱
你好: 通常引發意外事件是要給呼叫者(程序)能夠攔截錯誤,以方便作進一步的錯誤處理。 提供一個範例供大家參考。
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-15 15:31:53 IP:163.29.xxx.xxx 未訂閱
程式語法正確就不用Except例外處理嗎? 完成的程式當然都被認為是正確的,不過即使在測試時都沒問題 使用者在用時也不能保證沒問題吧,畢竟還有其他原因,例外處理 不就是為了這目的嗎?所以,如果為了避免錯誤而跳離程式或出現 其他不好看的畫面,我想還是有必要的,個人淺見..... 事實上我也懶得這樣寫...cccc
------
~*呂政全*~
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

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