Can you create a query in the local query designer that does what you want, and then review the code and see what needs to be changed in sSQLB?
The way the looping works is that it first opens all the records in TableA, goes to the first one, takes its primary key, and then opens all the records in TableB that have that primary key as a foreign key in the proper field, that have a servicedate, and that are checked for Update. IF it finds one of those records, it should only take the latest service date, and updates the proper field in TableA.
There should be many times that it will scroll through all of TableA, an just find one record that needs updating from Table B.
A better way to do this is to create a query in the local designer that gathers all the FKs where Update = Yes, and ServiceDate <> "", and then use 3 recordsets. The first recordset would be to open Table A for updates, then open the outer loop on the query that displays all the unique FKs of TableB that have the conditions you want. Then open the 3rd recordset on TableB where the FK is in the record, and not worry about the other conditions since they were alreay met, just open Top 1. Then copy the Service Date over. THis would keep the transaction overhead down.
Anyway, see if te fix works, and if it takes too long to close the form each time, (I didn't ask how many records we are dealing with) then we can recast the code to run more quickly.
Look it up at: http://wrox.books24x7.com