ACC97: First and Last Functions Return Unexpected RecordsID: Q189391
|
Moderate: Requires basic macro, coding, and interoperability skills.
In the Totals row of the query design grid, you can choose the First() or
Last() function to return the value of a specified field in the first or
last record, respectively, of the result set returned by the query.
However, these functions may appear to return arbitrary values because the
records are returned in an order that may not be apparent.
Additionally, in an expression, the First() and Last() functions do not
return the first and last records of the specified table or query as you
expect. If the source is a query, the First() and Last() functions appear
to ignore the sort order of the query. If the source is a table, the
First() and Last() functions appear to ignore the order of the current
index or primary key.
Likewise, the DFirst() and DLast() functions do not return the first and
last records of the specified domain as you expect.
This article describes methods that you can use to return the first and
last values based on specific criteria.
Parts of this article assume 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 the "Building
Applications with Microsoft Access 97" manual.
The First(), Last(), DFirst(), and DLast() functions ignore sort orders and indexes, and primary keys. These functions are intended to return data from the first or last undeleted record entered into the table, not from the first or last record in a given sort order.
In some cases, compacting the database may return the results you want. To
ensure that the results will always be consistent, use one or more of the
following procedures.
In order to obtain the expected first and last records, you should organize
the recordset data in a predictable sequence. You can do this by using any
of the following three methods.
NOTE: The following examples use the sample database Northwind.mdb.
http://www.microsoft.com/mcsp/For more information about the support options available from Microsoft, please see the following page on the World Wide Web:
http://www.microsoft.com/support/supportnet/overview/overview.aspTo display the first and last Order date in the Orders table of the sample database Northwind.mdb, follow these steps:
Sub GetFirstRecord()
Dim DB As Database, RS As Recordset
' Use the currently opened Northwind database.
Set DB = CurrentDb
' Open the Orders table as a Dynaset Type Recordset.
Set RS = DB.OpenRecordset("Orders", dbOpenDynaset)
' Move to the first record in the recordset.
RS.MoveFirst
MsgBox "The first order date is " & RS!OrderDate
' Move to the last record in the recordset.
RS.MoveLast
MsgBox "The last order date is " & RS!OrderDate
' Close the recordset and database.
RS.Close: DB.Close
End Sub
Set RS = DB.OpenRecordset("Orders")
The Remarks section of the Help File topic, "First, Last Functions" incorrectly states that unless the query includes and ORDER BY clause, the order of records returned will be arbitrary. The correct information is that the order of records returned by the First() and Last() functions is not affected by the ORDER BY clause.
Keywords : kbdta QryOthr
Version : WINDOWS:97
Platform : WINDOWS
Issue type : kbprb
Last Reviewed: July 6, 1999