Salakhetdinov Shamil
mcp2004 at mail.ru
Thu Feb 19 05:01:55 CST 2009
Hi Rocky,
Good old DAO's .Seek should do the trick.
You'll have to create dedicated compound index for it.
--
Shamil
P.S. .Seek code sample for the Northwind's Products table and one field index named ProductName:
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Products", dbOpenTable)
With rst
.Index = "ProductName"
.Seek "=", "Aniseed Syrup"
If (.NoMatch) Then
Debug.Print "Found"
Else
Debug.Print "Found"
End If
End With
P.P.S. .Seek code sample for Northwind db and Customers table with additional compound index named Contact created using ContactTitle and ContactName fields:
'Prerequisites:
' Compound index named 'Contact' created
' for ContactTitle and ContactName fields
' of Customers table
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim sql As String
Dim avar As Variant
Dim i As Long
Dim rowCount As Long
Dim foundCount As Long
Dim notFoundCount As Long
Dim cyclesCount As Long
Dim k As Integer
cyclesCount = 1000
Set dbs = CurrentDb
sql = "select CompanyName, ContactName from Customers"
Set rst = dbs.OpenRecordset(sql, dbOpenDynaset)
rowCount = dbs.TableDefs("Customers").RecordCount
avar = rst.GetRows(rowCount)
Debug.Print "Started at = " & Now
Debug.Print "Row count = " & rowCount
foundCount = 0
notFoundCount = 0
Set rst = dbs.OpenRecordset("Customers", dbOpenTable)
For k = 1 To cyclesCount Step 1
For i = LBound(avar, 2) To UBound(avar, 2) Step 1
With rst
.Index = "Contact"
.Seek "=", avar(0, i), avar(1, i)
If (.NoMatch) Then
foundCount = foundCount + 1
Else
notFoundCount = notFoundCount + 1
End If
End With
Next i
Next k
rst.Close
Set rst = Nothing
Debug.Print "Found = " & foundCount
Debug.Print "Not found = " & notFoundCount
Debug.Print "Finished at = " & Now
'
' test results:
'Started at = 19.02.2009 13:54:18
'Row count = 91
'found = 91000
'Not found = 0
'Finished at = 19.02.2009 13:54:19