ExcelからSQLite3を操作する方法(4.データの挿入)

前回予告どおり今回は取得したMP3タグデータをExcelへの転記ではなくSQLiteデータベースに取り込んでみようと思います。

SQLのInsert文でデータを取り込む

Sub GetMusicFileProperty()
    n = 0

    ReDim MusicFileProperty(n)
    FileSearch "G:\Music\"

    ReDim Preserve MusicFileProperty(UBound(MusicFileProperty) - 1)
    
'①今回変更部分-------------------    
    SQLite3dll_Connect
    SQLite_MusicData_Insert
'------------------------------
End Sub

上記は前回作成した「GetMusicFileProperty」です。

excellover.hatenablog.com

①の部分はセルへの転記のためのコードが記載されていましたが、今回新たにSQLiteへのデータ挿入のための

SQLite_Music_Insert」を作成して置き換えました。

Sub SQLite_MusicData_Insert()
     Dim SQLiteDB_Handle As Long
     Dim SQLiteFullPath As String
     Dim myStmtHandle As Long
     Dim mySQL As String
     SQLiteFullPath = ThisWorkbook.Path & "\MusicDatabase.db3"
     SQLite3Open SQLiteFullPath, SQLiteDB_Handle
     
     Dim i As Long
     For i = 0 To UBound(MusicFileProperty)

'②MP3タグを利用してSQL文を作成    
          mySQL = "Insert Into MusicDatabase Values(" & _
          "'" & MusicFileProperty(i)(0) & "'," & _
          "'" & MusicFileProperty(i)(1) & "'," & _
          "'" & MusicFileProperty(i)(2) & "'," & _
          "'" & MusicFileProperty(i)(3) & "'," & _
          "'" & MusicFileProperty(i)(4) & "'," & _
          "'" & MusicFileProperty(i)(5) & "'," & _
          "'" & MusicFileProperty(i)(6) & "'," & _
          "'" & MusicFileProperty(i)(7) & "'," & _
          "'" & MusicFileProperty(i)(8) & "'," & _
          "'" & MusicFileProperty(i)(9) & "')"
          SQLite3PrepareV2 SQLiteDB_Handle, mySQL, myStmtHandle
          SQLite3Step myStmtHandle
          SQLite3Finalize myStmtHandle
     Next i
    SQLite3Close SQLiteDB_Handle 
End Sub

今回は記載していませんが、モジュールレベル変数としてMusicFilePropertyを宣言していて、その中にMP3タグデータが格納されています。

②データ挿入のSQLの構文は

Insert Into テーブル名 Values(挿入データ)

上記はテーブルの全ての列にデータを挿入する際の構文です。

実際のテーブルの列の並びと同じように挿入データを記載します。

今回のテーブルのデータ型は2列目(Year)と6列目(No)がInteger型で作成していますが、

SQL文内では文字列として挿入の表現をしています。

あまり行儀は良くないかもしれませんが、テーブル側の型に合わせて自動で変換してくれているようです。

文字列の挿入する場合は挿入するデータを「’(シングルコーテーション)」で囲ってください。

SQL文が完成後は以前にご紹介したテーブル作成のCreate分と同じように

・SQLite3PrepareV2

・SQLite3Step

・SQLite3Finalize

以上3つを順番に実行すればSQLiteデータベースにデータ挿入されます。

ちなみに今回のコードでは返り値を受けていませんが、上記3つのSQLite構文はFunctionなので返り値を調べることで正常終了したかエラーが発生しているのか判定することが出来ます。  

まとめ

お作法さえ分かってしまえば、Accessへ挿入するときと殆ど変わらない手順で実行することが出来ることがわかりました。

ここまででSQLiteデータベースの作成、MP3タグデータの収集、収集したデータをSQLiteデータベースへの挿入までが完成しました。

次回はSQLiteデータベースからデータを抽出してExcelへ転記してみようと思います。


SQLiteは日付・時間型の処理がちょっとややこしいみたいなので、いったん文字列型で挿入する逃げを打っています。

ここは調べて対応するつもりです。