look up field in previous record

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.
buzzcarterAsked:
Who is Participating?
 
harfangCommented:
Hi,

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
    Else
        Me.LastFL = LastFlightLog
        ' etc. filling the other controls
    End If

Cheers!
(°v°)
0
 
buzzcarterAuthor Commented:
Sweet!

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
Else
    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.
Buzz
0
 
harfangCommented:
Thanks for the compliment, glad it worked!
Good luck with your project.
(°v°)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.