Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   RecordCount Vs Count (SQL) (https://www.clubdelphi.com/foros/showthread.php?t=25966)

vtdeleon 09-10-2005 20:01:44

RecordCount Vs Count (SQL)
 
Saludos

IBx,Firebird,D7

Algo curioso que aún no encuentro explicación:
Tengo un IBDataset con la sgte sentencia:
Código SQL [-]
Select codemp, nombre
from empleados
La cual podría arrojar
Código:

Codemp  Nombre
  0001      Fulano
  0002      Suntano
....    ....

Esta tabla tiene 50 registros. En un JvDBGrid la acomodo para que solos se muestren 10 registro del total.
Con RecordCount me dice que solo tengo 10, pero si hago una consula SQL con Count, esta me dice que tengo los 50 registros.
Código SQL [-]
Select codemp, nombre, (select count(codemp) from empleados) as TRegs
from empleados

Me he dado cuenta que si arreglo el JvDBGrid a que me muestre 5, 15 o 8 registro, el RecorCount me arroja esa misma cantidad qeu muestro.
Alguién me puede explicar este comportamiento un tanto extraño.

Nt:Tengo otro formulario con IBDataSet y no pasa lo mismo, sumamente extraño esto :confused:

Casimiro Notevi 09-10-2005 20:23:13

select count(codigo) from tbclientes

Esto te devuelve el número de registros de la tabla.



Lo otro te devuelve el número de registros que han sido "traidos" en ese momento, si haces un "avanza página" (page dow), te traerá otros tantos para rellenar ese dbgrid y la cantidad de "recordcount" te devolverá los regitros de antes más los de ahora, sin embargo, si vas al último verás que te devuelve el número total de registros de la tabla.

vtdeleon 09-10-2005 20:39:33

Saludos
Cita:

Empezado por Casimiro Notevi
Lo otro te devuelve el número de registros que han sido "traidos" en ese momento, si haces un "avanza página" (page dow), te traerá otros tantos para rellenar ese dbgrid y la cantidad de "recordcount" te devolverá los regitros de antes más los de ahora, sin embargo, si vas al último verás que te devuelve el número total de registros de la tabla.

En eso tienes razón pero....
Cita:

Empezado por vtdeleon
Nt:Tengo otro formulario con IBDataSet y no pasa lo mismo, sumamente extraño esto :confused:

Como dije anteriormente, en otro formulario, el Recordcount si me devuelve el total de registro "Real", teniendo JvDbGrid acomodados

Casimiro Notevi 09-10-2005 21:00:14

Puede ser que ese tipo de grid lea todos los registros para luego tenerlo en memoria y poder ordenar por cualquier campo, filtar, etc. Eso es algo que hacen algunos componentes dbgrid, algo que no es muy recomendable, pero lo hacen.

vtdeleon 09-10-2005 21:47:09

Saludos

También con un DBGrid sucede lo mismo, si no tnego DBGRID, el recordcount devuelve 1.

//No me importa usar Count (es mejor:)), pero es un caso extraño ya que en un formulario con los mismos componentes da el valor bien y en otro no.

Casimiro Notevi 09-10-2005 22:21:35

Alomejor alguna propiedad del dataset, ¿seguro que son exactamente iguales?

vtdeleon 09-10-2005 22:34:25

Segurísimo

Lo último que he hecho es copiar el mismo componente al otro, y tiene el mismo comportamiento.

En que afectara el formultario a un Dataset?:confused:

vtdeleon 09-10-2005 22:55:18

Saludos

Al romperme la cabeza con el teclado (por los abundantes códigos), creo que lo que debe haber algún método(IsEmpty, Prerare o algo parecido) que recorre el DataSet y entonces me dá el total de registro real.
En conclusión, Casimiro Notevi tiene razón:)
Gracias Casimiro

Delfino 10-10-2005 08:10:28

Cita:

Eso es algo que hacen algunos componentes dbgrid
es la diferencia en los grids q trabajan en modo virtual, significa q no tienen datos propios y sus datos los traen de otra fuente, por eso el filtro o el sort tiene q hacerse en esa otra fuente, y los q cargan todos los datos para manejarlos con el quantumgrid, y asi se tiene los datos duplicados, en el dataset y el grid, pero hay mas funcionalidad..

Cita:

creo que lo que debe haber algún método(IsEmpty, Prerare o algo parecido) que recorre el DataSet
o simplemente el metodo locate, o los campos lookup;


La franja horaria es GMT +2. Ahora son las 13:54:28.

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