【发布时间】:2019-05-10 03:24:29
【问题描述】:
我需要能够提供一种方法来更新 Access 数据库中所有 ODBC 链接表连接中的服务器名称。所有表都已从 Access 迁移到 SQL Express 实例。需要一个选项来更新所有外部表链接以从“Localhost\SQLExpress”指向另一台服务器上的 SQL 实例。数据库名称将保持一致。只需更新服务器实例名称。
我找到了如何连接到 Access 数据库文件和 Excel 文件的示例,而不是到 SQL Server 的 ODBC 连接。这里的一篇文章指出需要标注一个 db 对象并直接使用它,而不是尝试直接使用 CurrentDb。这让我更进一步,但现在代码在尝试将新连接字符串分配给 TableDef 时因类型转换而失败。
Dim OldServer As String
Dim NewServer As String
Dim OldPath As String
Dim NewPath As String
Dim strPath As String
NewServer = Me.NewServerInstance ' get new Server Instance name from form
OldPath = GetCurrentPath("Version")
'Parse old name from the ODBC connection string
OldServer = Replace(Left(OldPath, InStr(GetCurrentPath("Version"), "UID=") - 2), "ODBC Driver 13 for SQL Server;SERVER=", "")
NewPath = Replace(OldPath, OldServer, NewServer)
If NewServer = OldServer Then
GoTo UpdateInstance_Click_Exit
Else
'update all table connection strings.
'Loop & replace Old server instance with New server instance
Dim Db As DAO.Database
Set Db = CurrentDb
Dim td As DAO.TableDef
For Each td In Db.TableDefs
If (td.Attributes And dbAttachedODBC) = dbAttachedODBC Then
Db.TableDefs(td).Connect = NewPath 'getting a datatype conversion error here...
Db.TableDefs(td).RefreshLink
' MsgBox (db.TableDefs(td).Connect)
End If
Next
End If
代码示例是我想出的。有一条注释指示发生数据类型转换错误的位置。我想我需要知道这是否可能,或者我是否正在尝试做一些不可能的事情,或者只是以错误的方式去做......
【问题讨论】: