• ベストアンサー
  • すぐに回答を!

ADOでレコードを閉じるタイミング。。Access2000/VB6/Win2K

  • 質問No.809271
  • 閲覧数431
  • ありがとう数1
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 43% (32/73)

レコードセットを返すFuncitonプロシージャーを作ってみたのですが。。。

下のGet_Recordsの方のレコードセットをCloseすると上の方のDisp_Dataでオブ
ジェクトが閉じているといって怒られます。しかし、閉じないと下の方では開きっ
ぱなしになると思うのですが。。。どのように処理すればいいのでしょうか?



Public P_CN As ADODB.Connection

Private Sub Disp_Date()
  Dim RS As ADODB.Recordset
  Dim SQL AS String

   Set RS = Get_Records(SQL)

    With RS
     If .RecordCount > 0 Then
      .MoveLast: .MoveFirst
      .Debug.Print !顧客_ID
       End If
     End With

     RS.Close
    Set RS = Nothing
End Sub



Public Function Get_Records(pSQL As String) As ADODB.Recordset
  Dim RS As ADODB.Recordset

    Set RS = New ADODB.Recordset

     RS.Open pSQL, P_CN, adOpenKeyset, adLockOptimistic

    Set Get_Records = RS

'''    RS.Close
'''   Set RS = Nothing
End Function

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 45% (207/457)

Get_Recordsで閉じる必要はないと思いますけど
##私は引数でADODB.Recordsetを渡している関数を作っていますが、問題ないですね。
##もちろんレコードセットを閉じる為の関数も作ってますけどね。

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 65% (358/549)

>下のGet_Recordsの方のレコードセットをCloseすると上の方のDisp_Dataでオブジェクトが閉じているといって怒られます。
>しかし、閉じないと下の方では開きっぱなしになると思うのですが。。。

Function や Sub の引数で ByVal と ByRef というのがありますよね。Get_Records の戻り値も ByRef と同じようなものと考えるとわかりやすいと思います。Get_Records の中でオープンしたレコードセットと Disp_Date に返ってきたレコードセットは同一のものです。なので、Get_Records の中では Close せずに、呼び出し側 ( Disp_Date ) で Close するのが正解です。
お礼コメント
abcxyz3000

お礼率 43% (32/73)

ご回答いただいた方々、おかげで助かりました。また、何かありましたら、よろしくお願いいたします。
投稿日時:2004/03/22 18:41
  • 回答No.1

ベストアンサー率 33% (1403/4213)

そもそもなぜ、functionとして定義する必要があるのでしょうか?
なにか特別な事情がおありですか?
補足コメント
abcxyz3000

お礼率 43% (32/73)

目的はプロシージャの共有です。
投稿日時:2004/03/18 21:12
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ