Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Providers (https://www.clubdelphi.com/foros/forumdisplay.php?f=10)
-   -   Tabla y DataSnap (https://www.clubdelphi.com/foros/showthread.php?t=93633)

usuario1000 12-12-2018 21:42:53

Tabla y DataSnap
 
Buenas a todos.


Tengo una aplicación cliente - servidor (datasnap) con delphi xe Seatle y en la parte del cliente genero una tabla en memoria tipo TFDMemTable donde voy guardando unos registros y cuando tengo la tabla terminada con los datos que me interesa, me gustaria enviar la tabla completa al servidor para tratar esos datos.


No me gustaria tener que enviar registro a registro al servidor, puesto que eso me provocaría otros problemas con otros usuarios. La idea es que cuando el usuario termine de trabajar, esa tabla pase al servidor para ser tratada.


Espero haberme explicado.



Gracias a todos.

Neftali [Germán.Estévez] 13-12-2018 12:52:11

Los TFDMemTable al igual que los TClienDataset tienen métodos para grabar y recuperar el contenido en un TStream (LoadFromStream y SaveToStream).
Una opción sería enviar la tabla copmo stream al servidor y allí volver a volcarla sobre unn TFDMemTable.
La única pega puede estar en que la tabla sea grande. Tendrías que hacer pruebas de tamaño para ver la velocidad y posibles problemas.

WHILENOTEOF 13-12-2018 13:33:06

Otra opción es lo que se propone en este post de Marco Cantu : Delphi XE5 Update 2 has FireDACJSONReflect for DataSnap , que te permite pasar uno o varios datasets entre el cliente y el servidor.

Neftali [Germán.Estévez] 13-12-2018 14:35:17

Cita:

Empezado por WHILENOTEOF (Mensaje 529951)
Otra opción es lo que se propone en este post de Marco Cantu : Delphi XE5 Update 2 has FireDACJSONReflect for DataSnap , que te permite pasar uno o varios datasets entre el cliente y el servidor.


Pues así, revisandola por encima, esta tiene mejor pinta... ;);)

usuario1000 13-12-2018 18:28:33

Perdonad mi torpeza, pero no lo consigo, tengo el siguiente codigo:
Código Delphi [-]
procedure TFExtractoCoste.bSalirClick(Sender: TObject);
var
  funcion: Tservermethods1client;
  s:string;
  TablaCadena:TStringStream;
begin

  if tablaRojos.RecordCount = 0 then
        exit;

  funcion := Tservermethods1client.Create
    (FModuloDatos.SQLConnection.DBXConnection);

  TablaCadena := TStringStream.Create(s);
  TablaRojos.SaveToStream(TablaCadena);
  funcion.enviarTablarojos(tablaCadena);

    close;
end;


Me da error, no logro enviar una MemTable a través de la funcion para que llegue al servidor.


Gracias a todos

Neftali [Germán.Estévez] 13-12-2018 18:37:49

Cita:

Empezado por usuario1000 (Mensaje 529955)
PMe da error, no logro enviar una MemTable a través de la funcion para que llegue al servidor.


Si nos dices el error que te da, ayudará a saber qué puede estar pasando.

usuario1000 13-12-2018 22:22:48

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 529956)
Si nos dices el error que te da, ayudará a saber qué puede estar pasando.


Perdón. El error que me dá es el siguiente:


Project Cliente.exe raised eceptin class EFDEXception with message '[FireDac][Stan]-716. Unkkown storage format [BIN]. HInt: To register it, you can drop component [TFDSanStorageXxxLink] into your proyect'.


Saludos.

WHILENOTEOF 14-12-2018 00:59:14

En el hint que te muestran te están diciendo lo que tienes que hacer, pon en tu formulario el componente TFDStanStorageBinLink, que servirá para añadir el código necesario para guardar los datasets como streams. Yo también en Seattle y Datasnap tuve problema a la hora de enviar streams, en unos casos me funcionó (además los comprimía), pero en otros me daba error y creo que está relacionado con el encoding (en una lista reciente de bugs solventados en Rio, ponían uno que creo tiene relación con el error que tenía yo). En relación a lo que te proponía en mi mensaje, mira este ejemplo que creo que es justo lo que estás intentando: FireDACJSONReflect_REST_Server_Client_Sample


La franja horaria es GMT +2. Ahora son las 19:25:46.

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