Access テーブルを作成および修正する
Microsoft Office 2000/Visual Basic プログラマーズ ガイド |
ADOX のオブジェクト、メソッド、プロパティを使用して Access データベースの構造を表示、作成、修正することができます。以下に続くトピックでは、これらの方法について説明します。
ヒント トランザクションを使用して、データベースの構造に加えた一連の変更をラップすることができます。これには、トランザクションを変更のラッパーとして使用して、すべての作業が 1 つの単位として実行されるようにします。トランザクションの使用方法については、第 16章「マルチユーザー データベース ソリューション」 の「トランザクションの使用方法」を参照してください。
テーブルを作成する
ADOXを使用してテーブルを作成するには
テーブルを追加するデータベースの Catalog オブジェクトを開きます。
新しい Table オブジェクトを作成します。
Columns コレクションの Append メソッドを使用してフィールド定義 (Column オブジェクト) を新しい Table オブジェクトの Columns コレクションへ追加します。
作成した新しい 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 に設定 |
該当なし | 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 のヘルプを参照してください。