DAO を使用して Accessデータベースにテーブルを新規登録する方法

◆概要

このページは、Visual Basic 6.0で、Accessデータベースにテーブルを新規登録する方法について記載しています。


テーブルの作成はDatabaseオブジェクトのCreateTableDefメソッドを使用します。引数にはテーブル名を指定します。


フィールドの作成はTableDefオブジェクトのCreateFieldメソッドを使用します。引数にはフィールド名とデータ形式を指定します。データ形式の一覧は次のとおりです。

Fieldオブジェクトのデータ型
定数 データ型 型名
dbInteger 整数型 Integer
dbLong 長整数型 Long
dbBoolean ブール型 Boolean
dbByte バイト型 Byte
dbBigInt Big Integer 型 Big Integer
dbBinary バイナリ型 Binary
dbLongBinary ロング バイナリ型,OLE オブジェクト型 LongBinary,OLE Objec
dbVarBinary 可変長バイナリ型 VarBinary
dbDecimal 10 進型 Decimal
dbNumeric Numeric 型 Numeric
dbSingle 単精度浮動小数点数型 Single
dbDouble 倍精度浮動小数点数型 Double
dbFloat 浮動小数点数型 Float
dbCurrency 通貨型 Currency
dbDate 日付/時刻型 Date/Time
dbTime 時刻型 Time
dbTimeStamp タイムスタンプ型 TimeStamp
dbChar CHAR 型 Char
dbText テキスト型 Text
dbMemo メモ型 Memo
dbGUID GUID 型 GUID

◆Sample

次の例では、アプリケーションと同じパスにtest.mdbがあるものとします。

別のフォルダにmdbをおく時は、apPath =の右辺にmdbのパスを記入してください。


接続に成功すると、メッセージが表示されます。


準備として、VBからDAOを使うために、[プロジェクト]メニューの[参照設定]ダイアログボックスで、[Microsoft DAO 3.51 Object Library]を選択します。

次にフォームモジュールに以下のコードを実装します。


フォームモジュール

Private Sub Command1_Click()
    Dim WS As Workspace         'WorkSpace
    Dim DB As Database          'Database
    Dim Tb As TableDef          'Table
    Dim F1 As Field             'Fieldその1
    Dim F2 As Field             'Fieldその2
    Dim F3 As Field             'Fieldその3
    Dim Idx As Index            'Index
    Dim IdxF1 As Field          'IndexのField
    Dim apPath  'プロジェクト起動時のフォルダを格納する変数
    
    On Error GoTo ProcError
    
    'マウスポインターを砂時計にする
    Screen.MousePointer = vbHourglass
    
    'プロジェクト起動時のフォルダを変数に代入し
    'カレントフォルダをexeのあるフォルダに変更
    apPath = App.Path
    ChDrive apPath
    ChDir apPath
    
    'デフォルトワークスペースの定義
    Set WS = DBEngine.Workspaces(0)

    'データベースをオープンする
     Set DB = WS.OpenDatabase(apPath & "\" & "test.mdb")
  
    'テーブルを新規に作成します
     Set Tb = DB.CreateTableDef("NewTable")
  
    '第1番目フィールドは、テキスト型で最大10文字
    Set F1 = Tb.CreateField("Field-01", dbText, 10)
    F1.Required = True           '値要求を「はい」にする
    Tb.Fields.Append F1

    '第2番目フィールドは、整数型
    Set F2 = Tb.CreateField("Field-02", dbInteger)
    Tb.Fields.Append F2

    '第3番目フィールドは、倍精度実数型
    Set F3 = Tb.CreateField("Field-03", dbDouble)
    Tb.Fields.Append F3

    '新規作成したテーブルをテーブルコレクションに追加
    DB.TableDefs.Append Tb

    'テーブルの主キーのインデックスを作成
    Set Idx = Tb.CreateIndex("PrimaryKey")
    Idx.Primary = True   '主キーの設定

    Idx.Unique = True     '固有キー(重複を許さない)
    '主キーのインデックスフィールドに第1番フィールドを登録する
    Set IdxF1 = Idx.CreateField("Field-01")

    '作成したインデックスフィールドをコレクションに登録する
    Idx.Fields.Append IdxF1
    
    '作成したインデックスをテーブルに登録する
    Tb.Indexes.Append Idx
    
    'データベースを閉じる
     DB.Close
     WS.Close
       
    '変数をクリア
    Set DB = Nothing
    Set WS = Nothing

    MsgBox "NewTableを追加しました。", vbInformation

ProcExit:
    '終了処理
    Screen.MousePointer = vbDefault
    Exit Sub

ProcError:
    MsgBox Err.Description, vbExclamation
    Resume ProcExit

End Sub

◆オートナンバー型のフィールドを追加する方法

Accessには自動的に番号が付けられるオートナンバー型という型があります。これを作成するには、AttributesプロパティにdbAutoIncrFieldを代入します。

◆Sample

Private Sub Command_Click()
    Call CreateTable
End Sub
Sub CreateTable()
    Dim WS As Workspace         ' Workspaceクラスのオブジェクト変数
    Dim DB As Database          ' Databaseクラスのオブジェクト変数
    Dim Tb As TableDef          ' TableDefクラスのオブジェクト変数
    Dim strDatabase As String   ' データベース名
    Dim apPath                  ' プロジェクト起動時のフォルダを格納する変数
    Dim fdNew(3) As Field       ' フィールドオブジェクト
    Dim Idx As Index            ' Index
    Dim IdxF1 As Field          ' IndexのField

     On Error GoTo ProcError

    ' マウスポインターを砂時計にする
    Screen.MousePointer = vbHourglass
    
    strDatabase = App.Path & "\" & "AddressBook.mdb"
    
    ' プロジェクト起動時のフォルダを変数に代入し
    ' カレントフォルダをexeのあるフォルダに変更
    apPath = App.Path
    ChDrive apPath
    ChDir apPath
    
    ' デフォルトワークスペースの定義
    Set WS = DBEngine.Workspaces(0)

    ' データベースをオープンする
     Set DB = WS.OpenDatabase(strDatabase)
  
    ' テーブルを新規に作成します
    ' テーブルを新規に作成します
     Set Tb = DB.CreateTableDef("M01Customer")
    
    ' フィールドを追加します。
    ' 第1番目フィールドは、オートナンバー型
    Set fdNew(0) = Tb.CreateField("顧客CD", dbLong)
    fdNew(0).Attributes = dbAutoIncrField
    ' 第2番目フィールドは、テキスト型で最大50文字
    Set fdNew(1) = Tb.CreateField("氏名", dbText)
    fdNew(1).Size = 50
    ' 第3番目フィールドは、テキスト型で最大50文字
    Set fdNew(2) = Tb.CreateField("住所", dbText)
    fdNew(2).Size = 50
    ' 第4番目フィールドは、テキスト型で最大7文字
    Set fdNew(3) = Tb.CreateField("電話番号", dbText)
    fdNew(3).Size = 7
    
    ' FieldsコレクションにFieldを追加
    Tb.Fields.Append fdNew(0)
    Tb.Fields.Append fdNew(1)
    Tb.Fields.Append fdNew(2)
    Tb.Fields.Append fdNew(3)
    
    '新規作成したテーブルをテーブルコレクションに追加
    DB.TableDefs.Append Tb

    'テーブルの主キーのインデックスを作成
    Set Idx = Tb.CreateIndex("PrimaryKey")
    Idx.Primary = True   '主キーの設定

    Idx.Unique = True     '固有キー(重複を許さない)
    '主キーのインデックスフィールドに第1番フィールドを登録する
    Set IdxF1 = Idx.CreateField("顧客CD")

    '作成したインデックスフィールドをコレクションに登録する
    Idx.Fields.Append IdxF1
    
    '作成したインデックスをテーブルに登録する
    Tb.Indexes.Append Idx
    
    'データベースを閉じる
     DB.Close
     WS.Close
       
    '変数をクリア
    Set DB = Nothing
    Set WS = Nothing

    MsgBox "M01Customerテーブルを追加しました。", vbInformation

ProcExit:
    '終了処理
    Screen.MousePointer = vbDefault
    Exit Sub

ProcError:
    MsgBox Err.Description, vbExclamation
    Resume ProcExit

End Sub


▼ページトップへ