前回まででsqlite3.dllとSQLite3_StdCall.dllが使用可能状態になっているかと思います。
次は実際にSQLite For Excelを利用してSQLite3のデータベースとデータベース内のテーブルを作成してみます。
Sqlite3Demoはこの部分
今回は指導書「Sqlite3Demo」の中で
「TestStatement」
を利用します。
Public Sub TestStatement() Dim myDbHandle As Long Dim myStmtHandle As Long Dim RetVal As Long Dim stepMsg As String Debug.Print "----- TestStatement Start -----" ' Open the database - getting a DbHandle back RetVal = SQLite3Open(TestFile, myDbHandle) Debug.Print "SQLite3Open returned " & RetVal ' Create the sql statement - getting a StmtHandle back RetVal = SQLite3PrepareV2(myDbHandle, "CREATE TABLE MyFirstTable (TheId INTEGER, TheText TEXT, TheValue REAL)", myStmtHandle) Debug.Print "SQLite3PrepareV2 returned " & RetVal ' Start running the statement RetVal = SQLite3Step(myStmtHandle) Debug.Print "SQLite3Step returned " & RetVal ' Finalize (delete) the statement RetVal = SQLite3Finalize(myStmtHandle) Debug.Print "SQLite3Finalize returned " & RetVal ' Close the database RetVal = SQLite3Close(myDbHandle) Kill TestFile Debug.Print "----- TestStatement End -----" End Sub
上記をアレンジして実際に組み込んだコードがこちら。
Sub SQLiteDatabase_Make() Dim SQLiteDB_Handle As Long Dim ReturnValue As Long Dim SQLiteFullPath As String Dim myStmtHandle As Long '①データベースのフルパスを指定して開く。指定したデータベースが無い場合は作成する SQLiteFullPath = ThisWorkbook.Path & "\MusicDatabase.db3" ReturnValue = SQLite3Open(SQLiteFullPath, SQLiteDB_Handle) Debug.Print "SQLite3Open returned " & ReturnValue '②SQLのCreate文でSQLiteデータベースにテーブルを作成する ReturnValue = SQLite3PrepareV2(SQLiteDB_Handle, _ "CREATE TABLE MusicDatabase(" & _ "Album TEXT," & _ "Year INTEGER," & _ "Genre TEXT," & _ "Artist TEXT," & _ "TITLE TEXT," & _ "No INTEGER," & _ "TIME REAL," & _ "FULLPATH TEXT," & _ "Label TEXT," & _ "COMPOSER TEXT)", _ myStmtHandle) Debug.Print "SQLite3PrepareV2 returned " & ReturnValue ReturnValue = SQLite3Step(myStmtHandle) Debug.Print "SQLite3Step returned " & ReturnValue ReturnValue = SQLite3Finalize(myStmtHandle) Debug.Print "SQLite3Finalize returned " & ReturnValue '③SQLiteデータベースとの接続を終了する ReturnValue = SQLite3Close(SQLiteDB_Handle) Debug.Print "SQLite3Close returned " & ReturnValue 'SQLiteデータベースファイルを削除する ' Kill SQLiteFullPath End Sub
SQLite3データベースの保存場所
①の部分でSQLite3データベースの保存書の設定、設定した保存場所へのSQLite3データベースの作成を行います。
Sqlite3クラスの「SQLite3Open」ファンクションを使用します。
SQLite3Open(データベースのフルパス、データベースのハンドル)
第1引数へは拡張子を含めたフルパスを指定してください。もちろんフルパスを変数へ取り込んでから、変数を指定するでもOKです。
第2引数は宣言した変数を設定するだけで特に何もする必要はありません。指定した保存場所にデータベースが無ければ、新しいデータベースが作成され、すでに存在していればデータベースが開かれます。
コード内にある「Debug.Print ~」の記載はSqlite3クラスのファンクションの実行結果を返しているだけですので、自分のコードで不要であれば削除してください。
テーブルの作成
②のコードで①で作成したデータベース内にテーブルを作成します。
SQLite3PrepareV2(データベースのハンドル、SQLのCreate文、???のハンドル)
第1引数、第3引数については変数を宣言しておけば特に何もする必要はありません。
第2引数にはSQLのCreate文を指定してください。
SQLのCreate文は以下のような構成です。
Create Tabel テーブル名(列名,型)
今回指定している列の要素については以前の記事をご参考ください。
SQLite3Step(myStmtHandle)
SQLite3Finalize(myStmtHandle)
上記2つについてはSQLite3PrepareV2とセットで使用してください。
SQLite3PrepareV2の第3引数指定したものと同じものを第1引数に指定して実行。
データベースへの接続を終了
③のコードでデータベースへの接続を終了してデータベースを閉じます。
SQLite3Close(SQLiteDB_Handle)
SQLite3Openの第2引数に指定したものと同じものを指定してください。
Kill SQLiteFullPathは今、作成したデータベースを削除するコードですので、今回のコードから取り除いておいてください。
今の状態~次回予定
こんな感じでしょうか?
次回は以前紹介したMP3ファイルからTag抽出する方法を、指定したフォルダ内の全てのMP3に実行してみます。