![]() |
![]() |
![]() |
![]() |
![]() |
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); } } |
#7
|
|||
|
|||
Hola, no uso cached updates. Si fuera el caso tendria el mismo delay en delphi 10.3.
Aun no he descubierto el inconveniente pero me voy acercando. Mientras sigo compilando en 10.3 y cuando sobra tiempo vuelvo a mirar con lupa en el 12 porque la idea es migrarme a 12. |
#8
|
|||
|
|||
Evidentemente algo ha cambiado en el manejo de transacciones de delphi 10.3 a 12. Ya que como comenté al eliminar los componentes FDtransaction funciona.
Ahora voy agregandolos poco a poco y sigue funcionando. He descubierto otro error en esta migracion,, me he dado cuenta que debo tener alguna dependencia de algun paquete pero no se como detecarlo. Tengo el BUILD WITH RUNTIME PACKAGES DESACTIVADO, Y al probar el proyecto en una pc que tengo como entorno testing, el programa no inicia ,muestra un error de ACESSVIOLATION, y en las 2 pc que tengo delphi instalado ejecuta bien. ¿como puedo saber todas las dependencias de mi proyecto? De modo de ir revisando y ver como eliminar la dependencia. |
#9
|
|||
|
|||
Me respondo, habia un error con la unit MIDASLIB, copie todos los dll dle bin de delphi a la carpeta del proyecto, y fui eliminando de a poco hasta que llegué al midas.dll. Que no ere requisito porque tengo la unit MIDASLIB al uses. La removi y agregue de nuevo y parece que funciona .
Pero me gustaria elminar del todo ya que antes usaba CLIENTDATASET y los he reemplazado por FDMEMTABLES, pero si elimino la unit MIDASLIB, me queda aun dependencia que no se donde estará. |
#10
|
||||
|
||||
En Delphi, los componentes que dependen de midas.dll están relacionados con DataSnap y la manipulación de datasets en memoria, principalmente TClientDataSet, TProvider (TDataSetProvider) y componentes DataSnap antiguos (TDCOMConnection, TSocketConnection, TWebConnection).
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
|
|
![]() |
||||
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 |
![]() |
|