Ver Mensaje Individual
  #4  
Antiguo 24-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo tengo configurado Datasnap de la siguiente manera:

En el server, tambien usamos MSSQL. No uses ADO; es lento, es inestable, nunca me gusto

Ya que tenes 10 Seattle, opta por FireDAC.

El sevidor exopne un par de metodos para obtener datos, y uno o dos para insertar/actualizar. Es muy sencillo

Todo gira en torno a la clase "TFDJSONDataSets": es decir, los clientes mandan "TFDJSONDataSets", y el server devuelve "TFDJSONDataSets"; es basicamente un DataSet codificado en json y luego en base64 para que sea lo mas rapido posible de transportar.

En el uses necesitas agregar:

Código Delphi [-]
  Data.FireDACJSONReflect,
  FireDAC.Stan.StorageJSON,

Los metodos "Get" tienen la forma:

Código Delphi [-]
function TServerMethods1.GetClientes: TFDJSONDataSets;
begin
  // refresh query
  qClientes.Active := False;
  Result := TFDJSONDataSets.Create;
  TFDJSONDataSetsWriter.ListAdd(Result, qClientes);
end;

Los metodos "Insert" tienen mas "truco". Lo que yo hago es, recibir la instancia de TFDJsonDataSets y cargarlo en un FDMemTable; de alli, la recorro y se trata de un "DataSet normal". No hay que asustarse por el "alarmante" numero de operaciones; en realidad es todo bastante rapido

Código Delphi [-]
function TServerMethods1.InsertPedidos(Pedidos: TFDJSONDataSets): Boolean;
begin
  // cabeceras
  mtPedidos.AppendData(TFDJSONDataSetsReader.GetListValue(Pedidos, 0));
  // detalles
  mtDetalles.AppendData(TFDJSONDataSetsReader.GetListValue(Pedidos, 1));

  mtPedidos.First;
  while not mtPedidos.Eof do
  begin
   { blabla }
   mtPedidos.Next;
  end;
end;

Del lado del cliente:

Código Delphi [-]
var
  MemTab: TFDMemTable;
  JsonData: TFDJSONDataSets;
begin
  MemTab := TFDMemTable.Create(NIL);
  // pedir  clientes al server
  JsonData := Client.Methods.GetClientes;

  // volcar en FDMemTable
  MemTab.AppendData(TFDJSONDataSetsReader.GetListValue(JsonData, 0));
  MemTab.Open;
end;

Espero te sirva
Responder Con Cita