Excel VBA + ADO ストアドからレコードセット取得,シートへ貼付

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で開いてもなぜかロックがかかってしまうことがあるので,レコードセットはできるだけ早く閉じた方がいい.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です