我有许多Access数据库文件,其中包含指向SQLServer数据库的链接表。现在数据库服务器已经改变,我必须编辑链接,可能没有重新创建它们。
可以这样做吗?我使用Access 2013。
答案 0 :(得分:2)
是的,可以使用VBA,但你的方式实际上取决于你如何链接表格。
以下是我用于SQL服务器表的连接字符串的2个示例
直接连接:
Driver=SQL Server Native Client 10.0;Server=server_name;Address=server_address,1433;Network=network_name;Database=database_name;Trusted_Connection=Yes
DSN连接(ODBC控制面板中的条目)
ODBC;Provider=SQLNCLI10;Server=server_name;DSN=name_of_DSN_entry_in_ODBC_control_panel;Database=database_name;Trusted_Connection=Yes
所以要做的第一件事就是确定表的链接方式。 您可以使用此代码(注意评论):
Public Sub Check_ODBC_tables()
Dim tdef As TableDef
' First loop on all tables to determine the connection strings
For Each tdef In CurrentDb.TableDefs
' only print the constring if the database name is your old database (adapt accordingly)
If InStr(tdef.Connect, "Database=old_database_name") Then
Debug.Print tdef.Connect
End If
Next
End Sub
运行此代码(F5)并在即时窗口中检查输出。您将找到表的链接方式以及连接字符串是什么。
您应该根据它准备一个连接字符串,并在其中调整数据库名称以使用您的新数据库。
准备好之后,您可以调整并运行以下代码来删除旧表并使用新的数据库名称重新创建它们(可能需要进行一些调整),所以请在调试模式下考虑它!
Public Sub Change_ODBC_tables()
Dim tDef As TableDef
Dim tDefNew As TableDef
Dim strTable As String
Dim strCOnString As String
' examples of constrings - ADAPT!!!!
strCOnString = "Driver=SQL Server Native Client 10.0;Server=server_name;Address=server_address,1433;Network=network_name;Database=database_name;Trusted_Connection=Yes"
strCOnString = "ODBC;Provider=SQLNCLI10;Server=server_name;DSN=name_of_DSN_entry_in_ODBC_control_panel;Database=database_name;Trusted_Connection=Yes"
For Each tDef In CurrentDb.TableDefs
If InStr(tDef.Connect, "Database=old_database_name") Then
' We find a match, store the table name
strTable = tDef.Name
' delete the linked table
DoCmd.DeleteObject acTable, strTable
' recreate the linked table with new DB name
Set tDef2 = CurrentDB.CreateTableDef(strTable)
tDef2.Connect = strCOnString
tDef2.SourceTableName = strTable
tDef2.Name = strTable
CurrentDb.TableDefs.Append tDef2
End If
Next
End Sub
如果您不完全理解我发布的第二段代码,我建议您在运行之前备份您的mdb,因为它会删除可能导致严重问题的对象。