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

ADOConnection 偵測資料庫斷線

答題得分者是:salo0610
shinnlu
一般會員


發表:6
回覆:11
積分:3
註冊:2007-09-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-08-14 17:44:18 IP:220.130.xxx.xxx 訂閱
大家好,
我目前的程式使用 ADOConnection 連接 mySQL,現在的需求是要改成斷線時,會藉由改變 connectionString 來連接 Access DB,我要如何偵測資料庫離線呢?
我剛剛試了一下,程式開啟時會跑以下事件
BeforeDisconnect
WillDisconnect
Login
AfterDisconnect
而離開程式則是
BeforeDisconnect
OnDisconnect
AfterDisconnect
但如果程式連線中,將 mySQL server 關閉,卻不會觸發上述的這些事件,只會有一些錯誤訊息
[MySQL][ODBC 5.1 Driver[mysqld-4.1.16-nt]MySQL server has gone away
TBMaster: Cannot perform this operation on a closed dataset
而且 ADOConnection->Connected 還是 true

請問有沒有辦法判斷ADOConnection 無法連線到資料庫呢?
salo0610
高階會員


發表:42
回覆:120
積分:107
註冊:2003-02-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-08-15 08:39:55 IP:220.132.xxx.xxx 未訂閱

你好:

我的做法是在 DataSet(TADOQuery,TADOTable,TADODataSet.......) 在執行 sql 語法時,
用例外處理的方法取得 ADOConnection 與 資料庫連線斷線的訊息,
我不知這是不是唯一的方法!!
當然也在找尋更好的方法,如你所提到是否說可以在 ADOConnection 的 even 得到斷線的訊息!! ( 斷線時觸發了ADOConnection 某個even )

delphi如何取得異常代碼
http://delphi.ktop.com.tw/board.php?cid=30&fid=69&tid=68376
shinnlu
一般會員


發表:6
回覆:11
積分:3
註冊:2007-09-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-08-15 18:04:28 IP:220.130.xxx.xxx 訂閱
謝謝 salo 大的提示,剛剛發現幾乎大部份的操作都會觸發 ADOConn1WillExecute 這一個事件
而其他的事件,如新增或編輯後的 Post 可以在 ADOTable 的 RecordChangeComplete 處理
以下列出 WillchangeRecord 和 RecordChangeComplete 的執行順序和狀態
連線時的新增
WillchangeRecord, Reason=erAddNew, RCount=1, Event=esOK
RecordChangeComplete,Reason=erAddNew, RCount=1, Event=esOK
WillchangeRecord, Reason=erUpdate, RCount=1, Event=esOK
RecordChangeComplete,Reason=erUpdate, RCount=1, Event=esOK
連線時的編輯
WillchangeRecord, Reason=erFirstChange, RCount=1, Event=esOK
RecordChangeComplete,Reason=erFirstChange, RCount=1, Event=esOK
WillchangeRecord, Reason=erUpdate, RCount=1, Event=esOK
RecordChangeComplete,Reason=erUpdate, RCount=1, Event=esOK
斷線時的新增
WillchangeRecord, Reason=erAddNew, RCount=1, Event=esOK
RecordChangeComplete,Reason=erAddNew, RCount=1, Event=esOK
WillchangeRecord, Reason=erUpdate, RCount=1, Event=esOK
RecordChangeComplete,Reason=erUpdate, RCount=1, Event=esErrorOccured
WillchangeRecord, Reason=erUndoAddNew, RCount=1, Event=esOK
RecordChangeComplete,Reason=erUndoAddNew, RCount=1, Event=esOK
斷線時的編輯
WillchangeRecord, Reason=erFirstChange, RCount=1, Event=esOK
RecordChangeComplete,Reason=erFirstChange, RCount=1, Event=esOK
WillchangeRecord, Reason=erUpdate, RCount=1, Event=esOK
RecordChangeComplete,Reason=erUpdate, RCount=1, Event=esErrorOccured
WillchangeRecord, Reason=erUndoUpdate, RCount=1, Event=esOK
RecordChangeComplete,Reason=erUndoUpdate, RCount=1, Event=esO

補充一點,上述的動作都是按下 Post 才會觸發的事件
如果要在 Add or Edit 時馬上檢查,要對每一個 button 做額外的 query.
編輯記錄
shinnlu 重新編輯於 2008-08-15 18:08:18, 註解 無‧
shinnlu
一般會員


發表:6
回覆:11
積分:3
註冊:2007-09-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-08-20 13:49:15 IP:220.130.xxx.xxx 訂閱
謝謝salo0610的提示
給我很大的幫助...
<!-- E NDT BLOCK : -->
系統時間:2017-12-17 6:35:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!