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

請問要如何能在發現錯誤時,讓系統記錄錯誤?

尚未結案
pigbaby
初階會員


發表:2
回覆:84
積分:47
註冊:2002-09-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-18 08:47:10 IP:210.200.xxx.xxx 未訂閱
請問大家.. 豬寶寶在寫程式時常發生一些非ap的錯誤而導致程式中斷(像要寫入資料時..網路卻斷線~.~) 在下面的LINK中Fishman 有提到用ApplicationEvents可以捕捉到錯誤 http://delphi.ktop.com.tw/topic.php?topic_id=48495 但是豬寶寶想問的是說 這個捕捉到的踖誤 只有ERROR CODE及說明 卻不知道是那個FUNCTION,PROCEDURE所引起的錯誤 如何能得知是那個PROCEDURE或是FUNCTION的第幾行所發生的錯誤呢? 這樣MIS如果在程式出狀況時,會比較好除錯.. 謝謝^^
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-18 13:45:55 IP:61.222.xxx.xxx 未訂閱
豬寶寶,您好: 提供我的做法,也許有人有更好的解法.    我會在程式可能會出錯的地方以TRY-EXCEPTION-END包起來.舉個例子,在我的MainForm一開啟時會先連進資料庫(我用的是BDE),那麼,我會有個程式碼如下:
procedure TfrmMainForm.Connection;
begin
  try
    Database1.Connected:=False;
    Database1.Connected:=True;
  except
    on E:Exception do
    begin
      raise Exception.Create('連接資料庫失敗,錯誤訊息如下:'#13 e.Message);
    end;
  end;
end;
雖然在exception裡我再舉發一個例外來處理,但這時出現在使用者畫面上的,就不會全是原文錯誤訊息,第一行是"連接資料庫失敗",第二行才是錯誤訊息的原文,第一個訊息是讓使用者看的,第二行訊息是供programmer debug用的. 再舉個例子,在每次TClientDataSet.Active:=True時,也是一樣用try-exception-end包住,然後在exception裡顯示錯中文的錯誤訊息,讓使用者知道現在程式要從資料庫讀取什麼資料時出現錯誤,把錯誤的原文訊息也一併顯示出來,除此之外,也將執行的SQL指令儲存到一個地方,讓程式設計者可以知道到底SQL指令程式有沒有組錯.
  try
    ClientDataSet.Active:=True;
  except
    on E:Exception do
    begin
      ssSQL.SaveToFile('C:\Debug\讀取XXXSQL指令.txt');
      raise Exception.Create('讀取XXX資料失敗,錯誤訊息如下:'#13 e.Message);
    end;
  end;
給您參考
pigbaby
初階會員


發表:2
回覆:84
積分:47
註冊:2002-09-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-19 18:13:56 IP:210.200.xxx.xxx 未訂閱
謝謝您提供的方法 但是 豬寶寶常遇到在設計時無法預期的錯誤,且USER習慣是不回報給MIS人員知道.. 所以想說看有沒有辦法不用TRY去捕捉錯誤且記錄下來 讓MIS 可以改進錯誤.
系統時間:2024-05-04 13:21:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!