- ベストアンサー
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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Get_Recordsで閉じる必要はないと思いますけど ##私は引数でADODB.Recordsetを渡している関数を作っていますが、問題ないですね。 ##もちろんレコードセットを閉じる為の関数も作ってますけどね。
その他の回答 (2)
- tsukasa-12r
- ベストアンサー率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 するのが正解です。
- bin-chan
- ベストアンサー率33% (1403/4213)
そもそもなぜ、functionとして定義する必要があるのでしょうか? なにか特別な事情がおありですか?
補足
目的はプロシージャの共有です。
お礼
ご回答いただいた方々、おかげで助かりました。また、何かありましたら、よろしくお願いいたします。