2015年12月26日土曜日

Connection を閉じて、Recordset を使う

ADOについて、Connection を閉じて、Recordset を使う方法。
データベース接続を速やかに切断することで、データベースの負荷を軽減できる。

マイクロソフトの「ADO プログラマーズ リファレンス」のCloseメソッドの説明によると、

◆Close により関連する全てのシステムリソースが解放される。
◆オブジェクトはメモリからは削除されず、プロパティ設定を変更してもう一度開くことができる。
◆メモリからオブジェクトを完全に削除するには、オブジェクト変数を Nothing に設定する。

とのこと。


Sub TestUnconnectedRs()

    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    cn.Open connectionString

    ' ↓ここがポイント(1)
    rs.CursorLocation = adUseClient

    rs.Open sqlString, cn, adOpenKeyset, adLockOptimistic

    ' ↓ここがポイント(2)
    Set rs.ActiveConnection = Nothing
    ' ※cn.Close ではエラーとなる。rsもCloseされてしまう。
    ' ※Set cn = Nothing はOK。

    Do Until rs.EOF
        Debug.Print rs.Fields(0).Value
        rs.MoveNext
    Loop
    rs.Close

End Sub


ポイント(1) CursorLocation に 'adUseClient' を設定しないとエラーとなる。
ポイント(2) cn.Close では「関連する全てのシステムリソースが解放される」ので、実行と同時に rs も Close されてしまい、エラーとなる。Nothing の場合、cn だけが閉じられ、rs はメモリ上に残る。cn を再び使う場合は、Newする必要がある。




0 件のコメント: