2013-08-20 124 views
1

我有一個Access應用程序與SQL Server的鏈接表,我在兩個不同的站點使用,所以SQL服務器名稱,有時SQL數據庫和odbc連接名稱是不同的從網站到網站。但是,他們使用Access Runtime來使用它,因此無法在沒有完整版本的情況下重新鏈接表格。我努力找到一種方法來捕獲任何ODBC連接錯誤,然後通過鍵入ODBC連接名稱等提供重新鏈接表的方法,然後通過我認爲可能的VBA代碼重新鏈接。 (例如,http://www.access-programmers.co.uk/forums/showthread.php?t=143180捕獲到SQL Server鏈接表的Microsoft Access ODBC連接錯誤

數據庫立即在帶有鏈接表上的記錄源的窗體上加載,因此如果可能,它需要捕獲該窗體上的錯誤。我想我可以添加一個帶有按鈕的主菜單來重新鏈接表格,但寧願避免引入菜單表單,這需要用戶額外點擊。

已經找到這些文章,但我無法捕捉到最初的odbc失敗連接窗體的On Error事件並嘗試了Activate事件。任何建議將不勝感激!

http://support.microsoft.com/kb/209855

http://www.access-programmers.co.uk/forums/showthread.php?t=198039

回答

1

提取從鏈接表的一個連接信息,並嘗試打開它ADO連接。您可以根據需要調整ConnectionTimeout屬性。

鏈接的ODBC連接信息可從TableDef.Connect屬性中獲取。

CurrentDb.TableDef("link name").Connect 

理想情況下,你可以放棄「ODBC;」從該字符串開始並將其餘用於您的ADO連接字符串。但是如果你的工作不那麼簡單,你可以用Split()上的字符串「;」並使用你需要的部分。

我包含了打開ADO連接的代碼大綱;你需要改進它。然後你可以從飛濺的形式調用它。如果連接成功,請打開主窗體。當連接失敗時,打開請求重新鏈接所需信息的表單。

Dim cn As Object 
Dim strConnect As String 

On Error GoTo ErrorHandler 
    strConnect = Mid(CurrentDb.TableDefs("link name").Connect, 6) 
    Set cn = CreateObject("ADODB.Connection") 
    cn.ConnectionString = strConnect 
    cn.ConnectionTimeout = 5 ' in seconds 
    cn.Open 
    Debug.Print "success" 
    cn.Close 
    Set cn = Nothing 

ExitHere: 
    Set cn = Nothing 
    On Error GoTo 0 
    Exit Sub 

ErrorHandler: 
    Debug.Print "failed" 
    GoTo ExitHere 
+0

聽起來像那樣可以工作謝謝你,將有一個去並報告回 – ebooyens

+0

作品絕對魅力非常感謝你!對於將來的讀者,這裏是我的最終代碼,用於提取連接字符串並剝離ODBC:從前面: 'strConnect = CurrentDb.TableDefs(「tablename」)。連接 strConnect = Right(strConnect,Len(strConnect) - 5) ' – ebooyens

+0

@ebooyens很高興聽到,謝謝。我更新了答案,使用'Mid'從'TableDef.Connect'屬性中提取需要的部分。 – HansUp