CSVファイルを作る(解説)(CSVファイルをADOで扱う㉖)

CSVファイルをADOで扱う連載の26回目です。前回の記事はこちらになります。 hirocom777.hatenadiary.org

CSVファイルを作るコードの解説

 前回はADOを使ってCSVファイルを作る方法をご紹介しました。今回は前回ご紹介したコードの解説です。

f:id:HiroCom777:20220129144214j:plain

準備

前回ご紹介したコード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コマンドなのですが、今まで使ってきたSELECTWHERE等とは異なります。これらのコマンドはDML(Data Manipulation Language)という種類に分類されます。データ作成、読み取り、更新、削除などのデータ操作に使用します。

CREATE TABLEDDL(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です。次回はご紹介しますのでお楽しみに!!

hirocom777.hatenadiary.org

CSVファイルをADOで扱う連載記事はコチラからどうぞ