Ver Mensaje Individual
  #5  
Antiguo 08-06-2012
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Reputación: 23
StartKill Va por buen camino
Hola Jere_84
Vamos a guiarnos por la sugerencia de mamcx, que está muy buena

Antes de nada unas palabras...: "El poderoso Datasnap que acorta distancias"

Jere_84 dice:
Cita:
Hola Club, En mi aplicación Datasnap quiero hacer una función del lado servidor que tome como parámetro un objeto tipo TClientDataSet y otro tipo TField, el problema es que aparentemente y no se bien el porque pero así parece en la ayuda Delphi, solo soporta entre las capas los siguientes tipos de datos, algo que resulta bastante limitado. .....
mamcx responde a la duda, solo vamos tomar la solución que él dá: (al margen de la explicación que nos dió, corta y buena)
Cita:
AFORTUNADAMENTE ClientDataset permite guardar datos en un stream/xml:

http://stackoverflow.com/questions/3...xml-contents-i

Código Delphi [-]
ClientDataSet1.SaveToFile('file.xml',dfXML);
//Cargas el archivo en un string y lo envias aqui
Defines que el servidor pasa datos string.
y usas el metodo de LoadFromFile en el otro extremo. Listo
Haciendo mas fácil esto:
En el lado cliente de tu aplicativo Datasnap
Código Delphi [-]
procedure TForm13.Button1Click(Sender: TObject);
var
   f: TextFile;
   xml, line: string;
   fileName: string;
begin
   fileName:= ExtractFilePath( Application.ExeName ) + 'datos.xml';
   ClientDataSet1.Open;
   ClientDataSet1.SaveToFile(fileName, dfXML);
   AssignFile(f, fileName);
   // podrias mejorar la lectura del archivo en un objeto memo
   reset(f);
   while not Eof(f) do
   begin
      ReadLn(f, line);
      xml := xml + line;
   end;
   closeFile(f);
   //-----
   //....
   xxxxx.carga(xml);  //llamas a tu método en el server; 
end;

En el lado server el método que recepciona los datos debria ser mas o menos asi:
Código Delphi [-]
procedure TServerMethodsServerProductos.carga(xml: string);
var
   f: TextFile;
   fileName: string;
begin
   fileName:= ExtractFilePath( Application.ExeName ) + 'dstos.xml';
   AssignFile(f, fileName);
   Rewrite(f);
   Write(f, xml);
   closeFile(f);
   ClientDataSet2.close;
   ClientDataSet2.LoadFromFile(fileName);
   ClientDataSet2.Open;
end;

Espero que sirva de algo el código...


Your friend

StartKill
Lima-Perú

Última edición por StartKill fecha: 08-06-2012 a las 01:18:03.
Responder Con Cita