Ver Mensaje Individual
  #1  
Antiguo Hace 2 Semanas
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 281
Reputación: 8
manelb Va por buen camino
Firedac: Conexión compartida en una dll

Saludos a todos.

En una aplicación, tengo algunos procesos desarrollados en módulos dll.
Los componentes de acceso a datos son Firedac y la base de datos Firebird 2.1

El cuerpo de la función de entrada en la dll, en un ejemplo rápido, es algo como esto:

Código Delphi [-]
function Inicio(Sender: TObject): Boolean; stdcall;
var
  qry: TFDQuery;
begin
  qry:= TFDQuery(sender);
  with Tdm.Create(nil) do
  try
    FDConnection.SharedCliHandle:= Qry.Connection.CliHandle;
    Ejecutar;
  finally
    free;
  end;
  result:= true;
end;

Donde FDConnection es un componente TFDConection situado en un módulo de datos y el parámetro sender de entrada es un FDQuery.
En el módulo de datos existe además otro FDQuery para realizar consultas y conectado a este FDConnection.

La manera de compartir la conexión de esta forma con la libreria, esta sacada de la siguiente ayuda de delphi
https://docwiki.embarcadero.com/Libr...haredCliHandle

El sistema lo utilizo desde hace tiempo con muy buenos resultados.
El problema que se me presenta en esta ocasión es que el sender(TFDQuery) que pasamos como parámetro tiene modificaciones aceptadas pero no confirmadas.
No se ha echo aún un commit.


El procedimiento Ejecutar debe leer de la base de datos algunos de estos cambios no confirmados, pero no es así y lee la versión antigua de los registros.
Según el enlace anterior,
Cita:
After setting Connected to True for this connection, it will use the same physical DBMS connection or session as the other connection, and it will share the same transaction state.
por lo que entiendo que no deberia sucederme esto.
Si utiliza la misma transacción deberia tener acceso a las modificaciones no confirmadas.

Alguien puede darme algun consejo?
Alguien utiliza algún sistema similar?

Sé que no és la manera idónea de utilizar librerias en delphi, pero de momento és lo que tengo.

Gracias por vuestra atención.
Cualquier comentario se agradece
Un saludo
Responder Con Cita