Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-02-2025
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 322
Poder: 21
amadis Va por buen camino
Question Problema en proyecto vcl firebird 3.0.12 al pasar de D.10.3 al 12

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
Responder Con Cita
  #2  
Antiguo 04-02-2025
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 318
Poder: 3
pgranados Va por buen camino
Y si haces un refresh al fdquery se actualiza?

Código Delphi [-]
FDQuery.Refresh;
Responder Con Cita
  #3  
Antiguo 04-02-2025
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 322
Poder: 21
amadis Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 04-02-2025
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 322
Poder: 21
amadis Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 12-02-2025
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 12-02-2025
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
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);
    }
}
Responder Con Cita
  #7  
Antiguo 12-02-2025
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 322
Poder: 21
amadis Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 12-02-2025
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 322
Poder: 21
amadis Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 13-02-2025
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 322
Poder: 21
amadis Va por buen camino
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á.
Responder Con Cita
  #10  
Antiguo 13-02-2025
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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).
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 16:21:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi