• 締切済み

EXCEL-VBAにてADOのレコードセットを使用している際のメモリの開放について

いつもお世話になっております。 インターネットやテキストで調べてもわからず、 似たような質問が無いものかとこちらのほうでも検索したのですが、見当たらなかったため新たに質問させていただきます。 現在、エクセルVBAにてADOを使用し、ワークシートをテーブルに見立てて、SQLを発行しているのですが、その際に生成するレコードセットの開放が確認できず困っています。 もちろんclose及びnothingは行っています。 タスクマネージャーを確認しながら、当該のステップが実行された時点で、メモリが開放されるか見ていても、物理メモリの利用可能サイズは微動だにしません。レコードセットが生成された時点のままです。 どなたか、思い当たることがございましたら、回答いただけませんでしょうか?よろしくお願いいたします。 補足:WindowsXP、EXCEL XP、メモリ256、といった環境です。    発行しているSQLはそれほどややこしくはありません。

みんなの回答

  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.2

ADOのみならず、 どんなコンポーネントでも VBから起動すれば、 メモリを開放してくれません。 バグなのか、そういう仕様なのかは 当局は一切感知しておりません。 As New 宣言した場合は 起動時からメモリを消費しますし、 CreateObject時には 呼び出した瞬間から メモリを消費します。 が!!! 開放はしません。 領域を確保しつづけるように 設計されてるからだと思いますが。 何故かって? もう一度同じ容量食われたときに メモリが足りなくなることを防ぐためさ…。

すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

ADODB.ConnectionにSetを発行する際、Newはつけていますか? 問題のEXCELを閉じる(終了)とメモリ解放されるなら、Nothingを宣言したオブジェクトの、さらに上位が犯人だと思います。 ハズしてたらごめんなさい。

punimaru
質問者

お礼

ご回答ありがとうございます。 EXCELを閉じるとメモリは解放されます。 ですが、ConnectionもRecordsetも生成時には、NEWをつけていますので、原因はそこではないかと思われます。 Public adoCONNECTION As ADODB.Connection Set objADOConnect = New ADODB.Connection Dim objADORS1 As ADODB.Recordset Set objADORS1 = New ADODB.Recordset といった具合です。 これらを踏まえた上で、思い当たる点はございますでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A