HOME > このページ
テーブルにインデックスを設定して検索(DAO)
 以下の例はテーブルのフィールドにインデックスを作成してSeekメソッドを利用して検索する方法です。データベースウインドウでインデックスを付けたいテーブルをデザインモードで開き、[表示]-[インデックス]を選択しするとインデックスを作成するダイアログボックスが開きます。インデックス名を入力してフィールドと並べ替え順序を選択するとインデックスを作成できます(こちらを参照)。
 ここではテーブル「T_住所」の「郵便番号」フィールドに「番号検索」という名前のインデックスをVBAで作成し、フォーム上のコントロール「郵便番号」が更新されたとき、このコントロールの値で「T_住所」テーブルを検索し、検索結果の住所をフォーム上のコントロール「住所」に値を代入するプログラムを紹介します。Seekメソッドについてはこちらを参照して下さい。
  Private Sub 郵便番号_AfterUpdate()
    Dim DB As DAO.Database
    Dim RS As DAO.Recordset
    Dim TDF As TableDef
    Dim idxNew As Index
    
    If IsNull(Me.郵便番号) Then
         Exit Sub
    End If
    
    Set DB = CurrentDb

    'インデックスの作成
     On Error Resume Next
     Set TDF = DB!T_住所
      With TDF
        ' 新しくIndexオブジェクトを作成し
        ' Field オブジェクトをその Fileds コレクションに追加します。
        Set idxNew = .CreateIndex("番号検索")
        idxNew.Fields.Append .CreateField("郵便番号")
        ' 新規にIndexオブジェクトを T_住所 のIndexesコレクションに追加します。
        .Indexes.Append idxNew
        .Indexes.Refresh
      End With
     On Error GoTo 0
     
  ’インデックスを利用して検索 
     Set RS = DB.OpenRecordset("T_住所")
     RS.Index = "番号検索"
     RS.Seek "=", Me.郵便番号
    
     If RS.NoMatch = False Then
           Me.住所 = RS!住所
     Else
         MsgBox "該当するj住所は見つかりませんでした。" & vbCrLf & _
                   "住所登録をして下さい。"
     End If

    Set RS = Nothing
    'インデックスを削除
    TDF.Indexes.Delete "番号検索"

    Set DB = Nothing
End Sub
  

ホームページに|前のページに|次のページに

CopyRight(C) 2004 cbcnet. All Rights Reserved