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

如何利用偵測連結Database時, 所發生問題.

答題得分者是:allenchan
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-02 10:01:29 IP:61.222.xxx.xxx 未訂閱
請教各位, 如何利用TDatabase或其它元件,在連結資料庫時,有發生未開資料庫,無法連結時,利用訊息表示. 將一些資料庫的基本訊息,用自己訊息顯示,,不用系統的錯誤訊息... 請各位指導!
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-02 23:59:41 IP:61.62.xxx.xxx 未訂閱
假設使用的是 ADOConnection:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    try
    {
        ADOConnection1->Open();
    }
    catch(EOleException &e)
    {
        String msg;
        msg.sprintf("Open Database Error [0x%X] [%s]", e.ErrorCode, e.Message.c_str());
        ShowMessage(msg.c_str());
    }
    catch(...)
    {
        ShowMessage("other error");
    }
}
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-03 11:38:47 IP:220.130.xxx.xxx 未訂閱
kenbcb 您好 : 請參考 Mickey 版主大大的文章: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=45345 ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-03 15:57:47 IP:61.222.xxx.xxx 未訂閱
我沒ADO元件,,,我只想做個連結DB時的保護,避免出現一現系統上的訊息,讓人不懂. 自己寫一個簡單的訊息,來取代錯誤代碼, ex:當DB未開,程式此時無法連結,系統會出現讓人不易懂的代碼,想翻成易懂的訊息(DB未啟動等).
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-03 16:31:17 IP:220.130.xxx.xxx 未訂閱
引言: 我沒ADO元件,,,我只想做個連結DB時的保護,避免出現一現系統上的訊息,讓人不懂. 自己寫一個簡單的訊息,來取代錯誤代碼, ex:當DB未開,程式此時無法連結,系統會出現讓人不易懂的代碼,想翻成易懂的訊息(DB未啟動等).
kenbcb 您好 : 如果您不在意啟動 Open DB 時若失敗會 delay 幾秒才產生 Exception 的話,allenchan 兄的 try .. catch 方法可以達成, 攔截所有 Exception .. 然後 Show 自己定義的 Message 給 User 知道 .. 我所貼的文章是,利用類似 ping 的手法,去偵測網路上指定 IP port 是否可連接?? 若不行再自行 Show Error Message , 如果 IP port 不通,自然資料庫元件是不可能可以連結的 .. ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-04 21:05:23 IP:203.204.xxx.xxx 未訂閱
在BCB3版中有個Handled by選項設成 user program~然後在程式中 使用try catch在run時,除錯器就不會每次都停下來~煩死了~ 不過到了bcb6版這個功能不知道跑到哪去了~有人知道在哪設定嗎; 雖然自己抓錯了,還拼命的跑出錯誤訊息~怕你不知道一樣,不過當你包裝程式出去後~顯現的就只有你catch的message了~
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-07 09:48:40 IP:61.222.xxx.xxx 未訂閱
各位大大. 我試得結果,請問這是那裡有錯? 沒有做到防護...還是出現系統訊息.     
 
   Database1->AliasName = DSN;
   Database1->Params->Values["User Name"] = ID;
   Database1->Params->Values["Password"] = PWD;
   TableGS->TableName = TableName;
   try
   {
       Database1->Connected = true;
   }
   catch(...)
   {
      ShowMessage("Database not find.");
      return;
   }
   TableGS->Active = true;
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-07 10:12:14 IP:61.62.xxx.xxx 未訂閱
請先參考一下: http://www.delphi32.com/info_facts/faq/faq_93.asp 另外,您測試的時候可能先試一下正常的情況,如果沒問題再測試其他錯誤的狀況。 再者,如果你是再 Debug Time 使用 try ... catch,當 Exception 發生時,Debuger 會先攔住,此時你按 F9 繼續跑過去就會輪到你的 try ... catch,您可以直接執行執行檔就不會看到 Deuber 攔截的訊息
系統時間:2024-04-29 4:51:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!