Yep, it's because you're using MIDAS. Throw the Oracle Monitor on your server or set up a TClientDataSet and look at the actual SQL being fired off and you'll see that MIDAS generates the Update SQL for you. When you use TOracleDataSet it generates the SQL as well, but it bases it on the ROWID. Personally, I like this way better because ROWID access is always a lot quicker than some of the Massive where clauses that MIDAS (and the BDE) generate.