Ir al contenido


Foto

Pérdida de registros en aplicación REST


  • Por favor identifícate para responder
1 respuesta en este tema

#1 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 09 enero 2015 - 10:18

Buenas y feliz año a todos

Estoy desarrollando una pequeña aplicación DataSnap/REST y me encuentro con algo muy raro. El servidor tiene un método que devuelve un conjunto de DataSets. Pues bien, mientras los DataSets devueltos tengan menos de 50 registros, los devuelve todos correctamente, pero a la que el DataSet llega a 50 registros, los 50 primeros no los devuelve. Es decir, si tiene que devolver 1000, me devuelve 950.

He debugueado el servidor y la consulta SQL lanzada es correcta (probada en IBExpert)

Estoy usando XE7 + FireDAC + Firebird

En el lado servidor tengo el siguiente método para devolver un DataSet:



delphi
  1. procedure TSvrMethodsMdl.AddTable(SQL, TabName: string; JSON: TFDJSONDataSets);
  2. var
  3.   Q: TFDQuery;
  4. begin
  5.   Q := TFDQuery.Create(nil);
  6.   try
  7.     Q.Connection := conTPV;
  8.     Q.Transaction := conTPV.Transaction;
  9.     Q.SQL.Text := SQL;
  10.     TFDJSONDataSetsWriter.ListAdd(JSON, TabName, Q);
  11.   finally
  12.     //    FreeAndNil(Q);
  13.   end;
  14. end;



Y en el lado cliente hago ésto para recuperarlo



delphi
  1. var
  2.   LDataSetList: TFDJSONDataSets;
  3.   LDataSet: TFDDataSet;
  4.   tTemp: TFDMemTable;
  5. begin
  6. ....
  7.   // get remote data
  8.   LDataSetList := CliConnectMdl.SvrMethodsMdlClient.GetDataChanged(Shop, ResError);
  9.   // process data
  10.   LDataSet := TFDJSONDataSetsReader.GetListValueByName(LDataSetList, MyTabName);
  11.   tTemp.AppendData(LDataSet);



Imagino que será alguna tontería de configuración, pero no doy con ella

Alguna idea?

Gracias!
  • 0

#2 gustavosv

gustavosv

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 30 marzo 2015 - 06:01

Hola, tuve el mismo y problema y la solución que me indicó Fernando Rizzato luego de postearle en su blog, fue la siguiente:

 

En el FDQuery hay 2 propiedades a considerar dentro de 'FetchOptions', una de ellas, Mode = fmAll (con éste cambio se soluciona el problema) y RowsetSize por si quieres cambiar la cantidad de registros que se lleva en cada petición.

 

Espero te sirva.

 

GustavoSV


  • 1