0

対話したい既存のサードパーティアプリケーション(SQL 2005)にストアドプロシージャがあります。

これは、次のように、挿入ステートメントとそれに続く選択ステートメントです。

  
    @CustomerId = Cast(SCOPE_IDENTITY()As [int])を設定します

    @CustomerIdを選択します

VB6を使用して、@ CustomerIDの値にアクセスするにはどうすればよいですか?

set rs = cmd.Execute 

期待どおりに結果セットを返していません...

[編集]

rs.Fields.Countは0です。

rs(0).Valueのように、結果のレコードセットにアクセスしようとすると、単に「アイテムが見つかりません...」というエラーが発生します。

4

1 に答える 1

3

ストアド プロシージャが複数のレコードセットを返していると思います。

この場合、NextRecordset()メソッドを使用してそれらを反復処理できます。

MSDN:

  • 行を返すコマンドが正常に実行されてもレコードが返されない場合、返された Recordset オブジェクトは開いていますが空です。BOF プロパティと EOF プロパティが両方とも True であることを確認して、このケースをテストします。
  • 行を返さないコマンドが正常に実行された場合、返された Recordset オブジェクトは閉じられます。これは、Recordset の State プロパティをテストすることで確認できます。
  • 結果がなくなると、レコードセットは Nothing に設定されます。

これは、問題を解決するために次のようなことを提案することを意味します。

Set rs = cmd.Execute

''# fetch the first value of the last recordset
Do Until rs Is Nothing
  If rs.State = adStateOpen Then
    If Not (rs.BOF And rs.EOF) Then
      ''# You can do a different sanity check here, or none at all
      If rs.Fields(0).Type = adInteger Then
        CustomerId = rs.Fields(0).Value
      End If
    End If
  End If
  Set rs = rs.NextRecordSet
Loop

MsgBox CustomerId
于 2009-05-11T06:29:21.203 に答える