まず、フィールド名の一覧を列挙してみましょう。それには次のコードを実行します。
Dim dbs As Database
Dim tdf As TableDef
Dim fld As Field
Set dbs = CurrentDb
Set tdf = dbs.TableDefs("顧客情報")
For Each fld In tdf.Fields
Debug.Print fld.Name
Next fld
|
ここで、 dbs.TableDefs はデータベースに含まれるテーブルの集まりを示します。そして dbs.TableDefs("顧客情報") でその集まりの中から「顧客情報テーブル」を取り出して Set tdf でTableDefオブジェクトを示す変数にセットしています。
同様に For Each fld In tdf.Fields では、そのテーブルに属するフィールドの集まりから順番にフィールドオブジェクトを取り出しています。
|
T'sKitの「オブジェクトツリー表示」ツールではフィールド名の表示までですが、ここではさらにその下位のフィールドのプロパティを取得してみましょう。
フィールドのデータ型やデータ長など具体的に対象を決めてプロパティ値を調べる前に、フィールドオブジェクトにいったいどのようなプロパティがあるのかを調べる方法を説明します。
それには [Field]オブジェクト に関する属性(プロパティ)の集まりである [Properties]コレクション の1つ1つの中味、つまり [Property]オブジェクト を列挙します。
右の例では"氏名"フィールドに対してプロパティの列挙を行っています。
|
Dim dbs As Database
Dim tdf As TableDef
Dim fld As Field
Dim prp As Property
Set dbs = CurrentDb
Set tdf = dbs.TableDefs("顧客情報")
Set fld = tdf.Fields("氏名")
For Each prp In fld.Properties
Debug.Print prp.Name
Next prp
|
上記のコードを実行すると次のようなプロパティが出力されます。
Value, Attributes, CollatingOrder, Type, Name, OrdinalPosition, Size, SourceField,
SourceTable, ValidateOnSet, DataUpdatable, ForeignName, DefaultValue, ValidationRule,
ValidationText, Required, AllowZeroLength, FieldSize, OriginalValue, VisibleValue,
Description
それでは実際にこれらのプロパティの値を取得してみましょう。すでに目的とするプロパティ名が分かっているので、次のようなコードを作成します。
Dim dbs As Database
Dim tdf As TableDef
Dim fld As Field
Set dbs = CurrentDb
Set tdf = dbs.TableDefs("顧客情報")
Set fld = tdf.Fields("氏名")
With fld
Debug.Print .Attributes
Debug.Print .CollatingOrder
Debug.Print .Type
Debug.Print .Name
Debug.Print .OrdinalPosition
Debug.Print .Size
Debug.Print .SourceField
Debug.Print .SourceTable
Debug.Print .DataUpdatable
Debug.Print .DefaultValue
Debug.Print .ValidationRule
Debug.Print .ValidationText
Debug.Print .Required
Debug.Print .AllowZeroLength
End With
|
※ここでは[Value]プロパティや[Description]プロパティなど、プロパティ値が空の場合や、Recordsetオブジェクトでのみ使用可能なため実行時にエラーとなるプロパティは除外してあります。
また、すべてのプロパティ名とその値を取得したい場合には次のようなコードとなります。
Dim dbs As Database
Dim tdf As TableDef
Dim fld As Field
Dim prp As Property
Set dbs = CurrentDb
Set tdf = dbs.TableDefs("顧客情報")
Set fld = tdf.Fields("氏名")
On Error Resume Next '実行時エラーを無視
For Each prp In fld.Properties
Debug.Print prp.Name, prp.Value
Next prp
【メモ】
Debug.Print fld.Size
Debug.Print fld.Properties("Size").Value
|
上記の方法でテーブルデザインのウィンドウに表示されるフィールド名やデータ型などのプロパティが列挙されるようになりましたが、Accessのウィンドウに表示されているすべてのフィールド情報が揃っていないのにお気づきでしょうか?
実はまだ、"説明"プロパティや"書式"プロパティの情報がありません。これらはAccess固有のプロパティなので、
For Each prp In fld.Properties では取得されません。
これらの値を取得するには Properties!Description のような形式で直接プロパティ名を指定してやる必要があります。以下にそのコードを示します。
|
Dim dbs As Database
Dim tdf As TableDef
Dim fld As Field
Set dbs = CurrentDb
Set tdf = dbs.TableDefs("顧客情報")
Set fld = tdf.Fields("氏名")
'Access固有のプロパティはそれを持っていない
'フィールドもあるのでエラーは無視する
On Error Resume Next
With fld
Debug.Print .Properties!Description '説明
Debug.Print .Properties!Format '書式
Debug.Print .Properties!InputMask '定型入力
Debug.Print .Properties!Caption '標題
End With
|