レコードセットやコネクッションを・・・


 2005-06-24 10:53:56  No: 123008  IP: [192.*.*.*]

フォームが閉じた際にcnが開いてません、などとエラーがでます。
できればif文でcnがcloseしてなかったらcloseするみたいなif文
がかければよいと思っています。ですがcnの今の状態がわかるような
言葉がみつかりません。

編集 削除
ぶぶ  2005-06-24 11:15:40  No: 123009  IP: [192.*.*.*]

開発環境を教えてください。

編集 削除
ささ  2005-06-24 11:22:13  No: 123010  IP: [192.*.*.*]

感想文みたいな書き方だな・・・。
recordstで過去ログは検索した?

編集 削除
 2005-06-24 11:39:04  No: 123011  IP: [192.*.*.*]

開発環境は、VB6 Personal です。

編集 削除
たくみ  2005-06-24 19:23:20  No: 123012  IP: [192.*.*.*]

> cnの今の状態がわかるような言葉がみつかりません。

いえ、普通に見つかるはずなんですけど。
こんな感じですかねえ。
(まんまコードで、ちょっと大甘かな?みなさん怒んないで!)

'CnというADOコネクションが既にあると仮定・・
    If Not (Cn Is Nothing) Then
        If Cn.State <> adStateClosed Then
            Cn.Close
        End If
        
  Set Cn = Nothing
    End If

こんなのをFunctionとかSubにしてそのフォームに実装すれば
いいと思います。

・・でもこの件の本当の問題はフォームが閉じる以前に
なんでコネクションを(いらなくなってしまった時点で)クローズ
する処理をしてないの?ってことなんではと。。

編集 削除
もげ  2005-06-24 21:56:49  No: 123013  IP: [192.*.*.*]

フォームのLoad時にOpen、
フォームのUnload時にClose&Nothing
で統一して、フォーム内でひとつのConnectionを使いまわしたほうが、
シンプルかつ、パフォーマンスがよくて、
複数Connectionでの処理の競合の心配が少なくて、
今回みたいなCloseし忘れの心配も少ないかも(経験則)。
途中でCloseしなければならない理由が特になければですが。
あとは、
Dim cn As New ADODB.Connection
みたいな暗黙の初期化が行われるコーディングをしてしまうと、
開いてもいないConnectionをUnload時にCloseしにいってエラーになる
という心配もありますね。
そういう場合は、
Dim cn As ADODB.Connection
として、使うときに明示的に、
Set cn = New ADODB.Connection
としてやれば、上記のような問題が回避できるかと。

編集 削除