gpt4 book ai didi

ms-access - 当 ODBC 更改时如何刷新 Access mdb 中的链接表

转载 作者:行者123 更新时间:2023-12-02 19:07:28 25 4
gpt4 key购买 nike

我可以创建 Access mdb 并通过 ODBC 将链接表添加到 Sql Server 数据库。如果我使用 ODBC 控制面板小程序更改 ODBC 连接的 Sql Server,mdb 仍会连接到原始 Sql Server,直到重新启动 Access。

有没有办法在不重新启动 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 方法的 Access 帮助。

代码版本 1

重新链接的经典方法,但如果在调用 RefreshODBCLinks 之前使用过表,Access 可能会将连接信息保留在内存中。

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 的新表。
请确保对此进行测试,并根据需要添加一些代码以更好地处理错误。

另请注意,在创建 ODBC 表期间传递的参数dbAttachSavePWD 将在 Access 中保存 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

最后一件事:如果您仍然遇到需要重新启动 Access 才能看到更改的问题,请查看 Restarting and compacting the database programmatically 中的我的代码在我的网站上。

注意:代码版本 2 的部分灵感来自 this Access Web article .

关于ms-access - 当 ODBC 更改时如何刷新 Access mdb 中的链接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/564265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com