我有一个在数据库启动时运行的代码来运行一些查询并更新一些表。我正在尝试设置连接到链接数据表的外部源的代码,因此我不必每次都输入密码。我一直收到一个奇怪的错误,登录窗口仍然弹出,但信息是预先填充的,当我点击确定我收到另一条错误消息。我在下面显示了代码和错误窗口。
Function MasterRun()
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Set conn = CreateObject("ADODB.Connection")
Dim rs2 As ADODB.Recordset
Dim strConn As String
strConn = strConn & "PROVIDER=SQLOLEDB;"
strConn = strConn & "DATA SOURCE=SOURCE;"
strConn = strConn & "INITIAL CATALOG=DB;"
strConn = strConn & "UID=User;"
strConn = strConn & "PWD=Password;"
conn.ConnectionString = strConn
conn.Open
On Error GoTo MasterRun_Err
DoCmd.SetWarnings False
StartUp
Update
DoCmd.OpenQuery "qry_V_TMS_EMPLOYEE", acViewNormal, acEdit
DoCmd.Save acQuery, "qry_V_TMS_EMPLOYEE"
DoCmd.Close acQuery, "qry_V_TMS_EMPLOYEE"
DoCmd.OpenQuery "qry2013CDMtg", acViewNormal, acEdit
DoCmd.Save acQuery, "qry2013CDMtg"
DoCmd.Close acQuery, "qry2013CDMtg"
DoCmd.OpenQuery "qryUpdateEmpData", acViewNormal, acEdit
DoCmd.OpenForm "frmCDData"
DoCmd.SetWarnings True
MsgBox ("The database has been updated and is ready for use.")
MasterRun_Exit:
Exit Function
MasterRun_Err:
MsgBox Error$
Resume MasterRun_Exit
End Function
以下是弹出的登录窗口。这是在我开始尝试使用此连接代码编写之前弹出的窗口。
我已经重新发布了这个问题的修订版,我想到了建立连接的另一种方法。
答案 0 :(得分:4)
根据错误消息,用户名或密码不正确。这可能是您再次获得此连接对话框的原因。
更改代码以包含正确的用户名和密码。检查错误消息中的State
以了解哪个字段确实存在错误。
请参阅此有用的参考资料:Understanding "login failed" (Error 18456) error messages。
另外,我想要注意您的连接字符串存在冲突:您定义了User ID
和Password
以及SSPI
,但未定义Trusted_Connection
,这与{相同} {1}}。
修改强>
您确定使用您提供的用户名和密码登录吗?正如我已经回答的那样,并且再次由@HansUp提出:错误消息显示了域名,我想这与您在代码中提供的用户名和密码不同(因为您无法使用SQL中的Windows用户名和密码登录而不使用SSPI)。 从连接字符串中删除SSPI!
答案 1 :(得分:2)
您的问题可能涉及多个问题,但第一个跳出来的问题是您想要“所以我不必每次都输入密码”。
但您的代码包括......
conn.Properties("Prompt") = adPromptAlways
该行表示“每次打开连接时都要求我输入用户名和密码”。这与您的意图相反。
删除该行,看看还有其他问题。
作为更一般的建议,请关注直接问题......这是连接尝试失败。所以只关注那个......
Public Sub TestConnection()
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
' you already created the connection object in the line above,
' so CreateObject is not useful:
'Set conn = CreateObject("ADODB.Connection")
Dim strConn As String
strConn = "PROVIDER= ..." ' this is where you need work
' make sure you built the connection string you expected;
' view the output from the next line in the Immediate window ---
' Ctrl+g will take you there
Debug.Print strConn
conn.ConnectionString = strConn
conn.Open
conn.Close
Set conn = Nothing
End Sub
答案 2 :(得分:0)
尝试替换此部分:
strConn = strConn & "PROVIDER=SQLOLEDB;"
strConn = strConn & "DATA SOURCE=SERVER;"
strConn = strConn & "INITIAL CATALOG=DB;"
strConn = strConn & "User ID=ID;"
strConn = strConn & "Password=PASSWORD;"
strConn = strConn & "INTEGRATED SECURITY=sspi;"
strConn = strConn & "Trusted_connection=no;"
conn.ConnectionString = strConn
conn.Properties("Prompt") = adPromptAlways
conn.Open
用这个:
strConn = strConn & "PROVIDER=SQLOLEDB;"
strConn = strConn & "DATA SOURCE=YourActualServer;"
strConn = strConn & "INITIAL CATALOG=YourActualDatabase;"
strConn = strConn & "UID=YourActualUserID;"
strConn = strConn & "PWD=YourActualPassword;"
conn.ConnectionString = strConn
conn.Open