Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   RecordCount no funciona correctamente (https://www.clubdelphi.com/foros/showthread.php?t=34038)

Hagen 25-07-2006 16:40:14

RecordCount no funciona correctamente
 
Hola

Uso Delphi 7 Enterprise, IBX 7.08 y Firebird 1.5.3

Tengo un formulario con un DBGrid para realizar la busqueda en una tabla,
despues de realizar la busqueda muestro en un Edit la cantidad de registros
encontrados; pero cuando uso la propiedad RecordCount del IBQuery solo
me funciona bien cuando los registros devueltos son menores o iguales a 5.
Cuando los registros devueltos son mas de 5, el Edit siempre muestra 5.

Muchas gracias de antemano

Mick 25-07-2006 16:51:29

RecordCount no es aplicable en muchos sistemas de bases de datos cliente/servidor, te valdra si usas una base de datos paradox o dbase por ejemplo, pero no si usas firebird o interbase.

Cuando usas un query, los ibx no se traen todos los registros resultantes al cliente, solo los que se necesiten. Si tienes enlazado un dbgrid, por ejemplo, se traeran los registros correspondientes a las lineas del dbgrid que se necesiten visualizar, solo cuando avanzas en el dbgrid se reciben del servidor mas registros.

De modo que recordcount solo te indicara el numero de registros que se han recibido de las base de datos (de los que se ha hecho fetch).

Tendras que hacer una consulta sql adicional con un count(*), para saber el numero total de registros.

Tambien puedes hacer un fetchall o usar un clientdataset, ya que esto se trae todos los registros. Pero esto no suele ser eficiente y puede colapsar todo el sistema: si el resultado de la query son miles de registros y haces esto, se traeran todos esos miles de registros, pudiendo colapsar el equipo cliente porque se quede sin memoria, la propia red mientras se reciben toda esa burrada de registros, y ademas puede tardar el proceso muchos segundos o minutos.

Ahora si, si sabes seguro que el resultado no son mas que unas pocas decenas o cientos de registros puedes hacer un fetchall sin problemas.

Saludos

AGAG4 25-07-2006 23:23:41

O bien....
 
Puedes usar

Código Delphi [-]
ibQuery.Last;   
ibQuery.First;   

//  ó

ibQuery.FetchAll;

OJO , como comenta Mick, sabiendo que son pocos Registros!!!!


La franja horaria es GMT +2. Ahora son las 02:43:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi