我有一个Access 2003数据库MDB,其中所有表都作为SQL Server 2005中的链接表存在.MDB文件包含指向正确的SQL Server和登录凭据(可信连接)的所有ODBC信息。
我想要做的是向MDB文件添加一个新的链接表但是我不知道如何指定ODBC连接信息。当我尝试添加新的链接表时,会不断提示您找到或创建DSN文件。我不想在每台机器上创建一个新的DSN条目,而是希望存储在Access MDB文件中的所有信息。
在现有数据库中,我可以“悬停”在表名称上,并将ODBC连接信息视为工具提示。我需要做的就是使用相同的连接信息添加另一个链接表。
我可以访问表所链接的SQL Server。我已经创建了我想要添加的新表。我只需要找到一种方法来链接它。
答案 0 :(得分:2)
对于它的价值,我很懒。我在我的开发机器上保留了一个DSN,并使用它来创建新的链接表。然后,在将前端分发给最终用户之前,我运行Doug Steele's code to convert the links to dsnless connections。
答案 1 :(得分:1)
您可以使用现有表格中的连接字符串,也可以执行以下操作:
''This is a basic connection string, you may need to consider password and so forth
cn = "ODBC;DSN=TheDSNName;Trusted_Connection=Yes;APP=Microsoft Office 2010;DATABASE=TheDatabaseName;"
有一些是连接表:
sLocalName = "TABLE_SCHEMA" & "_" & "TABLE_NAME"
With CurrentDb
If DLookup("Name", "MSysObjects", "Name='" & sLocalName & "'") <> vbNullString Then
If .TableDefs(sLocalName).Connect <> cn Then
.TableDefs(sLocalName).Connect = cn
.TableDefs(sLocalName).RefreshLink
End If
Else
''If the table does not have a unique index, you will neded to create one
''if you wish to update.
Set tdf = .CreateTableDef(sLocalName)
tdf.Connect = cn
tdf.SourceTableName = "TABLE_NAME"
.TableDefs.Append tdf
.TableDefs.Refresh
End If
End With
如果表没有唯一索引
,这将生成一个消息框 DoCmd.TransferDatabase acLink, "ODBC Database", cn, acTable, "TABLE_NAME", sLocalName
答案 2 :(得分:0)
我能够成功添加表格,并想详细说明这里的步骤。
然后我在代码模块中创建了以下子例程。它本质上遍历Access中具有ODBC连接的所有表,并将正确的ODBC连接信息设置到表定义中。您可以删除之前创建的DSN,因为不再需要它。
Public Sub RefreshODBCLinks()
Dim connString As String
connString = "ODBC;DRIVER=SQL Server Native Client 10.0;" & _
"SERVER=<SQL SERVER NAME>;UID=<USER NAME>;" & _
"Trusted_Connection=Yes;" & _
"APP=<APP NAME>;DATABASE=<DATABASE NAME>"
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 = connString
tb.RefreshLink
Debug.Print "Refreshed ODBC table " & tb.Name
End If
Next tb
Set db = Nothing
End Sub
注意......要执行上面的SubRoutine,我只需将其名称输入Access代码模块中的“立即”窗口即可。您还可以创建一个执行此例程的宏,然后无论何时创建新表,您都可以运行宏。
感谢“Remou”的回答和帮助!
P.S。如果您对连接字符串中的APP=<APP NAME>
感兴趣,请查看本文。 http://johnnycoder.com/blog/2006/10/24/take-advantage-of-application-name/