我有 MS Access 2007 前端和 SQL Server Express 后端。 (这最初是从 Accesss 数据库中升级的)。
此数据库已从生产复制并在生产服务器的不同位置/域中运行。这是用于开发的。我有两个连接字符串,这样我就可以在服务器/数据库之间切换。
我通过 ODBC 连接字符串连接 MS Access 链接表,并使用 SQL 身份验证进行连接。
SQL 用户拥有数据库的 dbowner 权限/Access 权限
链接表刷新正常,我可以在前端打开表并修改表中的数据,但是当我尝试打开标准 Access 表单时,大多数表单直接链接到表,我收到“连接失败” .....服务器不存在或 Access 被拒绝”。 然后会出现一个 SQL Server 登录框,其中包含原始服务器名称,而不是表当前连接到的服务器名称。
以下是连接字符串供您引用: { 将 sLocalName 变暗为字符串 将 tdf 变暗为 TableDef Dim rs As dao.Recordset
''This is a basic connection string, you may need to consider password and so forth
' cn = "ODBC;DSN=aid_dev;Trusted_Connection=No;APP=Microsoft Office 2007;DATABASE=aid_dev;"
cn = "ODBC;DRIVER=SQL Server;SERVER=KAL1\SQLEXPRESS;DATABASE=aid_dev;Uid=User;Pwd=Password"
''All fields fro`enter code here`m 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}
提前致谢
罗杰
编辑 - 发现问题,但现在如何处理 我发现一旦建立连接,它实际上会创建到 SQL 表的链接,但作为 dbo.Tablename。现在,这会破坏所有报告,因为表单不指向 dbo.tablenames,而仅指向表名称。 原始链接仍然存在,具有相同的原始连接属性。
1)如何更改原始表连接属性或 2)如何将 dbo.tablename 重命名为 tablename
或者我只是更改每个表单查询等......
救命,这让我很生气。
谢谢
罗杰
最佳答案
代码从以下位置获取本地名称:
sLocalName = rs!TABLE_SCHEMA & "_" & rs!TABLE_NAME
但是您不必包含 rs!TABLE_SCHEMA & "_"&
,这是获取“dbo_”的地方。
所以
sLocalName = rs!TABLE_NAME
事实上,本地名称或多或少可以是您喜欢的任何名称。
关于ms-access - MS Access 表单拒绝连接到 SQL Express 后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12018352/