通过VBA代码问题连接到SQL

时间:2014-03-20 15:22:13

标签: sql-server vba ms-access access-vba

我有一个在数据库启动时运行的代码来运行一些查询并更新一些表。我正在尝试设置连接到链接数据表的外部源的代码,因此我不必每次都输入密码。我一直收到一个奇怪的错误,登录窗口仍然弹出,但信息是预先填充的,当我点击确定我收到另一条错误消息。我在下面显示了代码和错误窗口。

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

以下是弹出的登录窗口。这是在我开始尝试使用此连接代码编写之前弹出的窗口。

enter image description here

修改

我已经重新发布了这个问题的修订版,我想到了建立连接的另一种方法。

https://stackoverflow.com/q/22540898/2144390

3 个答案:

答案 0 :(得分:4)

根据错误消息,用户名或密码不正确。这可能是您再次获得此连接对话框的原因。

更改代码以包含正确的用户名和密码。检查错误消息中的State以了解哪个字段确实存在错误。

请参阅此有用的参考资料:Understanding "login failed" (Error 18456) error messages

另外,我想要注意您的连接字符串存在冲突:您定义了User IDPassword以及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