スポンサードリンク

SQLite for ExcelでIn Memory Databaseを使用する方法

以前にSQLite3データベースをExcelから使用する方法をご紹介しました。

www.excellovers.com

その時には使い方がわからなかったIn Memory DataBaseという機能の使い方がわかりましたのでご紹介します。

In Memory Databaseとは

正確な定義はググって頂くとして、私の理解では

1.メモリー上に作成される一時的なデータベース(プログラム終了後、消去される)

2.メモリー上のため高速で処理が行われる。

1の特性があるために今の所、使用用途を見い出せていないのですが、2の特性があるために普通にデータベースを作成して処理を実行するのとは比べ物にならないスピードで処理ができます。

Excel上の5,000×13のデータの条件で以下の処理を実行

データベース作成
テーブル作成
Excel上のデータをデータをデータベースへ挿入
データベースから全件抽出下データをExcelへ転記

普通にデータベースを作成:26秒
In Memory DataBase:0.6秒

このぐらいの差が出てきます。

引数で簡単指定

使い方は簡単です。

以前の記事ではデータベース作成時に

SQLite3Open FileName , dbHandle

SQLite3Openを使用しましたが、In Memory DataBaseを使用する時は

SQLite3OpenV2 FileName , dbHandle , flags , vfsName

SQLite3OpenV2を使用します。

FileName:In Memory DataBaseを使用する場合は適当なデータベース名を指定してください。

dbHandle:SQLite3Openと同じようにLong型の変数を宣言しておいてください。

flags:ここがキモです。SQLITE_OPEN_READWRITE + SQLITE_OPEN_MEMORYと指定してください。

vfsName:正直ここの意味はわかりません。空白で処理は問題なく動くようです。

記載例は以下のとおりです。

     SQLite3OpenV2 "test.db3", myDBHandle, _
          SQLITE_OPEN_READWRITE + SQLITE_OPEN_MEMORY, ""

基本的にコード実行後にデータベースは消去されますが、dbHandleをプロシージャレベル変数で宣言しておくと、明示的に削除(データベースハンドルを閉じる)するか、マクロ記載のBookを閉じるまでは消去させずに継続使用することが出来ます。

おまけ

自分では今の所、使用用途を見いだせていないのですが、実装されている以上必要があったと思うんですよね。

Excelでは無くても他の言語では必要があるんだろうか。