以前にSQLite3データベースをExcelから使用する方法をご紹介しました。
その時には使い方がわからなかった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では無くても他の言語では必要があるんだろうか。