初めて質問します。Access2002表現百科850とゆう本を参考にしてADOを使用したソースを書いたのですがレコードセットが「オブジェクトが閉じている場合は、操作は許可されません。」とエラーが表示されます。レコードセットのクローズを削除すればエラーは出ずに処理自体は行われるんですがいまいち意味が理解できず気持ち悪いです。ご存じの方がいましたらご助言いただきたいと思います。ちなみにソースは
'接続
Set cn = CurrentProject.Connection
'SQL削除ステートメントを設定
mySQL = "DELETE FROM T_受入申込印字"
'選択クエリを実行する
rs.Open mySQL, cn, adOpenKeyset, adLockOptimistic
For Each varItem In ctl.ItemsSelected
strWhere = "(受付番号 = '" & ctl.ItemData(varItem) & "')"
'SQL選択ステートメントを設定
mySQL = "INSERT INTO T_受入申込印字 SELECT * FROM MT_受入申込_ WHERE " & strWhere & ""
'選択クエリを実行する
rs.Open mySQL, cn, adOpenKeyset, adLockOptimistic
Next
DoCmd.OpenReport "R_受入企業住所選択ラベル", acPreview '選択表示
'終了処理
rs.Close: Set rs = Nothing←ここでエラー発生
cn.Close: Set cn = Nothing
よろしくお願いします。
ちなみに使用ライブラリーはADO2.1です。
追加です。
'SQL選択ステートメントを設定の部分が入力時に行が変わっていたので変な入力してしまいました。正しくは
mySQL = "INSERT INTO T_受入申込印字 SELECT * FROM MT_受入申込 WHERE " & strWhere & ""
です。よろしくお願いします。
追加
参考にしていた本の題名間違えました。
ACCESS VBA 応用プログラミング でした。
この場合、xxx.close はいりません。Nothing のみでOKです。
DELETE 文も同様です。INSERT や DELETE文は 同時にクローズします。
たとえば、SELECTして 1レコードづつ削除していく場合は Closeがいります。
ココアさん。ありがとうございました。意味がわかってスッキリしました。質問ついでで申し訳ないんですが、今回のような事が解りやすく解説されている(命令の説明とかですね。)本とかココアさんの主観でよいのご存じであれば教えていただけますか。よろしくお願いします。
ツイート | ![]() |