アクセスのインデックスに設定されているフィールド名の取得

解決


唯香  2007-06-06 22:27:45  No: 98895

いつもお世話になっております。

アクセスのインデックス名とその対象のフィールド名が取得したいです。
インデックス名は以下のようにすると取得できましたが
フィールド名を取得する方法が検討がつかなくなってしまいました。

根本的に以下の方法ではインデックスと
その対照のフィールド名を取得することは不可能なのでしょうか?

???のところでidx.Fileldsとすると
フィールド名が"+"付きで取得できているように思うのですが
mid(idx.Fields,2)でフィールド名を取得して問題ないのでしょうか?

Set db = DBEngine.OpenDatabase(txtDir.Text, , True)
For i = 0 To db.TableDefs.Count - 1
    Select Case Left$(db.TableDefs(i).Name, 4)
        Case "MSys"
        Case "USys"
        Case Else
            For Each idx In db.TableDefs(i).Indexes
                'インデックス名の取得
                MsgBox idx.Name
                'フィールド名の取得
                '???
            Next
    End Select
Next
Set db = Nothing

vb6/access2000

ご存知の方がいらっしゃいましたらご教授お願いします。


魔界の仮面弁士  2007-06-06 23:35:03  No: 98896

> For Each idx In db.TableDefs(i).Indexes
>   'インデックス名の取得
>   MsgBox idx.Name
>   'フィールド名の取得

DAO の場合は、上記から idx.Fields を For Each すれば OK かと。
ADO の場合は、Connection.OpenSchema(adSchemaIndexes) で OK。


魔界の仮面弁士  2007-06-06 23:42:09  No: 98897

> ???のところでidx.Fileldsとすると
idx.Filelds ではなく、
idx.Fields です。

> フィールド名が"+"付きで取得できているように思うのですが
> mid(idx.Fields,2)でフィールド名を取得して問題ないのでしょうか?
駄目でしょう。複数の列で構成されるインデックスもあるのですし。

Dim fs As Object  'DAO.IndexFields
Set fs = idx.Fields
Debug.Print CStr(fs)     '恐らく、左記に相当する情報を見たのだと思いますが、
Debug.Print fs(0).Name   '本当に得たいのは、左記のような情報ですよね。


唯香  2007-06-07 00:10:47  No: 98898

魔界の仮面弁士様 さっそくのご返事ありがとうございます。

> > ???のところでidx.Fileldsとすると
> idx.Filelds ではなく、
> idx.Fields です。
すみません。
まさかFieldsくらいでスペルをミスするとは情けないです。

> > フィールド名が"+"付きで取得できているように思うのですが
> > mid(idx.Fields,2)でフィールド名を取得して問題ないのでしょうか?
> 駄目でしょう。複数の列で構成されるインデックスもあるのですし。
ご指摘を受けて気がつきました。大変参考になりました。

すみません。説明不足でした。
おっしゃる通りFor EachでFieldsを取得していけば
フィールド名を全て取得できるのですが
インデックスに指定されているフィールドだけを取得したいです。
アクセスをデザインで開いて[インデックス]ボタンを押したときに表示される
[インデックス名]と[フィールド名]だけを取得することはできますか?


魔界の仮面弁士  2007-06-07 00:34:27  No: 98899

> インデックスに指定されているフィールドだけを取得したいです。
全部のフィールドを取得したいなら、TableDef の Fields ですが(DAO.Fields)、
私が回答しているのは、Index の Fields ですので(DAO.IndexFields)、
大丈夫だと思ったのですが……うまく取得できませんでしたか?

もし、Index.Fields で取得できないようであれば、先に回答した
もう一つの方法を試してみてください。


唯香  2007-06-07 01:04:24  No: 98900

> Debug.Print fs(0).Name   '本当に得たいのは、左記のような情報ですよね。
DAOで欲しいフィールド情報が取得できました。
理解が足らなかったようで申し訳なかったです。

ご説明いただきありがとうございました。
大変勉強になりました。ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加