いつもお世話になっております。
アクセスのインデックス名とその対象のフィールド名が取得したいです。
インデックス名は以下のようにすると取得できましたが
フィールド名を取得する方法が検討がつかなくなってしまいました。
根本的に以下の方法ではインデックスと
その対照のフィールド名を取得することは不可能なのでしょうか?
???のところで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
ご存知の方がいらっしゃいましたらご教授お願いします。
> For Each idx In db.TableDefs(i).Indexes
> 'インデックス名の取得
> MsgBox idx.Name
> 'フィールド名の取得
DAO の場合は、上記から idx.Fields を For Each すれば OK かと。
ADO の場合は、Connection.OpenSchema(adSchemaIndexes) で OK。
> ???のところで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 '本当に得たいのは、左記のような情報ですよね。
魔界の仮面弁士様 さっそくのご返事ありがとうございます。
> > ???のところでidx.Fileldsとすると
> idx.Filelds ではなく、
> idx.Fields です。
すみません。
まさかFieldsくらいでスペルをミスするとは情けないです。
> > フィールド名が"+"付きで取得できているように思うのですが
> > mid(idx.Fields,2)でフィールド名を取得して問題ないのでしょうか?
> 駄目でしょう。複数の列で構成されるインデックスもあるのですし。
ご指摘を受けて気がつきました。大変参考になりました。
すみません。説明不足でした。
おっしゃる通りFor EachでFieldsを取得していけば
フィールド名を全て取得できるのですが
インデックスに指定されているフィールドだけを取得したいです。
アクセスをデザインで開いて[インデックス]ボタンを押したときに表示される
[インデックス名]と[フィールド名]だけを取得することはできますか?
> インデックスに指定されているフィールドだけを取得したいです。
全部のフィールドを取得したいなら、TableDef の Fields ですが(DAO.Fields)、
私が回答しているのは、Index の Fields ですので(DAO.IndexFields)、
大丈夫だと思ったのですが……うまく取得できませんでしたか?
もし、Index.Fields で取得できないようであれば、先に回答した
もう一つの方法を試してみてください。
> Debug.Print fs(0).Name '本当に得たいのは、左記のような情報ですよね。
DAOで欲しいフィールド情報が取得できました。
理解が足らなかったようで申し訳なかったです。
ご説明いただきありがとうございました。
大変勉強になりました。ありがとうございます。
ツイート | ![]() |