私は SQL Server 2008 R2 と MS Access 2010 を使用しています。リンク テーブルを含む .accdb があり、リモート ユーザーが複数いるため、Windows 認証の代わりにログインとパスワードを使用しています。SSMS または Access .adp プロジェクトを使用して、このログインとパスワードを問題なく使用できます。
Doug Steele のサイトhttp://www.accessmvp.com/djsteele/DSNLessLinks.htmlのコードを使用してテーブルの DSN レス接続を正常に作成しましたが 、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)
そして、[OK] をクリックすると、SQL Server ログイン画面が表示されUse trusted connection
ます (これは望ましくありません) がチェックされ、コードで指定した ID ではないログイン ID が自動入力されます。
まず、Access/SQL が Windows 認証を使用して接続を試みたくないのに、継続的に接続しようとするのはなぜですか。NOT to を指定する方法はありますか? Trusted_Connection = NO
動作しないようです。
第 2 に (それほど重要ではありませんが、好奇心旺盛です)、ログイン ID は自動入力されますが、私のコードではログイン用に持っているものではありません。SQL Server が別のログイン ID を取得するのはなぜですか?
注:Use trusted connection
正しいログインとパスワードのチェックを外して入力すると (VBA コードは正しく受け取っています - 接続文字列をチェックするために使用
してチェックしdebug.print
ました)、キャッシュされた接続が機能します。したがって、接続文字列がコード内で正しいこともわかっています。
再確認したところ、ログインとパスワードを許可するために SQL Server が「混合モード」に設定されています。(MS SQL Server (2008 R2) Access 2010 でのエラー 18452 による)
「Native Client」がインストールされています (投稿「Microsoft Access 2010 で SQL Server 2008 へのセットアップと ADODB 接続を行う方法」に従って)
私のコード:
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