I would recommend calculating the status. You can easily do this by creating a Function in a module, and then adding a field to the query that is feeding the report or form. If you use an UPDATE query the data will be stale. I would also agree with Healdem create a small table with your statuses in it:
Status ID---------StatusDescription
1-----------------Expiring Soon
2-----------------Expired
.
.
etc.
Then create a little function that uses the date to determine the status:
Code:
Public Function GetStatus(varDate As Variant) As Long
Dim datExpirationDate As Date
Dim booMissingDate As Boolean
Dim lngDaysUntilExpiration As Long
booMissingDate = IIf(Nz(varDate, True), True, False)
If booMissingDate Then
GetStatus = 4
Else
datExpirationDate = varDate
lngDaysUntilExpiration = DateDiff("d", Date, datExpirationDate)
Select Case lngDaysUntilExpiration
Case Is < 1
'Expired
GetStatus = 2
Case 1 To 90
'Expiring soon
GetStatus = 1
Case Else
GetStatus = 3
End Select
End If
End Function
Then add a field in your query GetStatus([ExpirationDate]) As Status. And finally join the Status field with the tblStatus to get the StatusDescription.
The other benefit to having a tblStatus table is if someone wants the status decriptions to be different you only have to change it once in the table.