我有一个 MS Access 2007 前端和 SQL Server Express 后端。(这最初是从访问数据库中扩大的)。
此数据库已从生产复制并在与生产服务器不同的位置/域中运行。这用于开发。我有两个连接字符串,所以我可以在服务器/数据库之间切换。
我通过 ODBC 连接字符串连接 MS Access 链接表,使用 SQL 身份验证进行连接。
SQL 用户拥有对数据库的 dbowner 权限/访问权限
链接表刷新正常,我可以在前端打开表并修改表中的数据,但是当我尝试打开标准 Access 表单时,大部分都直接链接到表,我得到“连接失败... .. 服务器不存在或访问被拒绝”。然后会出现一个带有原始服务器名称的 SQL Server 登录框,而不是表当前连接到的服务器。
这是供您参考的连接字符串: { 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=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
还是我只是更改每个表单查询等......
帮助这让我发疯。
谢谢
罗杰