Las actualizaciones en caché son un recurso del BDE para mejorar el rendimiento de las transacciones en entornos cliente/servidor. Los conjuntos de datos de C++ Builder vienen equipados con una propiedad, CachedUpdates, que decide si los cambios efectuados en el conjunto de datos son grabados inmediatamente en la base de datos o si se almacenan en la memoria del ordenador cliente y se envían en bloque al servidor a petición del programa cliente.
Cuando la propiedad CachedUpdates está a true, los cambios en los registros no se escriben en la base de datos. En su lugar, se escriben en un buffer de la máquina local. Los registros se mantienen en la caché hasta que se llama al método ApplyUpdates(). Para confirmar los cambios se ha de llamar a CommitUpdates(). Para anular los cambios almacenados en caché se puede usar el método CancelUpdates(). También se pueden anular las modificaciones hechas en un registro con el método RevertRecord().
StartTransaction(); // this = la base de datos sobre la que estemos trabajando try { for (int i = 0; i <= DataSets_size; i++) DataSets[i]->ApplyUpdates(); // Pueden fallar Commit(); } catch(Exception&) { Rollback(); throw; // Propagar la excepción } for (int i = 0; i <= DataSets_size; i++) DataSets[i]->CommitUpdates(); // Nunca fallan |
Una alternativa es forzar el vaciado de los buffers escribiendo:
void __fastcall TDataModuleXXX::TableAfterPost(TObject *Sender) { static_cast<TDBDataSet*>(Sender)->FlushBuffers(); } |