Excelが大好きだ!

Excel大好き経理マンがExcelの事を書き綴っていきます。


スポンサードリンク

ExcelからSQLite3を操作する方法(2.SQLite3.dllに接続)

前回まででSQLite For Excelを使用する準備が整いました。

今の状態はこんな感じでしょうか。 f:id:ExcelLover:20180513182925j:plain

今回は実際にSQLite For Excelを使用してSQLite3.dllへの接続までやってみたいと思います。

Sqlite3Demoに全てがある

これからやることは基本的に全てSqlite3Demoのコードを流用していきます。

これ以下を見なくてもSqlite3Demoのコードを読んで使いたいところをコピペすれば動きます。

Sqlite3Demoが参考書になります。

SQLite For Excelを読み込む

まずはSQLite3.dllを読み込みます。

読み込みますと書いたが、正直この辺の仕組みはよく理解していない。

この過程を踏むことでSQLite3 For Excelの機能が使用可能になる。

Sqlite3DemoではAllTests内の以下の部分です。

    Dim InitReturn As Long
    InitReturn = SQLite3Initialize
    If InitReturn <> SQLITE_INIT_OK Then
        Debug.Print "Error Initializing SQLite. Error: " & Err.LastDllError
        Exit Sub
    End If  

上記のコードを自分が作成しているプロシージャに組み込んでください。

ここからいよいよSqlite3.dllの機能を使っていきます。

上記2行目の InitReturn = SQLite3Initialize の右辺がSqlite3.dllの機能です。

SQLite3Initializeの部分にマウスカーソルを当てた状態で

Shift + F2

を押すと

Public Function SQLite3Initialize(Optional ByVal libDir As String) As Long
    ' A nice option here is to call SetDllDirectory, but that API is only available since Windows XP SP1.
    If libDir = "" Then libDir = ThisWorkbook.Path
    If Right(libDir, 1) <> "\" Then libDir = libDir & "\"
    
    If hSQLiteLibrary = 0 Then
        hSQLiteLibrary = LoadLibrary(libDir + "SQLite3.dll")
        If hSQLiteLibrary = 0 Then
            Debug.Print "SQLite3Initialize Error Loading " + libDir + "SQLite3.dll:", Err.LastDllError
            SQLite3Initialize = SQLITE_INIT_ERROR
            Exit Function
        End If
    End If
        
    If hSQLiteStdCallLibrary = 0 Then
        hSQLiteStdCallLibrary = LoadLibrary(libDir + "SQLite3_StdCall.dll")
        If hSQLiteStdCallLibrary = 0 Then
            Debug.Print "SQLite3Initialize Error Loading " + libDir + "SQLite3_StdCall.dll:", Err.LastDllError
            SQLite3Initialize = SQLITE_INIT_ERROR
            Exit Function
        End If
    End If
    SQLite3Initialize = SQLITE_INIT_OK
End Function

上記のコードが表示されたでしょうか?(他にも前後にたくさん表示されてるとは思いますが)

正直内容がよくわからないとは思います。(僕もです)

でもよくはわからなくても何となくわかればOKです。

それがクラスを使うメリットです。

SQLite3Initialize関数の機能

※これより下でクラスがクラスがのたまっていますが、
SQLiteForExcelはクラスではなく標準モジュールに記載して使用します。
あ、こいつボケてるんだなとスルーして下さい

Sqlite3クラスのSQLite3Initialize関数は以下の特徴があると思われます。

・引数の指定をしなくても動く

・SQLite3.dllとSQLite3_StdCall.dllを使用可能状態にする

・上記dllが使用可能状態になれば「SQLITE_INIT_OK」

なんらかのエラーがあれば「SQLITE_INIT_ERROR」を

関数の返り値として返す。

クラスが全てよろしく処理してくれる

取り敢えず自分のプロシージャに組み込んだコードを実行してみましょう。

エラーもなく特に何も起きませんでしたか?

であれば無事にSQLite3.dllとSQLite3_StdCall.dllが使用可能状態になっています。

エラーが出たり、イミディエイトウィンドウに何か表示されていますか?

であればまだSQLite3.dllとSQLite3_StdCall.dllが使える状態になっていません。

今の段階で問題があるとすれば

・Sqlite3のクラスが自作のExcelファイルに正しくインポートされていない。

・SQLite3.dllとSQLite3_StdCall.dllの2つのdllが自作Excelファイルと同じ場所に保存されていない。

いずれかを確認してみてください。

次回はデータベース作成・テーブルの作成にチャレンジしたいと思います。

補足

・便利な「クラス」ですが中身の見えない「クラス」を何の警戒もなく使うのは怖いということも。