VB6 ストアドの結果が複数レコードセットの取得方法

ADO.NETなら、データセットを使って簡単に、ストアドからの複数のレコードセットの戻りを操作できるが、VB6.0となると前方への移動しかない(と思う)でちょっと面倒です。

ストアドプロシージャ

create proc sp_MultiRS as

select CategoryID as カテゴリID, CategoryName as カテゴリ from Categories

select * from Region

ストアド内のSQLを実行したところ
ストアドの結果と同じです。Microsoft SQLServer Management StudioでSQL文を反転させ、F5(実行)するとその部分だけ実行されます。

VisualBasic6.0でのコード

Private Sub Command2_Click()
    Dim Conn1 As ADODB.Connection
    Set Conn1 = New ADODB.Connection
    Dim Rs1 As ADODB.Recordset
    Set Rs1 = New ADODB.Recordset
    Dim RSField As ADODB.Field

    Debug.Print "----Starting-----"

    Conn1.Open "File Name=C:\project\test1\test1.udl"    'フルパス指定
    Rs1.Open "sp_MultiRS", Conn1

    'レコードセットのループ
    Do Until Rs1 Is Nothing
       Debug.Print "The Recordset State is " & Rs1.State

        'レコードのループ
       Do While Not Rs1.EOF
          Debug.Print "Next Record:"

          'フィールドのループ
          For Each RSField In Rs1.Fields
                Debug.Print "    " & RSField.Name & ":" & Rs1(RSField.Name)
          Next RSField

          Rs1.MoveNext  '次のレコードを取得
       Loop

        '次のレコードセットへ移動 Set すること
        Set Rs1 = Rs1.NextRecordset

        If Not Rs1 Is Nothing Then
            Debug.Print "***** NEXT RECORDSET *****"
        Else
            Debug.Print "***** THE END *****"
        End If
    Loop

    Unload Me   'Quit the application.

End Sub

実行結果

----Starting-----
The Recordset State is 1
Next Record:
    カテゴリID:1
    カテゴリ:Beverages
Next Record:
    カテゴリID:2
    カテゴリ:Condiments
Next Record:
    カテゴリID:3
    カテゴリ:Confections
Next Record:
    カテゴリID:4
    カテゴリ:Dairy Products
Next Record:
    カテゴリID:5
    カテゴリ:Grains/Cereals
Next Record:
    カテゴリID:6
    カテゴリ:Meat/Poultry
Next Record:
    カテゴリID:7
    カテゴリ:Produce
Next Record:
    カテゴリID:8
    カテゴリ:Seafood
***** NEXT RECORDSET *****
The Recordset State is 1
Next Record:
    RegionID:1
    RegionDescription:Eastern
Next Record:
    RegionID:2
    RegionDescription:Western
Next Record:
    RegionID:3
    RegionDescription:Northern
Next Record:
    RegionID:4
    RegionDescription:Southern
***** THE END *****

MS参考サイト
列の名前と値を持つ複数のレコードセットを返す