定義情報(スキーマ情報)を調べる

定義情報(スキーマ情報)を調べる

Sub スキーマ情報取得()
Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset, mySrc As String
Dim i As Integer

'接続先のExcelファイル
mySrc = ThisWorkbook.Path & "\xls\DataBook.xls"

'接続
With myCon
  .Provider = "Microsoft.Jet.OLEDB.4.0;"
  .Properties("Extended Properties") = "Excel 8.0;"
  .Open mySrc
End With

'テーブル情報(TABLES 行セット)を取得
Set myRS = myCon.OpenSchema(adSchemaTables)

'フィールド名を書き出し
For i = 1 To myRS.Fields.Count
  Cells(1, i) = myRS.Fields(i - 1).Name
Next

'取得した情報を転記
Range("A2").CopyFromRecordset myRS

myRS.Close: Set myRS = Nothing
myCon.Close: Set myCon = Nothing

End Sub

スキーマ情報を得るにはConnectionオブジェクトのOpenSchemaメソッドにどのようなスキーマ情報を取得したいのかSchemaEnum列挙型の定数で指定する。
OpenSchemaメソッドを実行すると、スキーマ情報の結果セットを返すので、それをRecordsetオブジェクトで受け取って、検索・転記などの処理を行う。

OpenSchemaメソッドでスキーマ情報を得る。 (テーブルに関する情報)
Set myRS = myCon.OpenSchema(adSchemaTables)

SchemaEnum列挙型の例
定数 説明 制約列
adSchemaTables 20 テーブル、ビュー情報を取得
(TABLES 行セット)
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
TABLE_TYPE
adSchemaColumns 4 フィールド情報を取得
(COLUMNS 行セット)
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
adSchemaPrimaryKeys 28 各テーブルの主キー情報を取得
(PRIMARY_KEYS 行セット)
PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
adSchemaProcedures 16 クエリ、ストアドプロシージャ情報を取得
(PROCEDURES 行セット)
PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PROCEDURE_TYPE

実行結果