First some policy matters must be defined. I get the impression you are writing this for a police dept. or at least some public entity that must treat all wrecker services equally. Wrecker services can be very competitive and just plague the heck out of your client if consistent and fair treatment is not given. At the same time, they will pull every trick in the book to get the good assignments. So, you need to ask some more questions up front.
1. If a service refuses an assignment, what happens to that service? Do they go to the back of the line or are they offered the next assignment?
2. What is the policy concerning refusals? Who has authority on the part of the service? Should you record the person who refused the assignment as well as why?
3. What measures will be taken if contact with the service next in line cannot be made? Treat like a refusal?
4. Do wrecker services need to be rated? Are some services more capable than others? Most can tow a Chevy Malibu, but what about a 5 ton truck? What if the wheels are missing, etc?
This may be overkill, but it may also save a lot of application revisions and rewrites.
As to your question about where and when to requery...
Use a LEFT JOIN query to find the next in line. This should be done in the form's OnOpen event.
Code:
"SELECT Wreckers.WreckerID, AbandonedVehicles.LastAssign_Date
FROM Wreckers LEFT JOIN AbandonedVehicles ON Wreckers.WreckerID = AbandonedVehicles.WreckerID ORDER BY AbandonedVehicles.LastAssign_Date,Wreckers.WreckerID;"
Open a recordset using this SQL. If I'm thinking right, the last (bottom) record returned would be the last assignment with the associated wreckerID. The first record would be the earliest date and associated wrecker service - the one you want. Or, if there are wrecker services that have yet to receive an assignment, the first record would be the wrecker service with no assignment with the lowest wreckID number.
Anyway, the WreckerID you want would be the first record so you would store this value in a variable - say varWreckID. Then close the recordset.
While still in the form's OnOpen event, change the recordsource of the form to reflect the next in line.
Code:
Me.recordsource = "SELECT Wreckers.* FROM Wreckers WHERE Wreckers.WreckerID = " & varWreckID
(assuming varWreckID is a number)
To display the assignments for this WreckID, you could use a subform using AbandonedVehicles table as a recordsource and linking Child and Master with WreckID.
Okay, if you're still with me, what we have done so far is simply demonstrate how to show the record of the next in line service. I think after you get the policy matters established, you may have more/other ideas on how to approach the main form. But, perhaps this will get you started.