Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problema con TDBXReaders dentro de TMiClase(TObject) (https://www.clubdelphi.com/foros/showthread.php?t=82842)

Ignacio Gentile 18-04-2013 17:34:05

Problema con TDBXReaders dentro de TMiClase(TObject)
 
Buenas!

Estoy trabajando con Datasnap y tengo corriendo una aplicación cliente que le envía peticiones al servidor Datasnap. Trabajo con base de datos Interbase, Delphi XE y utilizo para las conexiones los componentes IB.

El problema con el que me encuentro es el siguiente:

Invoco al servidor Datasnap para obtener una serie de registros que cumplan con determinada condición. Para ello en el lado servidor realizo una sentencia SQL y al resultado lo paso a un DBXReader y se lo envío a la aplicación cliente. La misma, lo pasa a un ClientDataSet para mostrarlo en una grilla.
Cuando el resultado de la invocación es el DBXReader todo funciona perfectamente pero el problema aparece cuando el DBXReader se devuelve dentro de una clase, definido como un atributo más. En dicho caso el error que se obtiene es el siguiente:

Remote Error: Internal: Type tkPointer is not currently supported

No entiendo bien cual es la lógica del error ya que realizo la misma lógica en ambos casos y solo cambia el tipo de dato que devuelve la función invocada.

La instrucción que devuelve el resultado desde el Datasnap, en el caso en que anda bien es:

Código Delphi [-]
 Result := TDBXDataSetReader.Create(cdsObtenerDatos, false)
)

La instrucción que devuelve el resultado desde el Datasnap, en el caso en que anda NO bien es:

Código Delphi [-]
 Result := tResultObtener.Create;
Result.resultDBXReaders := TDBXDataSetReader.Create(cdsObtenerDatos, false);

La definición de la clase contenedora es la siguiente:

Código Delphi [-]
tResultObtener = class (TObject)
    private
      fResultGral: tResultGral;
      fResultDBXReaders: TDBXReader;
    published
      property resultGral: tResultGral read fResultGral write fResultGral;
      property resultDBXReaders: TDBXReader read fResultDBXReaders write fResultDBXReaders;
  end;

Al González 18-04-2013 17:49:06

Intenta derivar tu clase, no de TObject, sino de alguna otra que sea soportada por DataSnap. Quizá con TPersistent o alguna otra funcione. Te lo digo sin mucha certeza por falta de experiencia suficiente, pero pensando que algo de RTTI debe estar disponible a la hora de pasar objetos entre capas. Incluso podrías intentar derivar tu clase de TDBXReader, en lugar de usar ésta como propiedad.

Saludos.


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

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