>Instead of adOpenStatic, use the adOpenDynamic when you want to open your recordset. It will open a dynamic recordset.
>One more thing, set the CursorLocation property in your recordset to adUseClient.
Ok thanks - i made the changes you suggested - the update raises a slightly different error now...
-2147217864 Row cannot be located for updating. Some values may have been changed since it was last read.
but when I trap this error instead of the previous error and do exactly as before - the result is the exactly the same... the code loops between the update and the error handling routine - it's almost as if it's using the same rs even though stepping through it I can see the rs is destroyed and rebuilt...
I think I am going slightly mad - I have been struggling with this four days now!