![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Buenos dias compañeros, estoy tratando de migrar un proyecto vcl +firedac de delphi 10.3 al 12.
No hay inconvenientes al compilar pero me he dado cuenta que hace algo raro el cambiar le BD. Es como si no diera le COMMIT de las transacciones. Compilado en D12 Si agrego un registro el mismo no aparece hasta reiniciar el programa, lo mismo un delete. Aparece al reiniciar. Compilo en D10.3 y funciona perfecto como lo viene haciendo y deberia hacer.. Luego tratando de descubrir el problema, creo un nuevo proyecto vcl en D12 que conecte con firedac a la misma BD, fdconnection, transactions asignadas, agrego un grid y un dbnavigator y elimina y agrega registros bien. Comparo los parámetros de componentes de la nueva aplicación y están idénticos a la vieja. ¿alguien tiene alguna sugerencia? Gracias desde ya |
|
#3
|
|||
|
|||
|
No no hace nada. es como si no se hiciera el COMMIT hasta cerrar la aplicacion.
Porque por ej yo agrego o elimino algo, y hago una consulta y lo eliminado sigue visible y lo nuevo no se ve. En tengo los componentes transaction en autocommit auto start y autostop. En la mayoría de los procesos inicio y termino las transacciones yo con FDConnection.StartTransaction; y finalizo con FDConnection.Commit. Y no se ven los cambios hasta cerrar y abrir el sistema. Y me llama la atención otra conexion a la misma BD creada en la version nueva de delphi funciona correcto. |
|
#4
|
|||
|
|||
|
En otra prueba sobre el proyecto migrado, acabo de eliminar 2 componentes transaction , los mismos estan vinculados el fdconnection, uno a la propiedad transacion (readlonly)y otro a lapropiedad Updatetransacion, además esos componentes los vinculo a cada query creado en tiempo de ejecución de la siguiente forma Query.UpdateTransaction := datos.FDTranUp;
Bueno luego de eliminar y comentar todas las lineas que usaban estos componentes , el sistema funciona correctamente. Solo que las transacciones las maneja ahora firedac de forma autónoma Pero al hacer un post o eliminar veo los al instante sin duda hay algo raro en las transacciones, pero algo que en delphi 103 funciona bien y en 12 no. |
|
#5
|
|||
|
|||
|
has comprobado si tienes activada la opcion de "cached Updates" en la Tabla o tal??
en ese caso tendrias que llamar a Tabla->ApplyUpdates() antes del Commit creo Última edición por navbuoy fecha: 12-02-2025 a las 04:04:11. |
|
#6
|
|||
|
|||
|
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);
}
}
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);
}
}
|
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Proyecto, Monitoreo y Optimizacion de nuestra BD en Firebird | felipe88 | Firebird e Interbase | 35 | 07-05-2011 02:02:43 |
| Pasar proyecto de D.2007 a D.7 | Dado de baja | Varios | 10 | 22-10-2008 00:33:08 |
| FireBird, Proyecto del mes Diciembre/2007 en SourceForge | jhonny | Noticias | 2 | 04-12-2007 01:15:47 |
| Cómo pasar mi proyecto WWW para el servidor... | Lester | .NET | 0 | 08-02-2007 18:35:10 |
|