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 件のコメント:
コメントを投稿