Curso de C++ Builder


Acceso a bases de datos

Actualizaciones en caché



Actualizaciones en caché

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();
}

Ventajas

Desventajas



Índice de la sección