Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Contar Registros (https://www.clubdelphi.com/foros/showthread.php?t=68581)

KAYO 22-06-2010 11:42:36

Contar Registros
 
He investigado el RecordCount pero parece que no funciona con algunas BD, dentro del foro he visto que con COUNT en SQL se puede resolver, pero la pregunta es como igualar ese count a una variable para obtener el número de registros de una consulta.
Gracias por vuestra ayuda

marcoszorrilla 22-06-2010 11:44:28

Código Delphi [-]
Var
xx:Integer;
Begin
Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add('Select Count(*) From Clientes');
Query1.Open

xx:=Query1.Fields[0].AsInteger;

Nota:Por ejemplo en Firebird para que te funcione RecordCount, tienes que situarte en el último registros. (Last).
Un Saludo.

erickahr 22-06-2010 19:29:09

Otra opcion
 
En lo personal lo manejo asi, solo por costumbre ya que la respuesta de marcoszorrilla, es muy buena, esto es solo otra opcion ;), Saludos.
Código Delphi [-]
 
Var
  Cuantos:Integer;
Begin
  Query1.Close;
  Query1.Sql.Clear;
  Query1.Sql.Add('Select Count(*)  as contados From Clientes');
  Query1.Open
 
  Cuantos:=Query1.FieldByName('contados').Value;
end;

manuc 15-07-2010 18:26:00

Hola,

El hecho que la proiedad RecordCount no retorne un valor correcto, puede ser por varios motivos.

El primero y más común: la propiedad recordCount retorna un valor pero es menor al real. Esto es debido a que el componente de conexión abre un cursor en la base de datos, pero no accede a todos los registros, sino que los va cargando por bloques, a medida que va haciendo falta.

En este caso, es cierto que haciendo un "last" se actualizará el valor de la propiedad RecordCount, ya que al hacer esto el cursor abierto en base de datos recorre la tabla entera y ya sabe cuantos registros hay. No obstante, esto puede ser una técnica arriesgada y muy lenta en tablas con muchos registros.

Cuidado si piensas que tu tabla pude crecer mucho.

Otro caso en el que la propiedad RecordCount no retorna un valor incorrecto es cuando usamos componentes uni-direccionales, como pueden ser los tSQLDataset de dbExpress.

Un saludo.

Jac fcc 22-07-2010 19:09:38

esto funcionará?
 
yo utilizo lo siguiente para saber el numero de registros de una consulta:
Código Delphi [-]Query.SQL.Add('select ... where ...'); Query.Active:=False; Query.Active:=True; showmessage('Numero de registros: '+IntToStr(Query.RecordCount) );


utilizo SQL 8.00.194
Esta forma de consulta siempre me regresa el numero de registros correctos de la consulta.
¿puede fallar?
si es asi, ¿alguien podria decirme como solucionarlo?

erickahr 22-07-2010 19:14:46

Creo que aqui se comenta lo que preguntas:

Cita:

Empezado por marcoszorrilla (Mensaje 367987)
Nota:Por ejemplo en Firebird para que te funcione RecordCount, tienes que situarte en el último registros. (Last).


Saludos!

manuc 22-07-2010 19:16:28

Hoal Jac fcc,

¿qué componentes utilizas?

¿cuantos registros suelen tener tus tablas?

Lo normal es que si utilizas componentes que acceden directamente a base de datos, en ocasiones, te pueden engañar. Aunque esto depende también del nº de registros que tengan tus tablas.

Si tienen pocos registros, entonces al abrir el cursor puede que tenga acceso a todos y por lo tanto RecordCount te de un valor correcto. Si tienes muchos, lo normal es que el cursor acceda los x primeros y no a todos, por lo tanto no sepa cuantos registros hay en total.

Pero todo esto depende del tipo de componentes que utilices.

Un saludo.

calco_hugo 22-07-2010 19:19:02

no es lo mas prolijo, table.last
antes del recordcount
pero funciona

Jac fcc 22-07-2010 19:21:23

gracias manuc :D

los registros son de hasta 50 000. hasta el momento no han sobrepasado esta cantidad.

Componenetes; uso TAdoQuery, TAdoTable y tambien ADoConnection.

para el ejemplo que coloqué usé Adoconnection.

manuc 22-07-2010 19:35:57

Hombre si con 50.000 no te ha dado problemas, no creo que vayas a tener problemas. :)

Lo normal es que al abrir un cursor se acceda a unos 25-50 registros.

Lo he probado con ADO y no pasa esto, es decir, ADO sí da el nº de registros correcto.

El porqué no lo, no se si será por SQL Server o por los componentes ADO.

Un saludo.

Jac fcc 22-07-2010 19:47:43

que alivio
 
oh
quedo mas tranquilo entonces, :eek:.

Ademas del componente, me parece que ayuda tener limpieza en los componentes (Abrir, cerrar, limpiar).


La franja horaria es GMT +2. Ahora son las 13:24:38.

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