• ベストアンサー

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

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

  • ベストアンサー
  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.2

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

その他の回答 (2)

回答No.3

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

abcxyz3000
質問者

お礼

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

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

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

abcxyz3000
質問者

補足

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

関連するQ&A