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)を呼び出した場合、私はそれが実行されている伝えることができます。私は接続を開いて閉じても問題ありません。しかし、それはいくつかの行のセットを返す必要があり、私はそれを表示する必要があります。私はそれらをスプレッドシートのどこにでも書きたいとは思わない - メッセージボックスに表示するだけでよい。
あなたはそれがGETROWSを呼び出した直後の行にブレークポイントを置いた場合に、どのように多くのレコードがありますか? – braX
それはそれほど遠くはありません。しかし、上記の行から 'Recordset ='を削除しても、それを試してみます。 – thursdaysgeek
レコードセット=行にブレークポイントを設定して、sSQLStatement変数の内容を教えてください(デバッグウィンドウに出力できます) – braX