Dim Cn As ADODB.Connection
Dim rst As New ADODB.Recordset
1.ストアドからレコードセットを取得して返す
Sub Test1(ByRef rst As ADODB.Recordset)
Cn.stTest1 rst ‘ストアド実行
End Sub
2.ストアドからレコードセットを取得して返す(パラメーターあり)
Sub Test2(a1 AS Long, Date1 As Date, Str1 As String, ByRef rst As ADODB.Recordset)
Dim cmd As ADODB.Command
Dim par0 As ADODB.Parameter, par1 As ADODB.Parameter, par2 As ADODB.Parameter
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = Cn
cmd.CommandText = “stTest2”
cmd.CommandType = adCmdStoredProc
cmd.CommandTimeout = 30 ‘タイムアウト時間
‘パラメーター設定
Set par0 = cmd.CreateParameter(“@a1”, adInteger, adParamInput) ‘int
cmd.Parameters.Append par0
par0.Value = a1
Set par1 = cmd.CreateParameter(“@Date1”, adDBDate, adParamInput) ‘datetime
cmd.Parameters.Append par1
par1.Value = Date1
Set par2 = cmd.CreateParameter(“@Str1”, adVarWChar, adParamInput, 50) ‘nvarchar(50)
cmd.Parameters.Append par2
par2.Value = Str1
‘実行
rst.Open cmd, , adOpenForwardOnly, adLockReadOnly
Set cmd = Nothing
End Sub
3.シートへの貼付
レコードセットの内容をそのままシートに貼り付けるにはCopyFromRecordsetメソッド
Sheet1.Cells(1, 1).CopyFromRecordset rst
普通は↑のようにそのまま貼り付けても役に立たないので配列に加工してから貼付
Dim DataArray() As Variant ‘2次元配列にする
‘レコードセットを配列に代入して加工するコード
・・・
‘配列をシートに貼付
Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(UBound(DataArray, 1) + 1, UBound(DataArray, 2) + 1)).Value = DataArray
注意: VBAではレコードセットをReadOnlyで開いてもなぜかロックがかかってしまうことがあるので,レコードセットはできるだけ早く閉じた方がいい.

