使用Outlook连接到SQL Server数据库

3
我想使用Outlook宏连接到MS SQL Server数据库。但我不知道代码是否有误或者是否需要添加库/驱动程序,或者出了什么问题,但它不能工作。请帮我检查一下。
Private Sub Application_Startup()
On Error GoTo ExitHere
    'adodb connection to other database
    stg_cn.Open "Provider = SQLOLEDB;" & _
                        "Data Source = 192.168.100.100;" & _
                        "Initial Catalog = hugeDB;" & _
                        "Integrated Security=SSPI;" & _
                        "User ID = oneuser;" & _
                        "Password = onepassword;"

    sQuery = "SELECT * FROM documents where location = 'IE'"

    'set reference to query
    Set cmd = New ADODB.Command
        cmd.ActiveConnection = stg_cn
        cmd.CommandType = adCmdText
        cmd.CommandText = sQuery
    Set rs = cmd.Execute
    Do While Not rs.EOF
        For i = 0 To rs.Fields.count - 1
            MsgBox (i + 1)
        Next
        rs.MoveNext
    Loop
ExitHere:
    If Not stg_cn Is Nothing Then stg_cn.Close
    Set rs = Nothing
    Set stg_cn = Nothing
    Exit Sub

End Sub

1
问题/错误是什么?你没有给我们足够的信息。 - Nick.McDermaid
1
你说的是Outlook宏,但代码以Workbook_Open开头,这是Excel的。如果在Outlook中,该过程应该被称为Application_Startup吗? - Darren Bartrup-Cook
我已经改过了,但还是不起作用...难道是因为我连接数据库的方式不同? - Juan M.
2个回答

8

通过目测,我无法确定出错原因,我认为这可能与您进行ADO操作的方式有关。

但是我将提供我最后编写的连接到SQL Server的宏。希望能对您有所帮助。

Private Sub Workbook_Open()
On Error GoTo ErrorHandler
    '**************************************Initialize Variables**************************************
    sServer = "<SQL SERVER Server>"
    sDBName = "<SQL SERVER DB>"

    '**************************************Open Connection**************************************
    'adodb connection to other database
    stg_cn.Open "Provider=SQLOLEDB;Data Source=" & sServer & _
                  ";Initial Catalog=" & sDBName & _
                  ";Integrated Security=SSPI;"

    sQuery = "SELECT * " & _
             "FROM Table "

    'set reference to query
    Set cmd = New ADODB.Command
        cmd.ActiveConnection = stg_cn
        cmd.CommandType = adCmdText
        cmd.CommandText = sQuery
    Set rs = cmd.Execute
    Do While Not rs.EOF
        For i = 0 To rs.Fields.Count - 1
            <PERFORM OPERATIONS>
        Next
        rs.MoveNext
    Loop

ExitHere:
    If Not stg_cn Is Nothing Then stg_cn.Close
    Set rs = Nothing
    Set stg_cn = Nothing
    Exit Sub

End Sub

1
@CodePhobia 提供的连接字符串应该适用于您。
以下内容仅包括用户ID和密码功能,因为您最初的问题显示尝试使用此功能进行连接。
Dim rsConn as ADODB.Connection
Set rsConn = New ADODB.Connection
With rsConn
    .ConnectionString = "Provider = sqloledb;" & _
                        "Data Source = myServerName;" & _
                        "Initial Catalog = myCatalog;" & _
                        "Integrated Security=SSPI;" & _
                        "User ID = myUserID;" & _
                        "Password = myPassword;"
    .Open
End With

你可以使用 这个网站 来查找连接字符串。它应该涵盖您希望建立的所有可能连接。

数据库无法连接。我非常确定IP、表、用户名和密码都是正确的。<code> Conn.connectionString = "Provider = sqloledb;" & _ "Data Source = hugeDB;" & _ "Integrated Security=SSPI;" & _ "User ID = hdbmread;" & _ "Password = hdbmreadonly;" Conn.Open Set Rst.ActiveConnection = Conn Rst.Open "select COUNT(*) from Nav n" & _ "group by n.Nav_Date" rs.Close Set rs = Nothing CN.Close Set CN = Nothing End Sub <code> - Juan M.
你的连接字符串中是否包含了 "Initial Catalog = myCatalog;" & _?这是你想要连接的数据库中的目录。 - luke_t
Conn.connectionString = "Provider=sqloledb;" & _ "Data Source=192.168.100.100;" & _ "Initial Catalog=" & hugeDB & _ "Integrated Security=SSPI;" & _ "User ID=hdbmread;" & _ "Password=hdbmreadread;" 仍然是同样的问题。它无法从Outlook连接,但我可以通过Microsoft SQL Server Management Studio进行连接,因此不是权限问题... 我在这里被阻止了,这应该很容易解决。 - Juan M.
“数据源”应该是服务器名称;你的服务器名称是IP地址吗? - luke_t
在我的宏中,我有服务器名称。这里我添加了IP,只是因为我不想使用公司内部使用的相同名称。但是,是的,我正在使用服务器名称。 - Juan M.
明白了。好的,如果提供的所有细节都正确,那么应该可以连接到服务器。但是如果没有看到实际细节并且不知道您要连接的服务器,恐怕我无法提供更多建议。 - luke_t

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接