2012-01-05 34 views
0

有什麼方法可以檢查訪問Web數據庫是否在線?我通過OleDB和Microsoft.ACE.OLEDB.12.0提供程序連接到數據庫。數據庫包含本地表以及一些Web表。我需要能夠檢查Web表是否連接到SharePoint數據庫。我也使用Access Interop庫來執行一些操作 - 如果我可以使用它來檢查數據庫是否在線,那也可以。檢查訪問Web數據庫是否在線

回答

1

訪問客戶端知道,如果它是「上」線或「離線」。因此,必須有某種方式來訪問測試/檢查/知道這些表當前已斷開連接(本地),或者實際上具有到SharePoint的實時連接並且正在主動同步數據。我的蜘蛛感覺告訴我,這種狀態可能不會暴露,如果是這樣,我不知道如何抓住這個價值。

但是,您可以嘗試強制進行完整的網絡同步操作,如果您不在線,那麼您將收到一個可捕獲的錯誤(3021)。這看起來有點像一團糟,並且它可以檢查狀態的全部可能(但我不知道在這個時間點是如何的)。

因此嘗試同步將強制此問題。

On Error Resume Next 
DoCmd.RunCommand acCmdSyncWebApplication 
Debug.Print Err.Number 

由於擡起頭,acCmdSyncWebApplicaiton不變的是699

然而上述事實上確實折騰有被解僱的對話框。因此,以上對於用戶交互按鈕是可以的,但不需要用戶間的交互或自動化。

我知道如何從Access執行此操作的唯一方法是調用SharePoint上的表級過程。

下工作得很好,我:

On Error Resume Next 
DoCmd.RunDataMacro "tblmonthtext.test1" 
Debug.Print Err.Number 

如果我們在連接線和表格,然後調用表級程序(什麼都不做)工作得很好,並errnumber = 0。如果我們脫機,然後調用表程序是不可能的,因此錯誤號= 13087.

正如我們正在處理自動連接或disconnedted表處理,然後我的VBA代碼打開表運行得很好,無論如果你有一個網絡連接或應用程序正在「離線」運行,而不是「在線」。我不認爲代碼知道或關心,這是你的問題。

所以我能夠從Access調用該表程序。我相信docmd對象和方法是作爲一個自動化(互操作性)暴露給.net的,所以在這個時候我正在處理這個問題,它對我來說工作得很好。如果rundatamacro被暴露,那麼你可以使用這個想法。

另一個kluge(可能更適合你的工作)是使用dumy表並添加一條新記錄。當表格離線時,生成的自動編號PK值爲負值。當你最終在線並同步時,那些PK負數將被服務器端生成的PK正值所取代。

當你在線並添加一行時,你會得到一個肯定的自動編號PK值。所以這裏另一個可能的技巧是簡單地有一個沒有記錄的虛擬表。

然後您只需添加一條記錄,確保它已保存。然後你抓住PK值,然後我想只是刪除該行。 (所以表格永遠不會填滿)。如果pk值> 0,則表明您在線並已連接。如果PK值爲< 0,那麼您處於離線斷開模式。因此,一個「提示」或想法是離線模式PK行值將被替換,當你最終得到一個連接同步,並在該離線時間幀,這些PK值是< 0.

+0

感謝您的回答!我想我可以使用服務器端查詢的想法 - 我會試一試。 – 2012-01-06 16:14:37

+0

謝謝。請記住,上面的表格過程調用是Access功能。在Access 2010中,表觸發器和表過程(存儲過程)是發佈時在SharePoint上運行服務器端的Access代碼。此代碼不是T-SQL(SQL服務器)或PL-SQL(Oracle),而是像其他人一樣,使用「自己」的過程語言。因此,如果服務器不可用,調用這些數據宏將失敗。如上所述,可以使用檢查表格插入上的負面自動編號。 (所以在這裏沒有服務器端查詢,但訪問「服務器端代碼」。 – 2012-01-07 05:38:55

+0

我去了PK <0選項。謝謝。 – 2012-01-08 00:21:59

0

如何像

try 
{ 
    //Create or open connection 
} 
catch(/*Exception you receive if database is inaccessible*/) 
{ 
    //Handle exception 
} 
catch(Exception ex) 
{ 
    //Handle other exceptions 
} 
finally 
{ 
    accessConnection.Close(); 
} 
+0

謝謝但我沒有試圖看看我能否連接到數據庫 - 我始終可以,因爲它是本地的。我需要查看數據庫當前是否具有與SharePoint Web數據庫的連接。 – 2012-01-06 01:10:26