We help IT Professionals succeed at work.

look up field in previous record

buzzcarter asked
Medium Priority
Last Modified: 2008-02-26
I have a Form where the user can scoll thought records and edit them.  As a new record is current I need to display in a textbox the some previous record fields that matches criteria from the current record.

I am trying to use DLast but it is not consistent.  The first record seems to display the information correctly and as the user scolls the previous record information matches the criteria but skips a record or two that is more current.

      'LastFlightRec is a Query
Public LastFlightLog
Public OldPFB
Public OldGOB

Private Sub Form_Current()
      'This is the line that returns the incorrect record.  Although the criteria is correct.
LastFlightLog = DLast("[ID]", "LastFlightRec", "[Nnumber] = [TailNumber] AND [ID]< " & Me.IDest)

If IsNull(LastFlightLog) Then Exit Sub
Me.LastFL = LastFlightLog
OldPFB = DLast("[PriceOfFOB]", "LastFlightRec", "[ID]= " & LastFlightLog)
Me.LastFuel = OldPFB
OldGOB = DLast("[GalsOnB]", "LastFlightRec", "[ID]= " & LastFlightLog)
If Me.GndFuel > 0 Then OldGOB = Me.GndFuel / 6.75
Me.LastGals = OldGOB
Me.LastLbs = Round(OldGOB * 6.75, 0)

End Sub

This is the results: The current displayed record [ID] = 480;  Previous Record is displayed [ID] =474; But there is a record in the Query with [ID]=478 that matches the criteria.  The Query is sorted on [ID];Desc

Am I giving to much information?  Just trying to give you the picture.
Watch Question


You are right, DLast is not consistent. It will mangle the sort order of your query when adding the WHERE clause. You will need your own custom function to find a "last" record using a specific sort order (tell me if you need it)

However, from the look of it, you actually want the "highest" ID below the current one. You can get this by using DMax() instead:

    LastFlightLog = DMax("ID", "LastFlightRec", "Nnumber=TailNumber AND ID<" & Me.IDest)

BTW: the criteria "Nnumber=TailNumber" could be included in the quey if you do not use if for other purposes.

Ah, and you should also manage the IsNull case, as in:

    If IsNull(LastFlightLog) Then
        Me.LastFL = Null
        ' etc. setting other controls to Null
        Me.LastFL = LastFlightLog
        ' etc. filling the other controls
    End If


Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts



With your input my code now is

LastFlightLog = DMax("[ID]", "LastFlightRec", "[ID]< " & Me.IDest)
If IsNull(LastFlightLog) Then
    Me.LastFL = Null
    Me.LastFuel = Null
    Me.LastGals = Null
    Me.LastLbs = Null
    Me.LastFL = LastFlightLog
    OldPFB = DLookup("[PriceOfFOB]", "LastFlightRec", "[ID]like " & LastFlightLog)
    Me.LastFuel = OldPFB
    OldGOB = DLookup("[GalsOnB]", "LastFlightRec", "[ID]like " & LastFlightLog)
    If Me.GndFuel > 0 Then OldGOB = Me.GndFuel / 6.75
    Me.LastGals = OldGOB
    Me.LastLbs = Round(OldGOB * 6.75, 0)
End If

I'll search the remaining code and recode everything that included DLast.

Thank you for the quick answer and the very helpful suggestions.  You make this look easy.

Thanks for the compliment, glad it worked!
Good luck with your project.
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.


Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.