Ver Mensaje Individual
  #7  
Antiguo 04-09-2018
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 86
Reputación: 8
usuario1000 Va por buen camino
Buenas a todos.


Tengo puesto como dices Soa Pelaez así exactamente en el TClientDataSet " la propiedad FetchOnDemand en true y la propiedad PacketRecords en -1."


Por parte del cliente tengo los siguientes componentes para realizar esta consulta: TDataSetClient y TDataSetProvider y ejecuto la siguiente instrucción:


// cargamos datos de COSTES que cumplen los criterios
Código Delphi [-]
   dspCostes.DataSet := funcion.FiltrarCostesResumen(Aux_fecha, Aux_expediente1, Aux_expediente2, Aux_ano1, Aux_ano2,
                                              Aux_empresa1, Aux_empresa2, Aux_obra1, Aux_obra2, Aux_linea1, Aux_linea2);


   cdsCostes.Data := dspCostes.Data;
   cdsCostes.RecordCount;  // aquí me da una cifra que debe corresponder con el número de registros que recibe: 579.


    // siguen más lineas...




En la parte del servidor que es donde se ejecuta la función FiltrarCostesResumen tengo un TFDQuery para ejecutar la consulta y un TDataSetProvider asociado a este TFDQuery:

Código Delphi [-]
function TServerMethods1.FiltrarCostesResumen(fecha, expediente1, expediente2,
  ano1, ano2, empresa1, empresa2, obra1, obra2, linea1, linea2: string): TdataSet;
const
{  linea =  'Select n_expediente, n_ano_exp, tipo_documento, empresa, linea, obra, base, codigo_Cta, subcodigo_cta, '+
           'coste, n_proveedor, n_documento, n_ano_doc, fecha_sie from COSTES '+
           'where n_expediente >= :expediente1 and n_expediente <= :expediente2 ' +
           'and n_ano_exp >= :ano1 and n_ano_exp <= :ano2 ' +
           'and empresa >= :empresa1 and empresa <= :empresa2 ' +
           'and obra >= obra1 and obra <= obra2 ' +
           'and linea >= :linea1 and linea <= :linea2 ' +
           'and coste = :si ' +
           'and fecha_sie <= :fecha ORDER BY FECHA_SIE';   }

  linea = 'select * from costes';  // he puesto esta línea para que haga una consulta sencilla y sin posbiles errores en el filtrado.

begin


  qAuxiliar.Close;
  qAuxiliar.SQL.Clear;
  qAuxiliar.SQL.Add(linea);
{  qAuxiliar.ParamByName('fecha').AsDate := strToDate(fecha);
  qAuxiliar.ParamByName('expediente1').AsInteger := strToInt(expediente1);
  qAuxiliar.ParamByName('expediente2').AsInteger := strToInt(expediente2);
  qAuxiliar.ParamByName('ano1').AsInteger := strToInt(ano1);
  qAuxiliar.ParamByName('ano2').AsInteger := strToInt(ano2);
  qAuxiliar.ParamByName('empresa1').AsInteger := strToInt(empresa1);
  qAuxiliar.ParamByName('empresa2').AsInteger := strToInt(empresa2);
  qAuxiliar.ParamByName('obra1').AsInteger := strToInt(obra1);
  qAuxiliar.ParamByName('obra2').AsInteger := strToInt(obra2);
  qAuxiliar.ParamByName('linea1').AsInteger := strToInt(linea1);
  qAuxiliar.ParamByName('linea2').AsInteger := strToInt(linea2);
  qAuxiliar.ParamByName('si').AsString := 'S';    }

  try
    qAuxiliar.OPEN;
    qAuxiliar.RecordCount; // esta línea la he puesto para comprobar los registros que envía, y siempre marca 50. Es una cifra que he visto que aparece en el RowSetSize y que
                                                           //  he cambiado a 1000 pero no hace nada.
    result := qAuxiliar;
  Except
     // nada
  end;

end;





Ahora mismo ando un poco perdido y no sé como arreglarlo, a ver si alguien me puede decir como hacerlo, el problema es que estoy trabajando con datos reales y necesito que esto funcione para sacar listados.


Gracias a todos.

Última edición por Casimiro Notevi fecha: 04-09-2018 a las 19:07:19.
Responder Con Cita