我正在使用 SQL Server 2008 R2 和 MS Access 2010。我有一个带有链接表的 .accdb 并使用登录名和密码而不是 Windows 身份验证,因为我们有几个远程用户。使用 SSMS 或我的 Access .adp 项目使用此登录名和密码没有问题。
我已经使用 Doug Steele 网站http://www.accessmvp.com/djsteele/DSNLessLinks.html的代码成功地为我的表创建了 DSN-less 连接, 但是我无法从 MS Office 博客http 中创建缓存连接: //blogs.office.com/2011/04/08/power-tip-improve-the-security-of-database-connections/。
我继续收到以下错误:
Connection Failed: SQLState ;28000', Server Error 18452,
The login is from an untrusted domain and cannot
be used with Windows authentication.
这是代码尝试将测试查询传递给 SQL 的地方:
Set rst = dbCurrent.OpenRecordset(strTable, dbOpenSnapshot)
然后,当我单击“确定”时,我得到了Use trusted connection
选中的 SQL Server 登录屏幕(我不想要)和一个自动填充的登录 ID,它不是我通过代码提供的 ID。
所以,第一,为什么 Access/SQL 在我不想要的时候不断尝试使用 Windows 身份验证进行连接。有没有办法指定不? Trusted_Connection = NO
似乎不起作用。
其次(不太重要,但很好奇),登录 ID 是自动填充的,但不是我在代码中用于登录的 ID。为什么 SQL Server 选择不同的登录 ID?
注意:
如果我取消选中Use trusted connection
并填写正确的登录名和密码(VBA 代码正确接收 - 我检查debug.print
了用于检查我的连接字符串),则缓存连接有效。因此我也知道我的连接字符串在代码中是正确的。
我已经仔细检查了,我的 SQL Server 设置为“混合模式”以允许登录名和密码。(每个帖子 MS SQL Server (2008 R2) 错误 18452 与 Access 2010)
我确实安装了“本机客户端”(根据帖子“我如何设置和 ADODB 连接到 SQL Server 2008 inf Microsoft Access 2010)
我的代码:
Dim dbCurrent As DAO.Database
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset
Dim strConnection As String
Dim strTable As String
strTable = "one of my linked tables"
strConnection = "ODBC;DRIVER={sql Server};" & _
"DATABASE=MyDatabase;" & _
"SERVER=MyServer;"
Set dbCurrent = DBEngine.Workspaces(0).Databases(0)
Set qdf = dbCurrent.CreateQueryDef("")
With qdf
.Connect = strConnection & _
"UID=" & strUserName & ";" & _
"PWD=" & strPassword
.SQL = "Select Current_User ();"
Set rst = dbCurrent.OpenRecordset(strTable, dbOpenSnapshot)
End Wit
InitConnect = True