我们需要找到一种方法,以以编程方式****将SQL Server数据库中的所有表链接到访问数据库。我们将从使用.net / SQL Server 2008的程序调用此访问数据库。
在调用应用程序时,我们希望添加链接表,以便用户可以从访问中运行报表/模块,而无需担心链接表。我们有办法做到这一点吗?
答案 0 :(得分:2)
以下是一些注释。
Dim sLocalName As String
Dim tdf As TableDef
Dim rs As dao.Recordset
''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;"
''All fields from tables
strSQL = "SELECT TABLE_CATALOG, " _
& "TABLE_SCHEMA, " _
& "TABLE_NAME, " _
& "TABLE_TYPE " _
& "FROM [" & cn & "].INFORMATION_SCHEMA.tables " _
& "WHERE TABLE_TYPE = 'BASE TABLE'"
Set rs = CurrentDb.OpenRecordset(strSQL)
Do While Not rs.EOF
sLocalName = rs!TABLE_SCHEMA & "_" & rs!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 = rs!TABLE_NAME
.TableDefs.Append tdf
.TableDefs.Refresh
''This will produce a message box if the table does not have a unique index
''DoCmd.TransferDatabase acLink, "ODBC Database", cn, acTable, rs!TABLE_NAME, sLocalName
End If
End With
rs.MoveNext
Loop
答案 1 :(得分:1)
您需要与SQL数据库建立ODBC连接。准备好此连接后,您可以将其用于要链接的所有表:
DoCmd.TransferDatabase acLink, _
"ODBC Database", _
myODBCconnection, _
myDatabaseName, _
acTable, _
myTableName
我猜您可以“动态”声明您的ODBC连接器,例如建议的here。
要枚举表格,您有以下选择:
在所有情况下,此程序都应使用autoexec宏启动,这意味着每次用户打开mdb客户端时都会创建\更新链接。
答案 2 :(得分:0)
您可以通过在SQL Server中使用指向Access数据库的链接服务器来实现等效。这将使您可以访问Access数据库中的所有表,以便您可以引用它们:
Select ..
From [LinkedServerName]...[AccessTableName]
顺便说一下,链接的服务器可能对你想要的东西有点过分。查看OPENROWSET函数,它有效地让你传递一个连接字符串。
编辑:我最初读的问题是字面意思是“ SQL Server 中的链接表 访问”,我将其转换为从SQL到Access的意思。所以,鉴于此,我的解决方案将适用。但是,如果希望从Access访问SQL,那么这是不同的,并且提供的其他解决方案将更合适。答案 3 :(得分:0)
您可以use ADOX进行实际链接。
就枚举你所连接的数据库中的表而言,你可以做一些简单的事情,就像对你的SQL Server运行这个查询一样简单,但有很多方法可以为那个猫提供皮肤:
SELECT * FROM INFORMATION_SCHEMA.TABLES