次の方法で共有


Access テーブルを作成および修正する

Microsoft Office 2000/Visual Basic プログラマーズ ガイド   

ADOX のオブジェクト、メソッド、プロパティを使用して Access データベースの構造を表示、作成、修正することができます。以下に続くトピックでは、これらの方法について説明します。

ヒント   トランザクションを使用して、データベースの構造に加えた一連の変更をラップすることができます。これには、トランザクションを変更のラッパーとして使用して、すべての作業が 1 つの単位として実行されるようにします。トランザクションの使用方法については、第 16章「マルチユーザー データベース ソリューション」 の「トランザクションの使用方法」を参照してください。

テーブルを作成する

ADOXを使用してテーブルを作成するには

  1. テーブルを追加するデータベースの Catalog オブジェクトを開きます。

  2. 新しい Table オブジェクトを作成します。

  3. Columns コレクションの Append メソッドを使用してフィールド定義 (Column オブジェクト) を新しい Table オブジェクトの Columns コレクションへ追加します。

  4. 作成した新しい Table オブジェクトを Catalog オブジェクトの Tables コレクション へ追加します。

Columns コレクションへ追加する前に、Create メソッドを使用してフィールド定義の Column オブジェクトを作成する必要はありませんが、Append メソッドを使用することにより、Column オブジェクトを作成、追加できます。次のプロシージャでは、ADOX を使用して Contacts というテーブルを作成します。

  Sub CreateAccessTable(strDBPath As String)
   Dim catDB As ADOX.Catalog
   Dim tblNew As ADOX.Table

   Set catDB = New ADOX.Catalog
   ' カタログを開きます。
   catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & strDBPath

   Set tblNew = New ADOX.Table
   ' 新規の Table オブジェクトを作成します。
   With tblNew
      .Name = "Contacts"
      ' フィールドを作成し、新規の Table オブジェクトの
      ' Columns コレクションに関連付けます。
      With .Columns
         .Append "FirstName", adVarWChar
         .Append "LastName", adVarWChar
         .Append "Phone", adVarWChar
         .Append "Notes", adLongVarWChar
      End With
   End With
   
   ' 新規 Table をデータベースの Tables コレクションに追加します。
   catDB.Tables.Append tblNew
   
   Set catDB = Nothing
End Sub

CreateAccessTable プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH14 サブフォルダ中の DataAccess.mdb サンプル ファイルの CreateDatabase モジュールにあります。

DAO フィールドのデータ型名は、ADOX のデータ型名とは異なります。次は、Access ユーザー インターフェイスおよび DAO のデータ型と、ADOX データ型との対応表です。

Access ユーザー インターフェイスのデータ型 DAO データ型 ADOX データ型
Yes/No 型 dbBoolean adBoolean
数値型 (FieldSize = バイト型) dbByte adUnsignedTinyInt
通貨型 dbCurrency adCurrency
日付/時刻型 dbDate adDate
数値型 (FieldSize = 小数型) dbDecimal adDecimal
数値型 (FieldSize = Double) dbDouble adDouble
数値型またはオートナンバー型 (FieldSize = レプリケーション ID 型) dbGUID adGUID
数値型 (FieldSize = 整数型) dbInteger adSmallInt
数値型またはオートナンバー型 (FieldSize = 長整数型) dbLong adInteger
OLE オブジェクト型 dbLongBinary adLongVarBinary
メモ型 dbMemo adLongVarWChar
数値型 (FieldSize = Single) dbSingle adSingle
テキスト型 dbText adVarWChar
ハイパーリンク型 dbMemo、およびdbHyperlinkField に設定された DAO Attributes プロパティ adLongVarWChar、
および Jet OLEDB:Hyperlink に設定された ADOX プロバイダ別 Column プロパティ

フィールドの属性およびプロパティを詳細設定する

フィールドのデータ型の指定に加え、フィールドを数値の自動追加型に設定する (Access ユーザー インターフェイスのオートナンバー型)、フィールドをアクティブになっているハイパーリンクの保存に使用する (Access ユーザー インターフェイスのハイパーリンク型) など、その他のフィールド属性も指定できます。DAO を使用して数値の自動追加型フィールド、またはハイパーリンク型のフィールドを作成するときは、適切な定数をフィールドの Attributes プロパティに追加してください。ADOX で同じフィールドを作成するには、フィールド作成に使用する Column オブジェクトの Properties コレクションで適切なプロパティを設定します。次のコードでは、フィールドの AutoIncrement プロパティを True に設定し、ADOX で数値の自動追加型フィールドを作成する方法を説明します。

  Sub CreateAutoNumberField(strDBPath As String)
   Dim catDB As ADOX.Catalog
   Dim tbl As ADOX.Table

   Set catDB = New ADOX.Catalog
   ' カタログを開きます。
   catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & strDBPath

   Set tbl = New ADOX.Table
   With tbl
      .Name = "Contacts"
      Set .ParentCatalog = catDB
      ' フィールドを作成し、新規の Table
      ' オブジェクトの Columns コレクションに関連付けます。
      With .Columns
         .Append "ContactId", adInteger
         ' ContactId フィールドをオートナンバー型に設定します。
         .Item("ContactId").Properties("AutoIncrement") = True
         .Append "CustomerID", adVarWChar
         .Append "FirstName", adVarWChar
         .Append "LastName", adVarWChar
         .Append "Phone", adVarWChar, 20
         .Append "Notes", adLongVarWChar
      End With
   End With

   ' データベースの Tables コレクションに新規 Table を追加します。
   catDB.Tables.Append tbl

   Set catDB = Nothing
End Sub

CreateAutoNumberField プロシージャは、Office 2000 Developer CD-ROM のODETools\V9\Samples\OPG\Samples\CH14 サブフォルダに含まれる DataAccess.mdb サンプル ファイルの CreateDatabase モジュールにあります。

次は、フィールドの DAO Attributes プロパティの定数と、数値の自動追加型フィールドの ADO プロバイダ別 Column プロパティ、およびその他の対応表です。

Access ユーザー
インターフェイスのデータ型
DAO Attributes
プロパティ定数
ADOX プロバイダ別 Column
プロパティ
オートナンバー型 dbAutoIncrField AutoIncrement

True に設定

Numeric フィールドの既定値 (Text フィールドのユーザー インターフェイスからは使用不可) dbFixedField ColumnAttributes

adColFixed に設定

ハイパーリンク型 dbHyperlinkField Jet OLEDB:Hyperlink

True に設定
(Memo フィールドのみ— adLongVarWChar データ型)

該当なし dbSystemField 該当なし
Text フィールドの既定値 dbVariableField ColumnAttributes

Not adColFixed に設定

ADOX Column オブジェクトの Properties コレクションを使用して設定できるその他のフィールド プロパティの詳細については、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Appendixes フォルダに含まれる ADOProperties.doc の「Column オブジェクトの Properties コレクション」を参照してください。

テーブルの詳細プロパティを設定する

テーブルに関する説明に使用する Description プロパティ、レコードに入力されるデータの条件を指定する式の入力に使用する ValidationRule プロパティなど、テーブル レベルのプロパティを設定することも可能です。次の表は、ADOX Table オブジェクトの Properties コレクションを使用して定義できる 3 つのプロバイダ別テーブル プロパティです (リンクされたテーブルの作成に使用するものを除く)。

Access/DAO Table プロパティ Microsoft Jet 4.0 OLE DB プロバイダのプロバイダ別プロパティ
Hidden Jet OLEDB:Table Hidden In Access
ValidationRule Jet OLEDB:Table Validation Rule
ValidationText Jet OLEDB:Table Validation Text

テーブル検証ルールを作成するサンプル コードは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH14 サブフォルダ中に収録されている DataAccess.mdb の CreateDatabase モジュールにある CreateTableWithValidationRule プロシージャを参照してください。

Microsoft DAO 3.6 オブジェクト ライブラリへの参照を確立し、DAO コードを使用してプログラムから残りのテーブル プロパティ (Description、Filter、OrderBy、LinkChildFields、LinkMasterFields、SubdatasheetExpanded、SubdatasheetName、および SubdatasheetHeight) を設定してください。これらのプロパティ使用の詳細については、Microsoft Access のヘルプを参照してください。