Yes, you most certainly should only retreive one record at a time.
The best way to achieve this is to build a nice form that is UN-BOUND. This
form can prompt the user for a invoice number.
You can use the avert update event. You could go:
dim strWhere as string
strWhere = "invoiceNum = " & me.txtSearch
docmd.Openform "Customers",,,strWhere
If you wanted to search by name, you could use:
strWhere = "LastName = '" & me.TxtSearch & "'"
etc.
Thus, when your form loads, only the one record will be sent down the write.
You will find performance the same with 10 or 100, or 10,000 or even 200,000
records, the form load will be instant even on a network.
Another nice thing to do is to take the above search, and shove the results
into a sub form. This might cause a few records to load, but for files in
the 100,000 record range, the response will still be instant.
Here is some screen shots of a nice prompt from that uses the above idea:
http://www.attcanada.net/~kallal.msn/Search/index.html