2017-06-13 9 views
0

ExcelにVBAサブがあります。 SQL Serverプロシージャを呼び出し、呼び出し結果をメッセージボックスに表示する必要があります。 (主に他の人のコードを維持しているので、そうでなければ私はExcelを使用しません)ExcelでSQL Serverプロシージャコールの結果を表示メッセージボックス

プロシージャを呼び出すためのSQL文を作成します。私は接続を開くサブシステムを持っています。しかし、私はまだそのプロシージャコールの結果を表示する過程で何かが不足しています。ここで

は、私がこれまで持っているものです。

Dim Today As Date 
Dim result As Date 
Dim sSQLStatement As String 
Dim strDate As String 
Dim Recordset As ADODB.Recordset 

Today = DateTime.Now() 

result = DateSerial(Year(Today), Month(Today) - 1, 1) 
strDate = Year(result) & "-" & Format(Month(result), "00") & "-" & Format(Day(result), "00") 

DBOpen 

sSQLStatement = "set nocount on; EXEC [MySchema].[dbo].[MyProcedure] @END_DATE = N'" & strDate & "'" 

MsgBox sSQLStatement 

Dim i As Long 
Dim Ary 
Dim strMsg As String 

Set Recordset = New ADODB.Recordset 
With Recordset 
    .ActiveConnection = cnPubs 'this is defined elsewhere, used in the DBOpen call, and works 

    'I can call the execute and it works, but it fails here when I try to assign the results to the recordset 
    Recordset = cnPubs.Execute(sSQLStatement) 

    'I found this online and don't know yet if it works. I have to get past the statement above first. 
    If Not Recordset.EOF Then 
      Ary = Recordset.GetRows 
      For i = 0 To UBound(Ary, 2) 
       If i = 0 Then 
        strMsg = Ary(0, i) 
       Else 
        strMsg = strMsg & ", " & Ary(0, i) 
       End If 
      Next i 
      MsgBox strMsg, , UBound(Ary, 2) + 1 & " records" 
    End If 
    .Close 
End With 

DBClose 

だから私は、それ自体でcnPubs.Execute(sSQLStatement)を呼び出した場合、私はそれが実行されている伝えることができます。私は接続を開いて閉じても問題ありません。しかし、それはいくつかの行のセットを返す必要があり、私はそれを表示する必要があります。私はそれらをスプレッドシートのどこにでも書きたいとは思わない - メッセージボックスに表示するだけでよい。

+0

あなたはそれがGETROWSを呼び出した直後の行にブレークポイントを置いた場合に、どのように多くのレコードがありますか? – braX

+0

それはそれほど遠くはありません。しかし、上記の行から 'Recordset ='を削除しても、それを試してみます。 – thursdaysgeek

+0

レコードセット=行にブレークポイントを設定して、sSQLStatement変数の内容を教えてください(デバッグウィンドウに出力できます) – braX

答えて

3

変更

Recordset = cnPubs.Execute(sSQLStatement) 

recordset.open sSQLStatement, cnPubs 
+0

ありがとう、ありがとう!私は今、私が持っているものよりも良い出力をフォーマットする必要がありますが、今は出力があるので簡単です。 – thursdaysgeek

関連する問題