Excelが大好きだ!

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


スポンサードリンク

ExcelからSQLite3を操作する方法(3.データベース・テーブルの作成)

前回までで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 テーブル名(列名,型)

今回指定している列の要素については以前の記事をご参考ください。

excellover.hatenablog.com

SQLite3Step(myStmtHandle)

SQLite3Finalize(myStmtHandle)

上記2つについてはSQLite3PrepareV2とセットで使用してください。

SQLite3PrepareV2の第3引数指定したものと同じものを第1引数に指定して実行。

データベースへの接続を終了

③のコードでデータベースへの接続を終了してデータベースを閉じます。

SQLite3Close(SQLiteDB_Handle)

SQLite3Openの第2引数に指定したものと同じものを指定してください。

Kill SQLiteFullPathは今、作成したデータベースを削除するコードですので、今回のコードから取り除いておいてください。

今の状態~次回予定

こんな感じでしょうか?

f:id:ExcelLover:20180610164140j:plain

次回は以前紹介したMP3ファイルからTag抽出する方法を、指定したフォルダ内の全てのMP3に実行してみます。