Microsoft Access Club >DAO入門講座 >このページ >次頁 < 前項  サイト内検索
 

インデックスの作成 : DAO入門講座



前回の「テーブル作成」では、DAOを用いて住所録テーブルとID、氏名、住所フィールド を作成しました。しかし、検索時に重要なインデックス(Index)の作成 は行っていませんでしたね。Seekメソッドを用いる場合では、検索対象とするフィールドにインデックス設定を必ず行わなければいけません。

今回、このインデックス設定をDAOを用いて行ってみます。

  • DAOでインデックスは、Indexesコレクションで管理されています。よって、インデックスを作成するということは、1つ以上のFieldオブジェクトを持つIndexオブジェクトを作成して、Indexesコレクションに追加することを意味します。
  • Indexオブジェクトの作成は、新規テーブル作成時に一緒に行うこともできますし、既に作成済みのテーブルフィールドに追加することもできます。
  • 単にレコードデータの格納であれば、Indexオブジェクトを作成する必要もありません。このところは、ご自分の環境に合わせて対処しましょう。

Index作成の手順

Indexを作成する際には、下記の点に注意が必要です。

  1. Indexオブジェクトを作成するには、TableDefオブジェクトにある CreateIndexメソッド を用いてます。
  2. インデックスを構成するフィールドの作成は、IndexオブジェクトのCreateFileldメソッドを用います。
  3. オブジェクトのコレクションへの追加は、階層の低い方から順番に行っていく必要があります。
  4. IndexオブジェクトのCreateFileldメソッドは、TableDefオブジェクトのDreateFieldメソッドとは異なります(引数が異なります)。
  5. Appendメソッドで各コレクションに追加していきます。
作成手順

作成手順は、下記のようになります。

  1. Indexオブジェクトを作成する。
  2. Indexesコレクションに追加する。 

なお、新規テーブル作成時にIndex設定を行う場合の手順は、以下のとおりです。下線箇所がIndex作成で追加されたものです。

  1. TableDefオブジェクト(テーブル本体)を作成する。
  2. Fieldオブジェクト(1つ以上のテーブルを構成するフィールド)を作成する。
  3. Fieldオブジェクトを作成し、Fieldsコレクションに追加する。 
  4. Indexオブジェクトを作成する。
  5. インデックスを構成するFieldオブジェクト(Indexオブジェクト内の・・・)を作成する。
  6. Fieldオブジェクトを、IndexオブジェクトのFieldコレクションに追加する。
  7. IndexオブジェクトをTableDefオブジェクトのIndexesコレクションに追加する。
  8. TableDefオブジェクトを作成し、TableDefsコレクションに追加する。
テーブルの作成

前回のテーブル作成のプロシージャに、インデックス作成機能を付加(太字の部分)します。このプロシージャを実行すると、ID、氏名、住所フィールドを持つ「住所録」テーブルが作成され 、IDフィールドに昇順設定のインデックスを作成します。

Sub MyTableCreate()

On Error GoTo エラー

    Dim db As DAO.Database
    Dim tbdef As DAO.TableDef
    Dim flid As DAO.Field
    Dim flname As DAO.Field
    Dim fladr As DAO.Field
    Dim idx As DAO.Index ' --- A

    Set db = CurrentDb
    Set tbdef = db.CreateTableDef("住所録")
    
    Set flid = tbdef.CreateField("ID", dbInteger)
    Set flname = tbdef.CreateField("氏名", dbText, 20)
    Set fladr = tbdef.CreateField("住所", dbText, 50)
    
    tbdef.Fields.Append flid
    tbdef.Fields.Append flname
    tbdef.Fields.Append fladr
    
    Set idx = tbdef.CreateIndex("Get_ID") ' --- B
    Set flid = idx.CreateField("ID") ' --- C
    
    idx.Fields.Append flid ' --- D
    tbdef.Indexes.Append idx ' --- E
    
    db.TableDefs.Append tbdef
    
    MsgBox "テーブル作成が完了しました。"

    db.Close: Set db = Nothing
    
    Exit Sub
    
エラー:

    If Err.Number = 3010 Then
        db.TableDefs.Delete "住所録"
        Resume
    Else
        MsgBox Err.Number & " : " & Err.Description
    End If

    Exit Sub

End Sub
解説
  1. Index型のオブジェクト変数を宣言します。
  2. Setステートメントを用いて、Get_IDというインデックスを作成します。
  3. インデックスを構成するフィールドを作成します。CreateFieldメソッドの引数には、住所録テーブルのフィールド名を指定します。
  4. 作成したFieldオブジェクト(オブジェクト変数Flid)をAppendメソッドを用いてFieldsコレクションに追加します。
  5. 作成したIndexオブジェクト(オブジェクト変数idx)をAppendメソッドを用いてIndexesコレクションに追加します。
実行結果

上記のプロシージャを実行すると、下記のようにインデックスが設定されたテーブルが作成されます。

該当テーブルをデザインビューで開き、メニューバー → 表示 → ツールバーをクリックし下記のダイアログを開きます。インデックス名が確認できます。

既テーブルフィールドへインデックス設定

何もテーブル作成時のみインデックス作成を行えるのではありません。既に作成したテーブルに対してもインデックスを作成できます。

Sub MyTableCreate2()

On Error GoTo エラー

    Dim db As DAO.Database
    Dim tbdef As DAO.TableDef
    Dim fld As DAO.Field
    Dim idx As DAO.Index

    Set db = CurrentDb
    Set tbdef = db.TableDefs("住所録")
        
    Set idx = tbdef.CreateIndex("Get_ID")
    Set fld = idx.CreateField("ID")
    
    idx.Fields.Append fld
    tbdef.Indexes.Append idx
        
    MsgBox "インデックスの設定が完了しました。"

    db.Close: Set db = Nothing
    
    Exit Sub
    
エラー:

    MsgBox Err.Number & " : " & Err.Description
    Exit Sub

End Sub

ここでのポイントは、TableDefsコレクションの設定です。他は大差ありません。

2004/06/05

ページの先頭へ 前ページへ戻る

 


インデックスの作成 : DAO入門講座


 

-Microsoft Access Club-

注目のモンスター専用サーバーからお買い得プランまで幅広くそろえています。cPanel、PLESK、WEBMINまでお任せ下さい。
注目のモンスター専用サーバーからお買い得プランまで幅広い。
cPanel、PLESK、WEBMINまでお任せ下さい。