クラシック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