小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


ADODB.Recordsetのcloseメソッドでエラーが発生する場合の対処法

クラシックASPで、データベースを操作する際にはADODB.Recordsetを使うことができる。このADODB.Recordsetオブジェクトには、オープンしたレコードセットをクローズするためのcloseメソッドがあるが、このcloseを呼び出す場合にケースによって、エラーすることがある。

検証コード
Set connect = Server.CreateObject("ADODB.Connection")
connect.Open "DB接続文字列"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SQL", connect

rs.Close
Set rs = Nothing
結果

SQL結果
SELECT 〜OK
INSERT〜エラー
UPDATE〜エラー
DELETE〜エラー

SELECT文でレコードを検索するような処理の場合は、rs.closeを実行してもエラーにはならない。しかし、INSERTやUPDATEの場合には、ADODB.Recordset (0x800A0E78) オブジェクトが閉じている場合は、操作は許可されません。というエラーが発生した。上記の結果から、closeメソッドを呼び出すのは、SELECT文が実行される場合だけで良いということになる。

INSERTやUPDATEはそもそもOpenメソッドで実行するものではないらしい。というよりは、実行した結果を参照する必要がないのなら、Executeを使うのが良い。

Recordset オブジェクトは、カーソルを持つ結果すなわち SELECT クエリを受け取るためのものです。
INSERT/DELETE/UPDATE/CREATE/ALTER などを使うときは、Execute メソッドを利用してください。
http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200610/06100051.txt