Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Providers (https://www.clubdelphi.com/foros/forumdisplay.php?f=10)
-   -   Devolver DataSetProveider (https://www.clubdelphi.com/foros/showthread.php?t=86088)

doctorhd 16-06-2014 10:01:51

Devolver DataSetProveider
 
Hola estimados, estoy construyendo una aplicación datasnap y tengo implementadas algunas funciones de servidor que devuelven como resultado un datasetproveider para que este sea rescatado por la aplicación cliente, el problema es que al momento de ejecutarlo la aplicación servidora genera una excepcion que indica que no son soportados retornos de datos de tipo puntero. Creo entender que este tipo de llamadas no soporta la devolución de datos complejos como lo son objetos o conjuntos de datos. Me gustaría me aclararan si es correcto lo que indico o es solo un error en la forma de devolver el objeto. Aquí va el código:
Código Delphi [-]
unit UsuarioMetodosUnit;

interface

  uses Datasnap.Provider, DataSnap.DSProviderDataModuleAdapter,
       System.Classes, ClassUsuarioDataFirebirdUnit;//Capa de datos Firebird

  type
    {$MethodInfo ON}
    TUsuario = class(TComponent)

    private { Private declarations }

    public { Public declarations }
      function SeleccionaUserByCodigo(ACodUsuario:String):TDataSetProvider;
    end;
    {$MethodInfo OFF}

implementation

Uses DeclaracionesGlobalesUnit;

  function TUsuario.SeleccionaUserByCodigo(ACodUsuario:String):TDataSetProvider;
  var FUsuario:TUsuarioDataFB;
  begin
    if vParamProveedorData.ProveedorData = tcFirebird then begin
       FUsuario:=TUsuarioDataFB.Create;
       result:=FUsuario.fbSeleccionaUsuario(ACodUsuario)
    end;
    //tcProgress:
    //tcMySql:
  end;
end.

Saludos...

duilioisola 16-06-2014 11:58:30

Diría que no debes devolver el DataSetProvider, sino el DataSet.
El Provider es una unión entre el DataSet y otras cosas

doctorhd 16-06-2014 21:07:17

Lo probare, aunque creo que el problema se debe a que cuando se asigna una clase a una variable, (en este caso como resultado de una función), lo que se hace realmente es asignar un puntero al objeto traspasado y no el objeto en si. Respecto a porque devuelvo un DataSetProveider, es porque la metodología utilizada cuando lo haces con un DataModuleServer es así. Obtienes un conjunto de datos (DataSet) el cual lo conectas a un DataSetProveider por el lado del servidor y lo recepcionas en el cliente enlazando dicho DataSetProveider con un DataSetConeccion y así accedes a los datos...

Saludos.,,

duilioisola 16-06-2014 23:06:49

No tengo mucha experiencia, pero creo que no es así.
Del lado del Server
DataSet --> DataSetProvider --> ClientDataSet --> [DataSnap convierte a JSON]
Del lado del cliente
[JSON] --> TSQLConnection

Es obvio que todos estos componentes en realidad son punteros que se pasan de una función a otra, pero según el tipo de dato del que se trate, la información apuntada se trata de una manera o de otra.

apicito 17-06-2014 08:53:25

Quizás te sea de utilidad:
http://blogs.embarcadero.com/pawelgl...4/06/04/40330/
https://www.youtube.com/watch?v=l1WlPaUUmtU
https://forums.embarcadero.com/threa...threadID=91739
http://lfgonzalez.visiblogs.com/2013...t-y-viceversa/
Saludos.

doctorhd 20-06-2014 07:56:28

Muchas gracias duilioisola y apicito, efectivamente el objeto que se debía devolver era un TDataSet. Ahora mi pregunta es a quien le corresponde liberar al objeto devuelto, al cliente o al servidor...??

Saludos.


La franja horaria es GMT +2. Ahora son las 05:48:28.

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