ADOXでAccessのテーブルの列一覧を表示するプログラムを作成しています。
表示順が列名の昇順になってしまいます。
Accessのテーブルのデザインで登録したのと同じ並び順で表示したいのですが・・・
For Each In mCat.Tables("テーブル名").Columns
Me.cboList1.additem col.Name
Next
ご教授願います。
Each を使わず、Columns を1からカウントして
順に取り出して下さい。
特攻隊長まるるうさん、ありがとうございます。
早速やってみます。
ADOX ではなく、ADODBライブラリの方を使うとか。
# 昔、某所に投稿したサンプルより引用。
# 結果をファイルに吐いてますが、不要なら、適当に修正してみてください。
Public Sub TableInfo(ByVal conJet As ADODB.Connection, _
ByVal TableName As String, _
Optional ByVal ResultText As String = "C:\A.TXT")
Dim RS As ADODB.Recordset
Dim intFileNo As Integer
'列情報を取得する
conJet.CursorLocation = adUseClient
Set RS = conJet.OpenSchema(adSchemaColumns, _
Array(Empty, Empty, TableName))
'本来の列の並び順でソートする
'(adUseServerの時は、ソートできません)
RS.Sort = "ORDINAL_POSITION ASC"
'結果出力
intFileNo = FreeFile()
Open ResultText For Output As #intFileNo
'--- ヘッダ部
Write #intFileNo, "列名", "初期値", "値要求", "データ型",
Write #intFileNo, "サイズ", "バイト数", "説明"
'--- データ部
Do Until RS.EOF
Write #intFileNo, RS.Collect("COLUMN_NAME"),
Write #intFileNo, RS.Collect("COLUMN_DEFAULT"),
Write #intFileNo, RS.Collect("IS_NULLABLE"),
Write #intFileNo, RS.Collect("DATA_TYPE"),
Write #intFileNo, RS.Collect("CHARACTER_MAXIMUM_LENGTH"),
Write #intFileNo, RS.Collect("CHARACTER_OCTET_LENGTH"),
Write #intFileNo, RS.Collect("DESCRIPTION")
RS.MoveNext
Loop
'後始末
RS.Close
Set RS = Nothing
Close #intFileNo
End Sub
ツイート | ![]() |