I have a few suggestions :

I think you may have a problem here...

Code:
Set RS = CN.OpenRecordset("select * from table", dbOpenDynaset, 0, dbPessimistic)
What you have asked with this statement is to have the ENTIRE take made available in a cursor and you have stated "0" for what you want it to do... This means no options.

I would consider using either dbRunAsync or dbExecDirect instead of 0 and change the dbPessimistic to dbOptimistic.

If you are only updating a single record I would also consider only loading that one into the recordset instead of the whole table (VB is allocating memory to hold the cursor index when you do "SELECT *")

Code:
Set RS = CN.OpenRecordset("select * from table where primarykey = '" & pkey "'", dbOpenDynaset, dbRunAsync, dbOptimistic)

But another thing I would suggest is having a look at the DBEngine.Errors(0).Description when the error occurs. This collection gives you all the errors that went into making the problem and not just the "ODBC-- Call Failed" which is too mysterious. Hopefully this will tell you what the problem was, if a primary key was violated, if a foreign key doesn't match or if you have filled in a field incorrectly.

Hope it helps