EXCEL VBAメモ - SQLite3データベースのアクセス(SQLiteForExcel使用)
ExcelからODBCドライバをインストールせずにSQLite3へアクセスする方法
準備(64bit環境の場合)
- Releases · govert/SQLiteForExcel · GitHub からSQLite For Excelの最新版を入手(現時点ではSQLiteForExcel-1.0.zip)しアーカイブの中から、SQLiteForExcel_64.xlsmをとりだして使用する。32bit環境では同梱されているSQLite3_StdCall.dllを同じ場所に置く必要があるようですが64bit環境では不要の様です。
- SQLite Home Pageからsqlite3.dllを入手して別途コピーする。(現時点の最新は、sqlite-dll-win64-x64-3260000.zip)
動作確認
sqlite3.dllの置き場所に注意
#If Win64 Then ' I put the 64-bit version of SQLite.dll under a subdirectory called x64 InitReturn = SQLite3Initialize(ThisWorkbook.Path + "\x64") #Else
して、SQLiteForExcel_64.xlsmのSqlite3Demoモジュール中の AllTestsプロシージャを実行する。結果はDebug.Printでイミディエイトウィンドウに表示されるのでエラーが無ければOK
EXCEL VBAメモ - SQLite3データベースのアクセス(SQLite ODBC使用)
ExcelからODBC経由でSQLite3へアクセスする方法
準備
- SQLite ODBC Driver からSQLite ODBC Driverをダウンロードしてインストールする。64bit版はsqliteodbc_w64.exe(現時点の最新はVer.0.9996)
- インストールを行うとsqlite3.dllがC:\Windows\System32に見つからないというメッセージが出るのでSQLite Home Pageからダウンロードして別途コピーする。(現時点の最新は、sqlite-dll-win64-x64-3260000.zip)
アンインストール時の注意点
インストールすると、C:\Windows\System32にいくつかのsqlite3*.*というファイルがコピーされるが通常のアンインストールで削除されないファイルがあるので完全にアンインストールを行う場合には手動で削除する必要がある。
SQLite - ウィンドウ関数
特定のレコード範囲をウィンドウ設定して、そのウィンドウに対して操作を行う機能。
sqlite> select * from AAA; tt ii ---------- ---------- aa 6 bb 5 aa 4 bb 3 aa 2 bb 1
OVER句
SQLite - 重複の除去(DISTINCT)
指定したカラムで重複ているものを除去して出力する
sqlite> select * from AAA; tt ii rr ---------- ---------- ---------- aaa 1 1.0 aaa 1 2.0 aaa 2 3.0 aaa 2 4.0 sqlite> select distinct tt from AAA; tt ---------- aaa sqlite> select distinct tt,ii from AAA; tt ii ---------- ---------- aaa 1 aaa 2 sqlite> select distinct tt,ii,rr from AAA; tt ii rr ---------- ---------- ---------- aaa 1 1.0 aaa 1 2.0 aaa 2 3.0 aaa 2 4.0
SQLite - 出力レコード数の制限(LIMIT, OFFSET)
LIMIT句で出力するレコード数を、OFFSET句で最初からスキップするレコード数を指定する。
sqlite> select * from AAA; tt rr ---------- ---------- aaa 8.0 bbb 7.0 ccc 6.0 ddd 5.0 aaa 4.0 bbb 3.0 ccc 2.0 ddd 1.0 sqlite> select * from AAA limit 1; tt rr ---------- ---------- aaa 8.0 sqlite> select * from AAA limit 3 offset 2; tt rr ---------- ---------- ccc 6.0 ddd 5.0 aaa 4.0 sqlite> select * from AAA order by rr limit 3 offset 2; tt rr ---------- ---------- bbb 3.0 aaa 4.0 ddd 5.0
SQLite - 出力のソート(ORDER BY)
指定したカラムを昇順(ASC,省略可)または降順(DESC)でソートして出力する。
sqlite> select * from AAA; tt rr ---------- ---------- aaa 8.0 bbb 7.0 ccc 6.0 ddd 5.0 aaa 4.0 bbb 3.0 ccc 2.0 ddd 1.0 sqlite> select * from AAA order by tt asc, rr desc; tt rr ---------- ---------- aaa 8.0 aaa 4.0 bbb 7.0 bbb 3.0 ccc 6.0 ccc 2.0 ddd 5.0 ddd 1.0 sqlite> select * from AAA order by rr, tt desc; tt rr ---------- ---------- ddd 1.0 ccc 2.0 bbb 3.0 aaa 4.0 ddd 5.0 ccc 6.0 bbb 7.0 aaa 8.0
SQLite - カラム方向の結合(JOIN)
2つのテーブルの指定したカラムで結合することで2つのテーブルをカラム方向に広げたひとつのテーブルとして扱う
sqlite> select * from AAA; tt ii ---------- ---------- aaa 1 bbb 2 ccc 3 ddd 4 sqlite> select * from BBB; ii rr ---------- ---------- 1 1.0 2 2.0 3 3.0 5 5.0
INNNER JOINまたはOUTER JOINにより、tt, ii, rrというカラムを持つひとつのテーブルに結合される。