• 締切済み

Accessでのデータベースの使用(VBA)

Private Sub 実行_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim StSQL As String Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset strSQL = "INSERT INTO マスタ(コード) VALUES(コード) ;" rs.Open strSQL, cn, , adLockOptimistic '//前のコード(エラーになりました。) ' rs.Close 'cn.Close 'Set rs = Nothing 'Set cn = Nothing Set rs = Nothing: Close Set cn = Nothing: Close Accessを使用したvbaのコードの書き方について教えてほしいです。毎度Access の質問ばかりしてすみません。以下のコードはADOを使用してマスタというテーブルを読み込んで最後にrs.CloseでRecordSetを開放しようとしたのですが「オブジェクトが閉じている場合は、操作は許可されません。」というエラーメッセージが出てしまい原因がわかりませんでした。Openしていて開いているはずなのにエラーが出てしまい、 Set rs = Nothing: Closeに変えたら治りました。何故rs.Closeではエラーが出てしまったのでしょうか。 もう一つお聞きしたいです。 strSQL = "INSERT INTO マスタ(コード) VALUES(コード) ;"でコードという名前を付けたテキストボックスの値をマスタテーブルのコードの列に追加したいのですがテキストボックスの値の取り方が分かりません。(コード.Value)とやってみてもだめでした。どうやったらSQL文でテキストボックスの値をテーブルに追加できるんでしょうか。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

Set rs = Nothing: Close は Set rs = Nothingは判るとして、 Closeは何をしようとしているか判らないのでは。 rs.Close は https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/recordset-close-method-dao https://www.moug.net/tech/acvba/0080024.html 終了は rs.Close Set rs = Nothing     cn.Close Set cn = Nothing の順だと覚えておくこと。 下位にあると思われるオブジェクトから、上位にあるものの順にCLOSEやNothingするとね。 それにClose(は指定レコードセットについて、プログラムの実行だけ行われる)が先、Nothingはメモリから、変数記憶域やオブジェクト・プログラム域がなくなる(無効化する)と、覚えておけば良い。

関連するQ&A