環境は「VB6.0(SP5) + Access 2000(SP3)」です。ADOでMDBに接続しています。
ADO(2.5 Library)で、指定したテーブルの定義情報を取得したいのですが、どのようにすれば取得できるのでしょうか?
ADOX.Catalogを使用して、テーブル定義一覧は取得できるということは、わかったのですが、指定したテーブルの取得方法がわかりません。
以上、よろしくお願いします。
> 指定したテーブルの定義情報を取得したいのですが
ADOXを使わず、ADODBだけでも取得できますよ。
ConnectionオブジェクトのOpenSchemaメソッドですね。
> 指定したテーブルの取得方法がわかりません。
テーブルの何を取得したいのでしょうか?
テーブルを「ADOX.Tableオブジェクト」として取得したいと言う意味なら、
CatalogオブジェクトのTablesプロパティが使えるかと。
>テーブルの何を取得したいのでしょうか?
ほしい情報は[カラム名]とその情報・・・
・プライマリキーであるか
・Nullを許可するか
・属性(文字列/数値)
・整数桁数
・少数桁数
Oracleでの、
「SELECT * FROM user_ind_columns」と
「SELECT * FROM user_tab_columns」といった情報がほしいのです。
現在、以下のようにして、情報を取得しようとしていますが、Valueで取得ができないようです。
Dim con As New ADODB.Connection
Dim rec As New ADODB.Recordset
Set rec = con.OpenSchema(adSchemaColumns, Array(Empty, Empty, "Aテーブル", "TABLE"))
For i = 0 To rec.fields.count -1
Debug.Print rec.fields(i).Name
Debug.Print rec.fields(i).value
Next i
指定(Aテーブル)はあるのですが、取得ができていません。見ているプロパティがおかしいのでしょうか?
> Dim rec As New ADODB.Recordset
あれ? 何故ここで、New が使われているのでしょうか?
> For i = 0 To rec.fields.count -1
その前に、EOFの確認をしないと。
> Set rec = con.OpenSchema(adSchemaColumns, Array(Empty, Empty, "Aテーブル", "TABLE"))
> 指定(Aテーブル)はあるのですが、取得ができていません。
[Aテーブル]に、[TABLE]という列が無いのでは?
とりあえず、条件指定は後にして、全件取得から始めてみては如何でしょう。
デバッグ段階では、DataGridに表示させると簡単に確認できますよ。
Set con = New ADODB.Connection
con.Provider = "Microsoft.Jet.OLEDB.4.0"
con.CursorLocation = adUseClient
con.Open "BIBLIO.MDB" 'VB添付のmdbファイル
Set Me.DataGrid1.DataSource = con.OpenSchema(adSchemaColumns)
指摘、アドバイス、ありがとうございます。
DataGridに表示したら、よくわかりました!
OpenSchemaメソッドのArray(〜)では、Field.Nameの指定を前から順に行っていたんですね。大変わかりやすかったです。
現時点で、プライマリキーの情報がどの項目なのかがどれかがちょっとわかりませんが、
それ以外のテーブル情報は取得できました。
属性をあらわす「DATA_TYPE」が数値で返ってくるようですが、これは定数で定義されているのでしょうか?(vbNo = 7であるように)
MDAC SDKを見てください…。(^_^;)
(adSchemaColumnsの仕様等について、調査されていますか?)
> プライマリキーの情報がどの項目なのかがどれかがちょっとわかりませんが
adSchemaColumnsで取得できるのは、列のスキーマです。
インデックスのスキーマが必要であれば、adSchemaIndexes が利用できます。
> 「DATA_TYPE」が数値で返ってくるようですが、これは定数で定義されているのでしょうか
列挙定数としては、ADODB.DataTypeEnumが該当します。
重ね重ね、ありがとうございます。
MDAC SDKに書いてあったようで、失礼しました。
検索の仕方が悪かったようですが、そこで調べればよかったのですね。
おかげさまで、問題は解決できました。