質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

15971閲覧

EXCEL VBA でのレコードセットのCloseの挙動について

occhy

総合スコア16

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/05/05 12:22

EXCELVBAで後述のコードを実行したところ、

 実効時エラー'3709':
この操作を実行するために接続を使用できません。
このコンテキストで閉じているかあるいは無効です。

というエラーになりました。
closeはレコードセットを閉じるだけで、レコードセットの中身は残り、
openでまた開けると思ったのですが、その理解は間違いでしょうか。

レコードセットは使うときだけ開いて使ったら閉じるのが
基本だと思っていたので、この挙動は不便です。
closeしてもまたopenできるようにはならないものでしょうか。

==試したコード==
Sub test1()

Dim a

Set a = New ADODB.Recordset

a.Fields.Append "F1", adSingle

a.Open
a.AddNew
a!F1 = 1.1
a.Update
a.Close

a.Open ←ここでエラー

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seastar3

2021/05/05 13:27

改めて、 Set a = New ADODB.Recordset a.Open 接続パラメータ とADOオブジェクトをインスタンス化してためしてみてはどうでしょうか。
occhy

2021/05/05 13:45

改めてSet a = New ADODB.Recordsetするのは、a!F1 = 1.1でセットした値が消えるので、ダメでした。 aの中身を温存したままcloseという方向性がまずいのかと悩んでいます。
guest

回答2

0

ベストアンサー

メモリ上でレコードセットを生成して操作したいという案件でしょうか。

ADODB.RECORDSETを使った非接続型、オンメモリの仮想テーブルの作成方法 · GitHub

closeはレコードセットを閉じるだけで、レコードセットの中身は残り、

openでまた開けると思ったのですが、その理解は間違いでしょうか。

メモリ上からレコードセット自体が破棄されます。当然中身も消えます。

レコードセットは使うときだけ開いて使ったら閉じるのが

基本だと思っていたので、この挙動は不便です。

オンメモリではなく実際のテーブルと接続しているレコードセットなら、長時間開いたままにしておくと、共有している場合、他のユーザーが使えないので、それは基本です。
その場合は、その都度SQLなどを指定して開きなおします。(テーブルデータを再度読み込む)

オンメモリ、または共有していないスタンドアローンの場合は、いちいち閉じる必要はないです。
特にオンメモリの場合はCloseしたらデータも破棄されます。

投稿2021/05/06 04:19

編集2021/05/06 05:48
hatena19

総合スコア34360

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

occhy

2021/05/06 12:24

GitHubの記事を拝見しました。 rs.Filterというメソッドは初めて知りました。これをつかえば直近の課題が解決できます。 オンメモリという言葉を知らなかったのでもやもやしていましたが、オンメモリという言葉を知ったことでだいぶ霧が晴れてきました。 ありがとうございました。助かります。
guest

0

VBA

1a.flash 2a.close 3 4Set a = New ADODB.Recordset 5a.Open 接続パラメータ

aを再インスタンス化すると進むのであれば、flashメソッドを経れば、反映されると思います。

投稿2021/05/05 13:55

seastar3

総合スコア2287

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問