こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

レコードセットを返す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

投稿日時 - 2004-03-18 19:29:31

QNo.809271

すぐに回答ほしいです

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

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

投稿日時 - 2004-03-18 21:31:53

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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

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

投稿日時 - 2004-03-18 22:49:16

お礼

ご回答いただいた方々、おかげで助かりました。また、何かありましたら、よろしくお願いいたします。

投稿日時 - 2004-03-22 18:41:00

ANo.1

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

投稿日時 - 2004-03-18 20:08:43

補足

目的はプロシージャの共有です。

投稿日時 - 2004-03-18 21:12:06

あなたにオススメの質問