PDA

Ver la Versión Completa : Recordcount no me cuenta bien


Val
27-06-2007, 13:34:01
Hola!

Tengo una aplicación con Firefox 2.0 y acceso al mismo mediante dbExpress. El caso es que al arrancar (en el FormCreate) relleno un DBGrid con los datos de un IBQuery y justo tras el open() del query en un TLabel muestro el número de registro del DBGrid mediante la propiedad RecordCount del query y si hay registros me muestra un 1 haya los registros que haya.

Más adelante si cambio el query y hago lo mismo ya me funciona y me muestra el valor correcto.

¿A qué se puede deber?

Gracias

Neftali [Germán.Estévez]
27-06-2007, 13:56:59
Tengo una aplicación con Firefox 2.0
¿Y funciona bien como Base de Datos? Y yo que sólo lo usaba para navegar...:D:D:D

Prueba a lanzar una consulta con COUNT.
Posiblemente al abrir no se esté trayendo todos los datos y por eso no devuelve bien el Count. Además hacerlo con SQL+COUNT es más eficiente que usar RecordCount.

eduarcol
27-06-2007, 13:59:01
¿Y funciona bien como Base de Datos? Y yo que sólo lo usaba para navegar...:D:D:D

jajajaja, esto esta para el de humor

defcon1_es
27-06-2007, 14:02:09
Tengo una aplicación con Firefox 2.0 y acceso al mismo mediante dbExpress. El caso es que al arrancar (en el FormCreate) relleno un DBGrid con los datos de un IBQuery y justo tras el open() del query en un TLabel muestro el número de registro del DBGrid mediante la propiedad RecordCount del query y si hay registros me muestra un 1 haya los registros que haya.

¿A qué se puede deber?


Se debe a que la propiedad RecordCount del DataSet,
sólo refleja el valor correcto si llegas hasta el final del conjunto de datos.

Prueba a hacer un DataSet.Last antes de mostrar el valor de recordcount en el label.

Aunque la sugerencia de Neftalí es mucho mas eficiente.

ArdiIIa
27-06-2007, 14:18:37
Se debe a que la propiedad RecordCount del DataSet,
sólo refleja el valor correcto si llegas hasta el final del conjunto de datos.


Perdón por la intromisión, pero creo que eso no es del todo cierto.
En Bases de datos tipo Paradox y similares, funciona bien sin necesidad del Last.

eduarcol
27-06-2007, 14:20:56
La verdad tengo entendido q solo falla con las conexiones ADO pero por un principio logico que la conexion no trae todos los registros solo hasta qe lso necesite

fidel
27-06-2007, 14:32:32
Con FireBird e IBX me fallaba, y no se por qué, pero como dice defcon1_es, poniendo DataSet.Last funciona, aunque quizás sea mejor lo que te indica Neftali.

Neftali [Germán.Estévez]
27-06-2007, 15:47:24
...poniendo DataSet.Last funciona, aunque quizás sea mejor lo que te indica Neftali.

A esto me refería; con esto obligas a recorrer todo el DataSet y a traerte todos los datos.

Con una simple consulta SQL del tipo COUNT será más eficiente:


// Importante hacerlo por el campo clave (PK) que no tiene duplicados
// -será más óptimo-
SELECT COUNT (CampoClave) AS CUANTOS FROM TABLA

Val
27-06-2007, 16:25:29
Gracias por las respuestas. En efecto haciendo Last antes del Recordcount ya me cuenta bien los registros, la pega es que en el DBGrid se me selecciona el último registro lo que no es demasiado lógico. Asi que me quedo con el "select count" que si además es más eficiente mejor que mejor :)

Gracias a todos.

PD: Se me fue la pinza con lo del Firefox, es lo que pasa cuando no has dormido una mierda :P

eduarcol
27-06-2007, 16:43:30
La diferencia entre el select count y el last es que el primero te lo devuelve el servidor, al contrario del last que obligas a l cliente a tener todos los registros para contarlos

Bicho
27-06-2007, 19:35:44
PD: Se me fue la pinza con lo del Firefox, es lo que pasa cuando no has dormido una mierda :P

Estamos igual. Yo ni me habia fijado en la errata. He tenido que leer dos veces la respuesta de Neftalí para enterarme.
:D

Saludos