プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (3件)

Get_Recordsで閉じる必要はないと思いますけど


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

>下のGet_Recordsの方のレコードセットをCloseすると上の方のDisp_Dataでオブジェクトが閉じているといって怒られます。


>しかし、閉じないと下の方では開きっぱなしになると思うのですが。。。

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

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

お礼日時:2004/03/22 18:41

そもそもなぜ、functionとして定義する必要があるのでしょうか?


なにか特別な事情がおありですか?

この回答への補足

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

補足日時:2004/03/18 21:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A