ODBCなしで ExcelからSQLite3を操作する

  • 投稿 : 2020-12-11
Excel 64bit版で確認しました。

環境構築

必要なファイル

SQLite For Excel
https://github.com/govert/SQLiteForExcel/releases
sqlite3
https://www.sqlite.org/download.html

SQLite For ExcelのSQLiteForExcel_64.xlsm
sqlite3のsqlite3.dll

を使います。

SQLiteForExcel_64.xlsmの標準モジュールのSqlite3がライブラリーの本体です。
sqlite3のほうが、sqlite3(DB)の本体モジュールです

配置

x64\sqlite3.dll
SQLiteForExcel_64.xlsm

こんな感じで配置します

修正

'修正前
Private Declare PtrSafe Function sqlite3_backup_init Lib "SQLite3" (ByVal hDbDest As LongPtr, ByVal zDestName As LongPtr, ByVal hDbSource As LongPtr, ByVal zSourceName As LongPtr) As Long
'修正後
Private Declare PtrSafe Function sqlite3_backup_init Lib "SQLite3" (ByVal hDbDest As LongPtr, ByVal zDestName As LongPtr, ByVal hDbSource As LongPtr, ByVal zSourceName As LongPtr) As LongPtr

SQLiteForExcel_64.xlsmの標準モジュールのSqlite3内の「sqlite3_backup_init」の部分の一部を修正します
戻り値の指定をLong => LongPtr に変更してください。

動作確認

Sqlite3Demo内の「Alltests()」を実行します。イミディエイトウィンドウで、実行結果を確認してください。

動作確認とともに、サンプルになっています。「Sqlite3Demo」をみれば使い方がわかるかと思います。

サンプルDBを作成する

DB Browser for SQLite

DB Browser for SQLite
https://forest.watch.impress.co.jp/library/software/sqldbbrowser/

Windows10上で、Sqlite3のDBを簡単に扱えるGUIソフトを導入します。インストールしてください。

サンプルのCSV

なんちゃって個人情報
http://kazina.com/dummy/

サンプルデータを作るのは面倒なので、上記サイトで自動生成します。CSVファイルを作成します。

サンプルDBの作成

DB Browser for SQLiteをつかって、作成したCSVファイルをインポートして、そこからサンプルDBを作成します。

DBをEXCELに読み込んでみる

サンプルDBができたので、読み込んでEXCELのセルに表示してみます。

サンプルソース

Public Sub Test_Select()
    Dim InitReturn As Long
    Dim RetVal As Long
    Dim DBFile As String
    
    Dim myDbHandle As LongPtr
    Dim myStmtHandle As LongPtr
    
    Dim i As Long
    
    DBFile = ThisWorkbook.Path & "\sample.db3" 
    
    '---------------
    'SQLite3 初期化処理
    '---------------
    InitReturn = SQLite3Initialize(ThisWorkbook.Path + "\x64")
    If InitReturn <> SQLITE_INIT_OK Then
        Debug.Print "Error Initializing SQLite. Error: " & Err.LastDllError
        Exit Sub
    End If

    
    '---------------
    'DB Open
    '---------------
    RetVal = SQLite3Open(DBFile, myDbHandle)
    
    '---------------
    'SELECT
    '---------------
    'SQL定義
    RetVal = SQLite3PrepareV2(myDbHandle, "SELECT * FROM users", myStmtHandle)
    'SQL実行
    RetVal = SQLite3Step(myStmtHandle)
    
    'ループして、レコードを読む
    i = 1
    Do While RetVal <> SQLITE_DONE
        Cells(i, 1).Value = SQLite3ColumnText(myStmtHandle, 0)
        Cells(i, 2).Value = SQLite3ColumnText(myStmtHandle, 1)
        Cells(i, 3).Value = SQLite3ColumnText(myStmtHandle, 2)
        Cells(i, 4).Value = SQLite3ColumnText(myStmtHandle, 3)
        Cells(i, 5).Value = SQLite3ColumnText(myStmtHandle, 4)
        Cells(i, 6).Value = SQLite3ColumnText(myStmtHandle, 5)
        RetVal = SQLite3Step(myStmtHandle)
        i = i + 1
    Loop
    
    'SQL終了処理
    RetVal = SQLite3Finalize(myStmtHandle)

    '---------------
    'DB Close
    '---------------
    RetVal = SQLite3Close(myDbHandle)
    Debug.Print "SQLite3Close returned " & RetVal
End Sub

エラー処理が甘めですが、こんな感じのコードを作りました。

DBFile = ThisWorkbook.Path & "\sample.db3" 

DBファイルの指定はこの部分でしています。EXCELファイルの直下のsample.db3を読むようになります。

InitReturn = SQLite3Initialize(ThisWorkbook.Path + "\x64")

この辺でSQLite3の初期設定をしています。引数にsqlite3.dllの場所を指定しています

RetVal = SQLite3PrepareV2(myDbHandle, "SELECT * FROM users", myStmtHandle)

SQL文はこの辺りで指定してます

実行結果

こんな感じの実行結果になります。

動画での説明

スポンサーリンク