En FireDAC, la llamada a ApplyUpdates() solo es necesaria si usas un componente TFDTable o TFDQuery con un CachedUpdates activo. Si estás ejecutando una consulta INSERT, UPDATE o DELETE directamente con ExecSQL(), no necesitas ApplyUpdates(), ya que los cambios se aplican inmediatamente en la base de datos.
Cuándo usar ApplyUpdates()
Debes usar ApplyUpdates() solo si estás trabajando con datos en memoria antes de enviarlos a la base de datos. Esto ocurre cuando:
TFDQuery->CachedUpdates = true
TFDTable->CachedUpdates = true
TFDMemTable está en uso y necesita sincronizarse con la base de datos.
Ejemplo con CachedUpdates
Si tienes un TFDQuery con CachedUpdates = true, los cambios se almacenan en memoria y debes hacer esto para aplicarlos:
Código:
void GuardarEnBD() {
try {
FDConnection1->StartTransaction(); // Inicia la transacción
FDQuery1->Post(); // Guarda los cambios en el buffer en memoria
FDQuery1->ApplyUpdates(); // Aplica los cambios en la BD
FDConnection1->Commit(); // Confirma la transacción
} catch (Exception &e) {
FDConnection1->Rollback(); // Revierte en caso de error
ShowMessage("Error: " + e.Message);
}
}
Si usas ExecSQL(), no necesitas ApplyUpdates()
Cuando ejecutas una consulta directa (ExecSQL()), la actualización se realiza inmediatamente en la BD, por lo que este código NO necesita ApplyUpdates():
Código:
void ActualizarPrecio() {
try {
FDConnection1->StartTransaction();
FDQuery1->SQL->Text = "UPDATE productos SET precio = precio * 1.10 WHERE categoria = 'electronica'";
FDQuery1->ExecSQL();
FDConnection1->Commit();
} catch (Exception &e) {
FDConnection1->Rollback();
ShowMessage("Error: " + e.Message);
}
}