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)
-   -   Query, como saber el numero de Registros ? (https://www.clubdelphi.com/foros/showthread.php?t=16720)

Pascual Montes 09-12-2004 03:00:15

Query, como saber el numero de Registros ?
 
hola amigos, Sabes tengo una rutina en donde hago un filtro por medio
de un query, y necesito saber cuantos registros cumplieron la condicion
de ese query, como puedo obtener ese dato ?

mi rutina es esta:


DATa.q1.close;
DATa.Q1.SQL.Clear;
DATA.q1.SQL.Add('SELECT * FROM '+#34+cruta+#34+' WHERE fecha between '+#34+sfechaini+#34+' and '+#34+sfechafin+#34' ORDER BY numempleado');
DATA.Q1.OPEN;

y en otro procedimiento es lo siguiente :
while not data.q1.Eof DO BEGIN
CNT:=CNT+1;
CADENA:='9999000000@'+copy(edit1.text,1,1);

cad2:=RELLENACONCEROS(data.TCHECANumempleado.VALUE,8);
CAD3:=COPY(CAD2,8,1);
CAD2:=COPY(CAD2,3,5);
CADENA:=CADENA+CAD2+CAD3;


Present:= Now;
DecodeDate(data.q1Fecha.value, Year, Month, Day);

CAD2:=IntToStr(MONTH);
CAD2:=RELLENACONCEROS(CAD2,2);
CADENA:=CADENA+CAD2;

CAD2:=IntToStr(Day);
CAD2:=RELLENACONCEROS(CAD2,2);
CADENA:=CADENA+CAD2;

DecodeTime(data.q1Hora.value, Hour, Min, Sec, MSec);
CAD2:=IntToStr(HOUR);
CAD2:=RELLENACONCEROS(CAD2,2);
CADENA:=CADENA+CAD2;

CAD2:=IntToStr(MIN);
CAD2:=RELLENACONCEROS(CAD2,2);
CADENA:=CADENA+CAD2+'1';

WRITELN(F, Cadena);
data.q1.Next;
END;
closeFILE(f); // CERRAR EL ARCHIVO MUY IMPORTANTE
memo1.Lines.Add('Archivo Reloj.dat Creado con Exito');
memo1.Lines.Add('Para Incorporarlo o Importarlo de su');
memo1.Lines.Add('Sistema de Nomina, Entre y Ejecute ese Proceso ');

biniciar.enabled:=false;
bpreparar.SetFocus;


Te agradezco mucho tu ayuda. :D
Saludos

marcoszorrilla 09-12-2004 07:24:01

Depende del motor que estes utilizando:
Código Delphi [-]
xxx:=DATa.q1.RecordCount;

En otros tendras que ejecutar la instrucción SQL:
Count
Un Saludo.

defcon1_es 09-12-2004 09:54:57

Hola,
quisiera puntualizar que para que RecordCount tenga el valor correcto,
es decir, el número total de registros de la query, debes ejecutar previamente el método Last de esa query para asegurarte.

Salu2.

Neftali [Germán.Estévez] 09-12-2004 10:23:45

Otra opción, es lanzar la misma sentencia que tienes, pero cambiando el * por Count(*) y eliminando el "ORDER BY"; Una variante mejor es en lugar de Count(*), porner Count(Campo_clave_primaria).
En tu caso:
DATA.q1.SQL.Add('SELECT Count(*) AS NUMREG FROM '+#34+cruta+#34+' WHERE fecha between '+#34+sfechaini+#34+' and '+#34+sfechafin+#34);

Te devoverá un único registro con un campo NUMREG con el número de registros.

roman 09-12-2004 14:27:57

Cita:

Empezado por defcon1_es
Hola,
quisiera puntualizar que para que RecordCount tenga el valor correcto,
es decir, el número total de registros de la query, debes ejecutar previamente el método Last de esa query para asegurarte.

Esto depende de la base que esté usando. En la mayoría de casos, con servidores SQL, así es, pero en base de buró como Paradox o DBase no es necesario.

Y aprovechemos también para aclararle a Pascual Montes que en el caso de servidores SQL, la mejor opción será la del COUNT que ya señalan Marcos y Neftali pues el uso de Last ocasiona que todos los registros sean traídos desde el servidor con el respectivo decremento en el desempeño.

// Saludos

Pascual Montes 09-12-2004 17:14:17

Gracias, Problema Resuelto !!!
 
Perfect, gracias a su ayuda ya resolvi este detalle de saber
el numero de registros, me sirvio recordcount .

:D


La franja horaria es GMT +2. Ahora son las 07:01:22.

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