DAO を使用して Accessデータベースにテーブルを新規登録する方法
◆概要
このページは、Visual Basic 6.0で、Accessデータベースにテーブルを新規登録する方法について記載しています。
テーブルの作成はDatabaseオブジェクトのCreateTableDefメソッドを使用します。引数にはテーブル名を指定します。
フィールドの作成はTableDefオブジェクトのCreateFieldメソッドを使用します。引数にはフィールド名とデータ形式を指定します。データ形式の一覧は次のとおりです。
定数 | データ型 | 型名 |
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