hakeの日記

Windows環境でプログラミングの勉強をしています。

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

問題点

自分の環境(Winows10 1809 / Excel for Office 365(64bit) )ではTestBackupプロシージャの実行でExcelが落ちましたので、この機能は使用しないことにします。
 

続きを読む

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*.*というファイルがコピーされるが通常のアンインストールで削除されないファイルがあるので完全にアンインストールを行う場合には手動で削除する必要がある。
 

参考

ODBCの操作については以下を参考にする

 

続きを読む

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というカラムを持つひとつのテーブルに結合される。

内部結合(INNER JOIN)

続きを読む