Excel をデータベースとして使用すると、VBA の ADO や DAO でデータを操作した方が便利なことがあります。
例えば、単純にデータの集計をしたり、特定の列のある値の行を選択したい場合は、ADO や DAO で SQL 操作すると結構便利だったりします。
しかしながら、すでに開いている Excel ファイルに対し ADO や DAO による操作をすると、メモリリークが発生するバグがあるようです。
Microsoft ActiveX データ オブジェクト (ADO) を取得すると Excel プロセスで、メモリ リークが Excel で開いている Excel ワークシートから Recordset が発生します。 反復クエリ、最終的に Excel にメモリ不足のため実行しでエラーが発生するか応答を停止したように Excel があります。
[BUG]: ActiveX データ オブジェクト (ADO) を使用して、開いている Excel ワークシートをクエリすると、メモリ リークが発生します。
数回の使用ならば気付かないかもしれませんが、繰り返し UPDATE などで更新をかけたりしていると、ものすごい勢いで使用メモリが増加していきます。
ADO や DAO を使用して Excel を操作する場合は、データファイルを別に用意するなどして、開いている Excel ファイルに対して操作しないように注意する必要がありますね。
1 件のコメント:
実際に確認しましたが、このメモリーリークの問題はエクセル2007形式のファイル(拡張子 xlsx)を使ったら発現されませんでした。
使用した接続方法は以下の通りです。
Provider=Microsoft.ACE.OLEDB.12.0; Data Source=XXXX.xlsx; Extended Properties="Excel 12.0 Xml;HDR=YES"
参考までに
コメントを投稿