So now you are faced with how to work around the limitations of the ODBC driver. As I mentioned above I worked around the issue by switching to pass-through queries but I am not writing data back to the Oracle tables. I guess one could experiment with changing the order of the fields in the Oracle table to see if the ODBC driver would then assign the PK to the correct field. If so, the original problem would not be present. You could utilize pass-through queries to populate a local Access table/recordset, manipulate the data locally and then create update and append processes to write the data back to the Oracle table.
OM Gang