プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
今、ExcelVBAを使って、Accessのテーブル・フィールド情報を列挙するプログラムを作っているのですが・・・↓
******************************************************
Public Function テーブル_フィールド情報取得関数 As Boolean
Dim DB As DAO.Database
Dim Tableloop As DAO.TableDef
Dim Fld As DAO.Field
Dim Tdf As DAO.TableDef

  'DBオブジェクトを作成
Set DB = DBEngine.Workspaces(0).OpenDatabase("TESUTO.mdb")
'テーブルの数だけ処理をループ
For Each Tableloop In DB.TableDefs
Set Tdf = DB.TableDefs(Tableloop.Name)
'フィールドの数だけ処理をループ
For Each Fld In Tdf.Fields
'「フィールド名」取得
Debug.print Fld.Name
'「フィールド型」取得
Debug.print Fld.Type
'「フィールドサイズ」取得
Debug.print Fld.Properties("Size")
'「主キー」取得
Debug.print Fld.Properties("Primary")
'「インデックス重複許可」取得
Debug.print Fld.Properties("Indexed")
Next Fld
Next Tableloop
End Function
******************************************************
↑どうしても最後の「主キー」と「インデックスの重複許可」の情報を得ようとするとエラーが出てしまいます(:;)。
Excel2000VBA→Access2000[mdb]取り込み→最終的にExcelのシートに、テーブル・フィールド情報を出力。
↑といった流れになるのですが、フィールドが主キーかどうか簡単に調べる方法無いでしょうか?現在はDAO3.6を参照設定しております。
どなたかご教授ください。

A 回答 (1件)

インデックス情報はTableDef.Indexesを調べます。



Public Function テーブル_フィールド情報取得関数() As Boolean
Dim DB As DAO.Database
Dim Fld As DAO.Field
Dim Tdf As DAO.TableDef

Dim Ind As DAO.Index

'DBオブジェクトを作成
Set DB = DBEngine.Workspaces(0).OpenDatabase("c:\temp\test.mdb")
'テーブルの数だけ処理をループ
For Each Tdf In DB.TableDefs

'システムテーブルは処理しない
If Tdf.Attributes > 0 Then

'フィールドの数だけ処理をループ
For Each Fld In Tdf.Fields
'「フィールド名」取得
Debug.Print Fld.Name
'「フィールド型」取得
Debug.Print Fld.Type
'「フィールドサイズ」取得
Debug.Print Fld.Size
Next Fld

'インデックスの処理
For Each Ind In Tdf.Indexes
'インデックス名
Debug.Print Ind.Name
'主キーか?
Debug.Print Ind.Primary
'重複不可?
Debug.Print Ind.Unique
'インデックス内のフィールド名
For Each Fld In Ind.Fields
Debug.Print Fld.Name
Next Fld
Next Ind

End If

Next Tdf

End Function

こんな感じでどうでしょう?
    • good
    • 0
この回答へのお礼

venzoさん!お返事ありがとうございました(><)!!

なるほど!
Feildの情報なので、Feildオブジェクトのプロパティばかり意識してましたが、TableDefオブジェクトなのですね(><)!!

ほんっとに助かりました。勉強になりました!
ありがとうございました!

お礼日時:2006/11/21 09:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!