【问题标题】:Outlook, VBA macro, Connection string to SQL Server ExpressOutlook、VBA 宏、到 SQL Server Express 的连接字符串
【发布时间】:2021-07-10 22:50:15
【问题描述】:

我是通过 Outlook 接触 VBA 的新手,所以...

我使用 Outlook 2016 和 SQL Server 2017,并尝试通过 ADODB 将宏连接到 SQL Server Express 2017。

这是我的代码

    On Error GoTo ErrorHandler
    
    Dim cnnStr As String
    
    cnnStr = "Provider=SQLOLEDB;" & _
             "Server=ALTROISIEME\SQLEXPRESS;" & _
             "Initial Catalog=XX_Options;" & _
             "Trusted_Connection=SSPI;" & _
             "uid=xxxx;" & _
             "pwd=xxxxxx;"
    
    'GoTo Fin_99
    
    Dim cnn As New ADODB.Connection
    cnn.CommandTimeout = 900
    cnn.ConnectionString = cnnStr
    cnn.Open
    
    GoTo Fin_99
    
    Dim cmd As ADODB.Command
    Set cmd.ActiveConnection = cnn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "USP_Outlook_Add_File_Data"
    cmd.Parameters.Append cmd.CreateParameter("@Categorie", adVarWChar, adParamInput, , "IB_DailyTrade")
    cmd.Parameters.Append cmd.CreateParameter("@NomDuFichier", adVarWChar, adParamInput, , FileNameExt)
    cmd.Parameters.Append cmd.CreateParameter("@Donnee", adVarWChar, adParamInput, , HTMLTxt)
    
    Dim rst As New ADODB.Recordset
    rst.CursorType = adOpenStatic
    rst.CursorLocation = adUseClient
    rst.LockType = adLockOptimistic
    rst.Open cmd
    
    Set rst = cmd.Execute

ExitNewItem:
    GoTo Fin_99
ErrorHandler:
    MsgBox Err.Number & " - " & Err.Description
    Resume ExitNewItem

Fin_99:

On Error GoTo CloseRst
    cnn.Close
    Set cnn = Nothing

CloseRst:
    rst.Close
    Set rst = Nothing

宏在线抛出错误

Set cmd.ActiveConnection = Cnn 

带有消息。

91-变量对象或块变量未定义

你能帮忙吗?

谢谢 安德烈

【问题讨论】:

  • 我使用的版本,我在评论中放了“Goto Fin_99”。
  • 我只是想出了我的错误,我应该在下面的 Dim cnn 之后添加一个 SET 指令作为 New ADODB.connection Set cnn = new ADODB.Connection
  • 如果您已经解决了问题所涉及的第一个问题,您可能应该使用您看到的新错误详细信息对其进行更新
  • 需要快速注意的一件事(这可能是您的问题) - 我认为不需要在参数名称中包含 @ 符号。因此,在您的示例中,它只是“Categorie”、“NomDuFichier”、“Donnee”
  • USP_Outlook_Add_File_Data 是否返回一组结果?如果否,则此处不需要记录集。

标签: sql-server vba outlook connection-string adodb


【解决方案1】:

我发现了我所有的问题。代码离我最初的帖子不远:

    On Error GoTo ErrorHandler
    
    Dim cnnStr As String
    
    cnnStr = "Provider=SQLOLEDB;" & _
             "Server=?????????\SQLEXPRESS;" & _
             "Initial Catalog=???????;" & _
             "Trusted_Connection=SSPI;" & _
             "uid=???;" & _
             "pwd=???;"
      
    Dim cnn As New ADODB.Connection
    Set cnn = New ADODB.Connection
    cnn.CommandTimeout = 900
    cnn.ConnectionString = cnnStr
    cnn.Open
    
    Dim cmd As ADODB.Command
    Set cmd = New ADODB.Command
    cmd.ActiveConnection = cnn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "USP_Outlook_Add_File_Data"
    cmd.Parameters.Append cmd.CreateParameter("@Categorie", adVarWChar, adParamInput, 50, "IB_DailyTrade")
    cmd.Parameters.Append cmd.CreateParameter("@NomDuFichier", adLongVarWChar, adParamInput, -1, FileNameExt)
    cmd.Parameters.Append cmd.CreateParameter("@Donnee", adLongVarWChar, adParamInput, -1, HTMLTxt)
    
    Dim rst As New ADODB.Recordset
    Set rst = New ADODB.Recordset
    rst.CursorType = adOpenStatic
    rst.CursorLocation = adUseClient
    rst.LockType = adLockOptimistic
    rst.Open cmd
    
    Set rst = cmd.Execute

ExitNewItem:
    GoTo Fin_99
ErrorHandler:
    MsgBox Err.Number & " - " & Err.Description
    Resume ExitNewItem

Fin_99:

    If cnn.State = 1 Then
       cnn.Close
       Set cnn = Nothing
    End If
    
    If rst.State = 1 Then
       rst.Close
       Set rst = Nothing
    End If

【讨论】:

    猜你喜欢
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多