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

标签 ms-access ms-access-2007 sql-server-2008-express

我有 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/

相关文章:

c# - 在 Access 2010 中存储字节 []

vba - 检查Access表中是否已存在数据

class - 使用类模块将可编辑的ADO记录集返回到MS Access Form

ms-access - 输入框问题

c# - 数据库 'master' 中的 CREATE DATABASE 权限被拒绝。存在同名数据库

sql-server - 将 Access 表重新链接到不可用的 SQL Server

function - iif(Iserror())函数仍然返回#error

ms-access-2007 - 无法调整 Access 2007 导航 Pane 的大小

sql-server - Visual Studio 2010 和 SQL Server

database - sql 2008 express连接问题