我可以創建Access mdb並通過ODBC將鏈接表添加到Sql Server數據庫。如果使用ODBC控制面板小程序更改ODBC連接到的Sql Server,則mdb仍會連接到原始Sql Server,直到Access重新啓動。如何在ODBC更改時刷新Access mdb中的鏈接表
有沒有辦法重新鏈接這些鏈接的服務器表,而無需重新啓動Access?
編輯:我想在代碼中這樣做
我可以創建Access mdb並通過ODBC將鏈接表添加到Sql Server數據庫。如果使用ODBC控制面板小程序更改ODBC連接到的Sql Server,則mdb仍會連接到原始Sql Server,直到Access重新啓動。如何在ODBC更改時刷新Access mdb中的鏈接表
有沒有辦法重新鏈接這些鏈接的服務器表,而無需重新啓動Access?
編輯:我想在代碼中這樣做
您可以使用下面的代碼以刷新您的Access項目中的所有ODBC表給定的DSN。
如何使用它
只需將代碼複製一個新的或現有的VBA模塊中,要刷新的聯繫,與新ODBC連接正確的DSN稱之爲:
RefreshODBCLinks "ODBC;DRIVER=SQL Server Native Client 10.0;" & _"
"SERVER=SQLSERVER;UID=Administrator;" & _
"Trusted_Connection=Yes;" & _
"APP=2007 Microsoft Office system;DATABASE=OrderSystem;"
而且,看看在TableDef.RefreshLink
方法的訪問幫助。
代碼版本1重新鏈接,但訪問可以保持連接信息在內存中,如果已使用的表RefreshODBCLinks
調用之前的
經典方式。
Public Sub RefreshODBCLinks(newConnectionString As String)
Dim db As DAO.Database
Dim tb As DAO.TableDef
Set db = CurrentDb
For Each tb In db.TableDefs
If Left(tb.Connect, 4) = "ODBC" Then
tb.Connect = newConnectionString
tb.RefreshLink
Debug.Print "Refreshed ODBC table " & tb.Name
End If
Next tb
Set db = Nothing
End Sub
代碼版本2
這將徹底重新創建ODBC鏈接表:舊的將被重命名,然後使用給定的DSN的新表將被創建刪除舊的鏈接的版本之前。
請確保你測試了這個,並且可能會添加一些代碼,以便在必要時更好地處理錯誤。
還要注意參數dbAttachSavePWD
創建ODBC表將保存ODBC密碼(如果有的話)訪問的過程中傳遞。如果這不是您需要的,請將其刪除。
Public Sub RefreshODBCLinks(newConnectionString As String)
Dim db As DAO.Database
Dim tb As DAO.TableDef
Dim originalname As String
Dim tempname As String
Dim sourcename As String
Dim i As Integer
Set db = CurrentDb
' Get a list of all ODBC tables '
Dim tables As New Collection
For Each tb In db.TableDefs
If (Left(tb.Connect, 4) = "ODBC") Then
tables.Add Item:=tb.Name, key:=tb.Name
End If
Next tb
' Create new tables using the given DSN after moving the old ones '
For i = tables.count To 1 Step -1
originalname = tables(i)
tempname = "~" & originalname & "~"
sourcename = db.TableDefs(originalname).SourceTableName
' Create the replacement table '
db.TableDefs(originalname).Name = tempname
Set tb = db.CreateTableDef(originalname, dbAttachSavePWD, _
sourcename, newConnectionString)
db.TableDefs.Append tb
db.TableDefs.Refresh
' delete the old table '
DoCmd.DeleteObject acTable, tempname
db.TableDefs.Refresh
tables.Remove originalname
Debug.Print "Refreshed ODBC table " & originalname
Next i
Set db = Nothing
End Sub
最後一兩件事:如果你仍然收到這個要求重新啓動,以使更改是可見的訪問問題,然後看看我的代碼在Restarting and compacting the database programmatically我的網站上。
注:代碼版本2的一部分是從this Access Web article啓發。
您使用的是什麼版本的Access?在2000年,您可以轉到工具>數據庫實用程序>鏈接表管理器來更改您的設置。
感謝 - 你是對的它工作,如果我使用鏈接表管理器,並選中「始終提示輸入新位置」,然後再次選擇ODBC。我想用代碼重新鏈接表格 - 我將編輯我的問題以清楚地說明問題。 – BTB 2009-02-19 11:59:59
爲什麼你想重新連接你的桌子?這樣做會得到什麼? – Brettski 2009-02-24 04:56:30