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)
-   -   como saber numero de registros de una tabla usando un clientdataset? (https://www.clubdelphi.com/foros/showthread.php?t=25348)

acl_gandalf 20-09-2005 15:11:01

como saber numero de registros de una tabla usando un clientdataset?
 
quisiera saber como podria saber el numero total de registros que tiene una tabla, y si hay algun metodo hecho para eso

gracias de antemano

vtdeleon 20-09-2005 16:08:41

table1.RecordCount
Saludos

bulc 09-03-2014 22:30:48

RecordCount es .....lennntttiiisimmmooo
 
La mejor manera de saber los registros en una FDB es llevar constancia de todas las altas, usando un GENERADOR. Pero lo que pasa es que no te contará los delete que hagas. Te dará el último número del último Insert y a cada insert se activará con el Trigger correspondiente.
Esa función RecordCount ha de recorrer todos los registros para contarlos, por lo que es mejor hace un Select dirigido directamente al servidor.
Usa por ejemplo: SELECT COUNT(NUM) FROM TABLA1;
Esta orden debes someterla directamente al servidor. Para probarla puedes entrar en modo comando en la FDB y hacer pruebas.
No dices si usas MySQL o Firebird...
Saludos.

bulc 09-03-2014 22:35:28

Record count is very, very slow
 
Prueba a usar un GENERADOR y actualizar los números de registros con un Trigger. Podrás saber el número de último registro, pero sin tener en cuenta los deletes que hayas hecho. El generador se deber actualizar con un TRIGGER.
No indicas que base de datos usas.
Saludos.

Casimiro Notevi 09-03-2014 22:48:13

Este hilo es de hace 9 años.
Y para contar los registros de una tabla no hay que usar un generador, sino contarlos:
Código SQL [-]
select count(campo) from tabla
Pero que el campo sea primary key o que esté indexado.
Nunca usar el asterisco select count(*) ni tampoco contar un campo que no tenga índice, porque en ese caso sí que recorrerá la tabla uno a uno.

bulc 10-03-2014 18:29:42

Gracias por la información
 
Deberé leer la fecha de los hilos.

Chandra_ 26-06-2023 15:54:58

Cita:

Empezado por Casimiro Notevi (Mensaje 473538)
select count(campo) from tabla


¿Y cómo saco yo de esa consulta el dato, el número de registros? Un Integer, en conclusión.


Este hilo recorre los tiempos :D

Casimiro Notevi 26-06-2023 16:47:12

Cita:

Empezado por Chandra_ (Mensaje 551889)
¿Y cómo saco yo de esa consulta el dato, el número de registros? Un Integer, en conclusión.
Este hilo recorre los tiempos :D

No entiendo la pregunta.

Casimiro Notevi 26-06-2023 17:17:08

Si tienes una conexión a la BD, sería más o menos:
Código Delphi [-]
IBQuery.Close;
IBQuery.SQL.Text := 'SELECT COUNT(*) FROM ' + nombreTabla;
IBQuery.Open;
Result := IBQuery.Fields[0].AsInteger;
IBQuery.Close;

Chandra_ 26-06-2023 17:41:01

Cita:

Empezado por Casimiro Notevi (Mensaje 551893)
Si tienes una conexión a la BD, sería más o menos:
Código Delphi [-]IBQuery.Close; IBQuery.SQL.Text := 'SELECT COUNT(*) FROM ' + nombreTabla; IBQuery.Open; Result := IBQuery.Fields[0].AsInteger; IBQuery.Close;

Es para SQLite con FireDAC, pero ya lo adapto yo.

Un millón de gracias, Casimiro Notevi!!!

Casimiro Notevi 26-06-2023 17:50:38

Si quieres que sea lo más rápido posible, usa el campo principal indexado de la tabla, por ejemplo, si la tabla tbClients y los campos codigo,nombre, telefono, etc... y la clave primaria es "codigo", entonces:
Código Delphi [-]
IBQuery.Close;
IBQuery.SQL.Text := 'SELECT COUNT(codigo) FROM ' + nombreTabla;  //  Ponemos el nombre del campo en lugar del asterisco *
IBQuery.Open;
Result := IBQuery.Fields[0].AsInteger;
IBQuery.Close;

Chandra_ 26-06-2023 19:09:19

Cita:

Empezado por Casimiro Notevi (Mensaje 551895)
Si quieres que sea lo más rápido posible, usa el campo principal indexado de la tabla, por ejemplo, si la tabla tbClients y los campos codigo,nombre, telefono, etc... y la clave primaria es "codigo", entonces:
Código Delphi [-]IBQuery.Close; IBQuery.SQL.Text := 'SELECT COUNT(codigo) FROM ' + nombreTabla; // Ponemos el nombre del campo en lugar del asterisco * IBQuery.Open; Result := IBQuery.Fields[0].AsInteger; IBQuery.Close;


Genial, Casimiro Notevi! Muchísimas gracias! Este es el tipo de cosas que, de no ser por gente como tú, nos volveríamos locos buscando.


La franja horaria es GMT +2. Ahora son las 07:21: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