前回まででSQLite For Excelを使用する準備が整いました。
今の状態はこんな感じでしょうか。
今回は実際に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ファイルと同じ場所に保存されていない。
いずれかを確認してみてください。
次回はデータベース作成・テーブルの作成にチャレンジしたいと思います。
補足
・便利な「クラス」ですが中身の見えない「クラス」を何の警戒もなく使うのは怖いということも。