gpt4 book ai didi

ms-access - MS Access 表单拒绝连接到 SQL Express 后端

转载 作者:行者123 更新时间:2023-12-04 05:35:20 25 4
gpt4 key购买 nike

我有一个 MS Access 2007 前端和 SQL Server Express 后端。 (这最初是从 Access 数据库升级的)。

此数据库已从生产复制并在不同的位置/域中运行到生产服务器。这用于开发。我有两个连接字符串,所以我可以在服务器/数据库之间切换。

我通过 ODBC 连接字符串连接 MS Access 链接表,使用 SQL 身份验证进行连接。

SQL 用户拥有数据库的 dbowner 权限/Access 权限

链接表刷新正常,我可以在前端打开表并修改表中的数据,但是当我尝试打开标准 Access 表单时,大多数表单都直接链接到表,我收到“连接失败... .. 服务器不存在或 Access 被拒绝”。
然后会出现一个带有原始服务器名称的 SQL Server 登录框,而不是表当前连接到的服务器。

这是供您引用的连接字符串:
{ Dim sLocalName As String
将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com