Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-09-2018
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 86
Poder: 8
usuario1000 Va por buen camino
Aplicación Distribuida y posible error en el RESULT

Buenas tardes a todos.


Tengo un problemilla y no sé si es un error mío o algo que se me escapa. Me explico:


Tengo una aplicación distribuida DataSnap en Windows 10 y con Delphi 10 Seatle. Estoy trabajando con ellas con datos reales y ya alcanza unos 5000 registros la base de datos.


Hago una consulta desde el Cliente al Servidor, con una función previa creada que parece funciona bien con pocos registros, pero cuando tiene que devolver muchos parece que sólo llega hasta 800 registros. ¿Existe un tope para que la funcion result del servidor devuelva registros?. O es ilimitado en el número de registros que tenga que devolver.



Me da la sensación de que existe un tope en cuanto a registros a devolver. ¿alguien me lo puede aclarar? Y si existe este límite, ¿como hago para superarlo, ya que necesito que me devuelva unos 4000 registros o posiblemente más?



gracias.
Responder Con Cita
  #2  
Antiguo 03-09-2018
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 280
Poder: 8
manelb Va por buen camino
No he tenido problemas en este aspecto en algunas pruebas que he realizado con esta tecnología.

¿Podría ser que fuesen los componentes de acceso a datos que utilizas los que tuvieran esta limitación debido a como los tienes configurados?
¿Qué componentes utilizas?

Saludos a todos.
Responder Con Cita
  #3  
Antiguo 03-09-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
¿"posible error en el result" quiere decir que no te genera ningún error, sino que devuelve menos registros de los que esperas?, ¿o no te está devolviendo registros?

Podría ser también que al retornar uno de los registros, el tipo de dato de algún campo o el valor que este tiene, genere problemas con la configuración del componente de acceso a datos que utilizas.... y tu server no esté atrapando la excepción debidamente y no la replique al cliente...


intenta hacer una consulta con otra tabla (otro proceso) que envía mas datos y verás si el problema es de limite de datos
Responder Con Cita
  #4  
Antiguo 04-09-2018
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 86
Poder: 8
usuario1000 Va por buen camino
Problemas con lectura total de registros.

Buenas noches,


Llevo unos dias intentando solucionar un problema que me tiene un poco desesperado.


Utilizo firebird y Delphi 10 Seatle con Windows 10.
El tema es que tengo realizada una aplicación DataSnap, Cliente-servidor, resulta que el servidor tiene la siguiente instrucción tan sencilla como esta:
SELECT * FROM TABLA
Eso debería devolver unos 3000 registros, pero mi sorpresa es que al cliente sólo le llegan unos 700. ¿que ocurre?. ¿como hago para que lleguen todos los registros.


Espero haberme explicado, si necesitáis mas datos, no dudéis en pedirmelos.


Gracias por vuestra colaboración, necesito una manita.
Responder Con Cita
  #5  
Antiguo 04-09-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por usuario1000 Ver Mensaje
Buenas noches
No crees un hilo nuevo para preguntar lo mismo, sigue en el que iniciaste, gracias.
He unido ambos hilos.
Responder Con Cita
  #6  
Antiguo 04-09-2018
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Cita:
Empezado por usuario1000 Ver Mensaje
Buenas noches,


Llevo unos dias intentando solucionar un problema que me tiene un poco desesperado.


Utilizo firebird y Delphi 10 Seatle con Windows 10.
El tema es que tengo realizada una aplicación DataSnap, Cliente-servidor, resulta que el servidor tiene la siguiente instrucción tan sencilla como esta:
SELECT * FROM TABLA
Eso debería devolver unos 3000 registros, pero mi sorpresa es que al cliente sólo le llegan unos 700. ¿que ocurre?. ¿como hago para que lleguen todos los registros.


Espero haberme explicado, si necesitáis mas datos, no dudéis en pedirmelos.


Gracias por vuestra colaboración, necesito una manita.
Especifica un poco que componentes usas para conexión y para las consultas así puede ser más fácil ayudarte.

Si en el lado del cliente usas ClientDataset coloca la propiedad FetchOnDemand en true y la propiedad PacketRecords en -1.
Así debería traerte todos los registros que arroje tu consulta. Hazlo y me dices como te va.
Responder Con Cita
  #7  
Antiguo 04-09-2018
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 86
Poder: 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
  #8  
Antiguo 05-09-2018
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 86
Poder: 8
usuario1000 Va por buen camino
¡¡¡¡Encontrada solución!!!!.


En primer lugar agradeceros a todos vuestra ayuda. Sois geniales.


Os comento como lo he solucionado pero todavía tengo que indagar un poco más en por qué me da el problema.


He estado haciendo pruebas y más pruebas y al final todo se resumen en lo siguiente:


Tengo un TDFQuery llamado qAuxiliar en el Servidor, cada vez que tengo que realizar alguna consulta (de la tabla que sea) utilizo este componente. Siempre empiezo de la siguiente forma para eliminar cualquier residuo de busqueda anterior:


Código Delphi [-]
qAuxiliar.Close;
  qAuxiliar.SQL.Clear;
  qAuxiliar.SQL.Add(linea);
  ...


En el cliente realizo varias consultas seguidas utilizando este componente, pero no sé por qué, debe haber alguna interferencia entre una consulta y otra que no arroja el resultado correcto, a pesar de empezar siempre como he dicho anteriormente.


Solución: crear otro componente llamado qAuxuliar1(TDFQuery), y funciona perfecto.


Podría pensarse que el qAuxiliar podría tener alguna propiedad cambiada, pero no es así, porque si elimino el componente qAuxiliar y renombro el qAuxiliar1 a qAuxiliar, vuelve a fallar. Y si le vuelvo a poner qAuxiliar1, funciona nuevamente.


Me quedo con la sensación de no saber como limpiar exactamente una búsqueda anterior para que no interfiera en la siguiente.


Gracias a todos, sigo depurando mi programa y por supuesto cualquier cosa, ya sé que cuento con vosotros.


Un abrazo.
Responder Con Cita
  #9  
Antiguo 05-09-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
posiblemente se esté quedando pegado un Filter...

Pero es importante que lo identifiques, pues pueden haber mas problemas similares que no hayas detectado.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problemas con la lectura coockold C++ Builder 5 18-10-2010 02:16:10
Numero total de registros DB vroa74 Conexión con bases de datos 2 07-03-2007 19:32:38
¿Record counta el total de registros devueltos? rafita SQL 2 15-09-2006 13:41:52
Borrado total de Registros en tablas DBF Roilo Tablas planas 5 17-07-2006 18:01:17
DBGrid saber total de registros de lo que se ve liz_hilton OOP 3 10-06-2005 17:21:18


La franja horaria es GMT +2. Ahora son las 17:36:29.


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
Copyright 1996-2007 Club Delphi