ACC: How to Use Seek Method with Multiple-Field Index

ID: Q109710


The information in this article applies to:
  • Microsoft Access versions 1.0, 1.1, 2.0, 7.0, 97


SUMMARY

Advanced: Requires expert coding, interoperability, and multiuser skills.

This article shows you how to use the Seek method when your table's primary key or index includes more than one field. Note that when you use the Seek method on multiple fields, the Seek fields must be in the same order as the fields in the underlying table. If they are not, the Seek method will fail.

This article assumes that you are familiar with Visual Basic for Applications and with creating Microsoft Access applications using the programming tools provided with Microsoft Access. For more information about Visual Basic for Applications, please refer to your version of the "Building Applications with Microsoft Access" manual.

NOTE: Visual Basic for Applications is called Access Basic in Microsoft Access versions 1.x and 2.0. For more information about Access Basic, please refer to the "Introduction to Programming" manual in Microsoft Access version 1.x or the "Building Applications" manual in Microsoft Access version 2.0


MORE INFORMATION

When you use the Seek method to find a record using the primary key, you need to supply a value for each field in the primary key. If you cannot supply values for all the fields in the primary key, use >= instead of = for the Comparison argument.

In Microsoft Access 1.x, multiple-field indexes are named Index1, Index2, Index3, Index4, or Index5, corresponding to the two-field index created in the table. In Microsoft Access 2.0 and later, multiple-field index names can be customized. All versions of Microsoft Access refer to a multiple- field primary key index as PrimaryKey.

The following example demonstrates how to use the Seek method on a table with a multiple-field primary key.

  1. Open the sample database Northwind.mdb (or NWIND.MDB in version 1.x or 2.0).


  2. Create a new module and type the following procedure:

    In Microsoft Access 2.0 and later:
    
          '********************************************************
          ' Declarations section of the module
          '********************************************************
    
          Option Compare Database
          Option Explicit
    
          '**************************************************
          ' This function uses Seek on a two-field PrimaryKey
          '**************************************************
    
          Function SeekOnMultiFields()
             Dim db As Database, tbl As Recordset
             Set db = CurrentDB()
             Set tbl = db.OpenRecordset("Order Details")
    
             tbl.Index = "PrimaryKey"
             tbl.Seek "=", 10300, 68
             ' If you are only supplying one value, the statement above
             ' becomes:  tbl.Seek ">=", 10300
    
             If tbl.NoMatch Then
                MsgBox "Not a record. Try another"
             Else
                MsgBox "The Record is in the table"
             End If
             tbl.Close
          End Function 
    In Microsoft Access 1.x:
    
          '********************************************************
          ' Declarations section of the module
          '********************************************************
    
          Option Compare Database
          Option Explicit
    
          '**************************************************
          ' This function uses Seek on a two-field PrimaryKey
          '**************************************************
    
          Function SeekOnMultiFields()
             Dim db As Database, tbl As Table
             Set db = CurrentDB()
             Set tbl = db.OpenTable("Order Details")
    
             tbl.Index = "PrimaryKey" ' Or "Indexn" for other multi-field index
    
             tbl.Seek "=", 10300, 68
             ' If you are only supplying one value, the statement above
             ' becomes:  tbl.Seek ">=", 10300
             If tbl.NoMatch Then
                MsgBox "Not a record. Try another"
             Else
                MsgBox "The Record is in the table"
             End If
             tbl.Close
          End Function 


  3. Type the following line in the Debug Window (or Immediate window in version 1.x or 2.0) and then press ENTER:
    ? SeekOnMultiFields()
    Note that you receive the message "The Record is in the table."



REFERENCES

For more information about the Seek method, search for Seek method, and then Seek Method (DAO), using the Microsoft Access 97 Help Index.

Additional query words: multi-field index

Keywords : kbprg
Version : WINDOWS:1.0,1.1,2.0,7.0,97
Platform : WINDOWS
Issue type : kbhowto


Last Reviewed: October 14, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.