新規テーブルを作成する

新規テーブルを作成する

Sub 新規テーブル作成()
Dim myCat As New ADOX.Catalog, myTbl As ADOX.Table, myIdx As ADOX.Index
Dim conStr As String, DBName As String

'接続するデータベースと接続文字列
DBName = ThisWorkbook.Path & "\mdb\newDB.mdb"
conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBName

'操作対象となるmdbファイルを指定
myCat.ActiveConnection = conStr

'新規テーブルオブジェクトを作成し、テーブル名を指定
Set myTbl = New ADOX.Table
myTbl.Name = "商品マスタ"

'フィールドを追加
With myTbl.Columns
  .Append "商品ID", adSmallInt
  .Append "商品名", adVarWChar, 20
  .Append "単価", adCurrency
End With

'新規インデックスオブジェクトを作成
Set myIdx = New ADOX.Index

'インデックス情報の指定
With myIdx
  .Name = "主キー"
  .Columns.Append "商品ID"
  .PrimaryKey = True
End With

'Tableオブジェクトにインデックス情報を追加
myTbl.Indexes.Append myIdx

'CatalogオブジェクトにTableオブジェクトを追加
myCat.Tables.Append myTbl

Set myIdx = Nothing
Set myTbl = Nothing
Set myCat = Nothing

End Sub

テーブルを新規作成するには、Catalogオブジェクト内のTableコレクションにAppendメソッドを使用する。

新規テーブルを作成する手順

  1. 新規Tableオブジェクトの作成
  2. フィールド情報をTableオブジェクトに追加
  3. インデックスや主キーの情報をTableオブジェクトに追加
  4. 作成したTableオブジェクトを、Appendメソッドを使用して、CatalogオブジェクトのTablesコレクションに追加
  1. 新規Tableオブジェクトの作成
    New キーワードを使用して新規Tableオブジェクトを作成後、TableオブジェクトのNameプロパティを使用して「テーブル名」を指定

    '新規テーブルオブジェクトを作成し、テーブル名を指定
    Set myTbl = New ADOX.Table
    myTbl.Name = "商品マスタ"
    
  2. フィールド情報をTableオブジェクトに追加
    Columnsコレクションに対してAppendメソッドを使用する

    Columnsオブジェクト.Append Column , Type , DefinedSize

    引数 説明
    Column フィールド名を指定。
    または、すでに各種フィールド情報を設定済みのColumnオブジェクトを指定
    Type フィールドのデータ型を指定。省略可能。
    ADO列挙定数DataTypeEnum で指定する。
    DefinedSize フィールドの列のサイズを指定。省略可能
    'フィールドを追加
    With myTbl.Columns
      .Append "商品ID", adSmallInt
      .Append "商品名", adVarWChar, 20
      .Append "単価", adCurrency
    End With
    
  3. インデックスや主キーの情報をTableオブジェクトに追加
    Indexオブジェクトを作成し、必要な項目を設定後、TableオブジェクトのIndexesコレクショにAppendメソッドを使用して追加する
    新規作成したIndexオブジェクトには、Nameプロパティに任意の名前をつけ、主キーとしたい場合にはPrimaryKeyプロパティに「True」を指定する
    さらに、Indexオブジェクト内のColumnsコレクションのAppendメソッドを、引数としてインデックス化したいフィールド名を渡して実行する

    '新規インデックスオブジェクトを作成
    Set myIdx =
    New ADOX.Index
    
    'インデックス情報の指定
    With myIdx
      .Name = "主キー"
      .Columns.Append "商品ID"
      .PrimaryKey = True
    End With
    
    'Tableオブジェクトにインデックス情報を追加
    myTbl.Indexes.Append myIdx
    
  4. 作成したTableオブジェクトを、Appendメソッドを使用して、CatalogオブジェクトのTablesコレクションに追加

    'CatalogオブジェクトにTableオブジェクトを追加
    myCat.Tables.Append myTbl
    

    実行前のデータベース

    実行結果

    同名テーブルを作成しようとした時のエラーメッセージ