After applying a Client Access SP, I've got it working .... sometimes. If I remove the BEGIN TRAN and COMMIT TRAN it works. Leave those in and I get :
The operation could not be performed because the OLE DB provider 'MSDASQL' was unable to begin a distributed transaction.
OLE DB error trace [OLE/DB Provider 'MSDASQL' ITransactionJoin::JoinTransaction returned 0x8004d00a].
But if I stop and restart SQL, the TRAN stuff then works.. but only once, which is bizarre. If I run it a second time it errors again. The field I'm updating doesn't need to be unique.