お世話になります。
今、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を参照設定しております。
どなたかご教授ください。
No.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
こんな感じでどうでしょう?
venzoさん!お返事ありがとうございました(><)!!
なるほど!
Feildの情報なので、Feildオブジェクトのプロパティばかり意識してましたが、TableDefオブジェクトなのですね(><)!!
ほんっとに助かりました。勉強になりました!
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのフィールド名に半角括...
-
ADOをし使用して、Accessのテー...
-
クリスタルレポート(8.5)の書式...
-
(ADO)フィールド名から取得し...
-
accessでフィールド追加のあと...
-
Access :ALTER TABLE で作成...
-
AccessのDAOでフィールド名を配...
-
クリスタルレポートで文字列の...
-
【Win32 API】 フックしたメッ...
-
Access VBA 添付型フィールド
-
c言語で自分のホームディレク...
-
C#で変数名の取得
-
Access 2010で実行時エラー3061
-
【C#】private変数名を取得したい
-
Access クエリで変数を参照する...
-
DataTableに特定のフィールドが...
-
2つ目のレコードの値を取得す...
-
INT64対応のprintf系関数はあり...
-
フィールド名をループの添え字...
-
クリスタルレポートで困ってい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのフィールド名に半角括...
-
DataTableに特定のフィールドが...
-
accessでフィールド追加のあと...
-
INT64対応のprintf系関数はあり...
-
2つ目のレコードの値を取得す...
-
Access 2010で実行時エラー3061
-
日付と文字列を条件としてDLook...
-
AccessのDAOでフィールド名を配...
-
SQLで複数のテーブルと結合した...
-
テーブルのデータ型の変更がで...
-
フィールド名をループの添え字...
-
クリスタルレポート(8.5)の書式...
-
AccessVBAで他テーブルのデータ...
-
Accessの画像挿入のVBAコード
-
アクセスでADO 並べ替えが適用...
-
NULLを含む文字列の結合で...
-
クリスタルレポートで文字列の...
-
ACCESSデータベースにV...
-
ノーツ:ユーザ名から別名を取...
-
Access クエリで変数を参照する...
おすすめ情報