2014-04-23 40 views
0

我在使用ADO連接到MS SQL服務器的傳統Delphi應用程序中遇到問題。連接錯誤時的TADOQuery/TADOConnection行爲:覆蓋默認值?

應用程序每1分鐘輪詢一次數據庫以獲取更新。如果連接丟失,並且應用程序長時間(例如30分鐘)最小化到托盤,則窗口在再次最大化時包含許多消息對話框,表明「連接錯誤」。

要改變這種行爲,我首先看了一些try...except塊,但什麼也沒找到。源代碼不包含文本「連接錯誤」,也沒有應用程序範圍的設置,例如ApplicationEventsException ...

似乎這種行爲是在應用程序或組件級別設置的,但我沒有 已經能夠找到如何。

我沒有德爾福的經驗,所以我沒有線索。 有誰知道在哪裏尋找?

+2

可能錯誤消息是來自MDAC層。你有沒有嘗試在你的TAdoConnection的OnInfoMessage中放置一個斷點,以查看當連接丟失時觸發事件?另請嘗試查看連接的錯誤集合。 – MartynA

+0

@MartynA OnInfoMessage事件沒有處理程序。插入一個空處理程序並在其上設置斷點後,它不會觸發。我也嘗試設置'Application.OnException'事件處理程序,但_before_它激發我的測試中仍然出現一個對話框,提示「連接錯誤」或「用戶X登錄失敗」。 – AunAun

+0

不確定我關注「插入一個空處理程序」 - 你必須在其中放入一些代碼,否則當你保存該單元時它將被簡單地刪除,所以永遠不會被調用。 – MartynA

回答

0

(我不訴舒服張貼此作爲一個答案,因爲我不能準確地重現您報告的行爲。)

如果您的應用程序沒有代碼生成您所描述的彈出窗口,他們很可能來自MDAC層。抑制它們的方法似乎是設置TApplication.OnException處理程序。這是簡單的事情,如下所示:

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    Application.OnException := HandleException; 
end; 

procedure TForm1.HandleException(Sender : TObject; E : Exception); 
begin 
    ShowMessage(E.Message); 
end; 

很顯然,你不會真的想ShowMessage()在你的處理器,因爲它只是移動的問題,而不是治癒它

+0

謝謝,它幫助! – AunAun