2009-07-08 46 views
0

我們的郵件服務器出現問題,這些問題凸顯了我幾年前在完成報告時爲電子郵件部門設置的系統中的一個弱點。從VBA中檢測並切換Domino服務器

,目前設置了郵件服務器的代碼是硬編碼爲

Set objNotesMailFile = objNotesSession.GETDATABASE("XXX-BASE-MAIL-04/CompanyName", dbString) 

我們遇到的問題是,在04服務器片狀最好的時刻,每個人都被通過的一個路由當複製服務器崩潰時。桌面Notes客戶端處理這個問題並沒有太多問題,但是應用程序無法獲取任何郵件,並且沒有提供任何失敗通知。

有沒有一種方法可以測試主服務器上可用數據庫的存在性,如果不存在,則會退回到其中一臺複製服務器上?

回答

3

NotesDatabase對象具有屬性「IsOpen」 - 布爾值 - 可用於在調用notesSession.getDatabase後檢查數據庫是否成功打開。所以,你可以這樣做以下:

Set objNotesMailFile = objNotesSession.GETDATABASE("XXX-BASE-MAIL-04/CompanyName", dbString) 
if not (objNotesMailFile.IsOpen) then 
    ' try next server 
    ... 
end if 

編輯:只是爲了完整性......還有,你可以傳遞給GetDatabase方法可選的第三個參數 - 布爾 - 指定是否返回一個有效對象當數據庫(或服務器)不能打開時,或者返回值爲NOTHING。將第三個參數指定爲FALSE將返回NOTHING,您可以檢查它。同樣的結果,最終。

+0

現貨,歡呼聲。 – Lunatik 2009-07-09 06:04:31

1

你可能想使用這樣的事:

Dim db As New NotesDatabase("", "") 
Call db.OpenWithFailover("XXX-BASE-MAIL-04/CompanyName", dbString) 

如果數據庫不能在特定的服務器上打開,但該服務器屬於集羣,OpenWithFailover自動查找指定的服務器的副本在同一個羣集上。如果該方法找到副本,則會打開該數據庫,並且服務器屬性會相應地進行調整。