CSVファイルをADOで扱う連載の26回目です。前回の記事はこちらになります。 hirocom777.hatenadiary.org
CSVファイルを作るコードの解説
前回はADOを使ってCSVファイルを作る方法をご紹介しました。今回は前回ご紹介したコードの解説です。
準備
前回ご紹介したコードMakeCsvFileを再掲します。
Public Sub MakeCsvFile(folderName As String, fileName As String, fieldList As String) ' On Error GoTo ErrorHandler 'データベースを接続します Dim adoCn As New ADODB.Connection adoCn.Provider = "Microsoft.ACE.OLEDB.12.0" adoCn.Properties("Extended Properties") = "Text;HDR=Yes;FMT=Delimited" adoCn.Open folderName & "\" 'コマンドオブジェクトを作成 Dim adoCm As New ADODB.Command adoCm.ActiveConnection = adoCn 'CSVファイルを作ります adoCm.CommandText = "CREATE TABLE " & fileName & "(" & fieldList & ")" adoCm.Execute adoCn.Close ErrorHandler: If Err.Number <> 0 Then MsgBox "データベース接続に失敗しました " & Err.Number End Sub
それでは解説です。ADOではCSVファイルをテーブル、つまりデータベースの中の表として扱います。CSVファイルのあるフォルダーがデータベースとなります。前半でフォルダーを指定してadocnを接続オブジェクトにセットしてデータベース接続しています。ここまでは今までと同じですが、以降が異なります。
続いてadoCmをコマンドオブジェクト(ADODB.Command)にセットします。今まで(CSVファイルを開いて条件を指定して読み込む)はレコードセットオブジェクト(ADODB.Recordset)を使っていました。今回の様にデータベースの構造を変化(テーブルの追加=CSVファイルの作成など)させる場合はコマンドオブジェクトを使います。
最後にコマンドオブジェクトのCommandTextプロパティにコマンドをセットした上でExecuteメソッドで実行してCSVファイルを作成します。コマンドについては後ほど説明します。
ここまでの説明を踏まえて、このプロシージャを呼び出すサンプルのプロシージャCsvTextを再掲します。
Public Sub CsvText() Dim folderName As String Dim fileName As String Dim fieldList As String folderName = ThisWorkbook.Path fileName = "Test.csv" fieldList = "日付 DATE,品名 TEXT,価格 INTEGER" MakeCsvFile folderName, fileName, fieldList End Sub
フォルダー、ファイル名、フィールドリストを指定してMakeCsvFileを呼び出しています。ここで指定したファイル名とフィールドリストを使ってMakeCsvFileの13行目のコマンドを作成しています。
CREATE TABLE
MakeCsvFileのコマンドですが、CREATE TABLEを使用します。CREATE TABLEはSQLコマンドなのですが、今まで使ってきたSELECT、WHERE等とは異なります。これらのコマンドはDML(Data Manipulation Language)という種類に分類されます。データ作成、読み取り、更新、削除などのデータ操作に使用します。
CREATE TABLEはDDL(Data Definition Language)に分類されます。テーブル作成、更新、削除などのデータ定義に使用します。その他にDCL(Data Control Language)という分類があります。権限管理をするのに使用するのですが、ADOではサポートされていないようです。
CREATE TABLEは以下の形で使用します。
CREATE TABLE テーブル名( ファールド名1 データ型1, ファールド名2 データ型2, ファールド名3 データ型3, ・ ・ )
今回は、フィールドリストに品名 TEXT,価格 INTEGERと記述しました。これは品名というフィールドを文字列型で、価格というフィールドを整数型で定義しました。
そう、今まではデータ型の定義をしないで全部文字データとして扱ってきました(必要なときは数値に変換)が、CREATE TABLEを使えばデータ型を定義できるんです。
次回はschema.ini
それではデータ型の定義はどこに記録されるのかというと、それが一緒にできたファイルschema.iniです。次回はご紹介しますのでお楽しみに!!