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)
-   -   Contar registros de un dataset (https://www.clubdelphi.com/foros/showthread.php?t=75946)

martinlillo 29-09-2011 14:41:27

Contar registros de un dataset
 
Gente, quiero mostrar en un form la cantidad de registros de un dataset. Puse un IBQuery, seteando el sql en "select count(*) from tabla", y apenas abre el form, en el evento OnShow, le pongo:

Código Delphi [-]
Label3.Caption := ibquery1.Fields[0].asstring;

Hasta ahí todo bien, cuando abre el form, me tira el número correcto. El tema es que tengo un DBGrid, y un campo de edición que uso como filtro. En ese campo, en el evento OnKeyUp, genero un

Código Delphi [-]
 DM.tabla.Close;
 DM.tabla.SelectSQL.Text := 'select * from tabla where campo1 starting'+quotedstr(Edit1.Text);
 DM.tabla.Open;

Esto anda bárbaro, a medida que escribo, la grilla va mostrando los resultados parciales.

El tema es que cuando quiero mostrar la cantidad de resultados actuales en la grilla, haciendo esto

Código Delphi [-]
 ibquery1.close;
 ibquery1.ExecSQL;
 IBQuery1.Open;
 Label3.Caption := ibquery1.Fields[0].asstring;

Me salta el error "Use Open for a select statement"

Alguno tiene idea de qué estoy haciendo mal?? Uso Firebird.

Saludos y gracias!

Casimiro Notevi 29-09-2011 14:46:07

Cita:

Empezado por martinlillo (Mensaje 413910)
Código Delphi [-]
ibquery1.close;  
ibquery1.ExecSQL;  //  <<<<----------------- QUITA ESTA LINEA  
IBQuery1.Open;  
Label3.Caption := ibquery1.Fields[0].asstring;

Sobra esa línea.


.

martinlillo 29-09-2011 14:52:21

Si le quito esa linea, no me da el error, pero no me actualiza el valor, la cantidad de registros listados en la grilla. Me sigue mostrando el total de registros del dataset. Es que acaso ese IBQuery no le da bola al resultado del select del Dataset?

Saludos!

olbeup 29-09-2011 15:15:10

Cita:

ibquery1.close;
ibquery1.ExecSQL; // <<<<----------------- QUITA ESTA LINEA
IBQuery1.Open;
Label3.Caption := ibquery1.Fields[0].asstring;
Prueba con esto:
Código Delphi [-]
IBQuery1.Close;  
IBQuery1.Open;  
Label3.Caption := IntToStr(IBQuery1.RecordCount);
Espero que te sirva
Un saludo

DarKraZY 29-09-2011 15:18:05

Cita:

Empezado por martinlillo (Mensaje 413913)
Si le quito esa linea, no me da el error, pero no me actualiza el valor, la cantidad de registros listados en la grilla. Me sigue mostrando el total de registros del dataset.

Eso es porque no cambias la select de IBQuery1. Igual que haces
Código Delphi [-]
DM.tabla.SelectSQL.Text := 'select * from tabla where campo1 starting'+quotedstr(Edit1.Text);
También deberías cambiar la SQL de "select count(*) from tabla".

Pero te recomiendo que uses
Código Delphi [-]
Label3.Caption := DM.tabla.RecordCount

Así te evitas trabajo para codificar y para la base de datos.

Saludos!

martinlillo 29-09-2011 15:28:34

Lo del RecordCount es lo que primero intenté. Pero sólo me tira el número de registros que "caben" en la grilla. Es decir que si mi grilla tiene 20 filas, y la cantidad que alberga son 25 (es decir que puedo hacer un scroll abajo para ver los otros), el RecordCount me da 20.

Voy a probar cambiar el sql en IBQuery, pero si hago eso, obtengo la cantidad que coinciden con la consulta, verdad? Yo quiero el número.

Saludos!

martinlillo 29-09-2011 15:35:55

Muchas gracias!!! Este es el código que me funcionó:

Código Delphi [-]
ibquery1.close;
 ibquery1.sql.Clear;
 ibquery1.SQL.Add('select count(*) from datosfil where ' + campo_busqueda + ' starting '+quotedstr(Edit1.Text));
 IBQuery1.Open;
 Label3.Caption := ibquery1.Fields[0].asstring;

Mil gracias!!!!!!


La franja horaria es GMT +2. Ahora son las 03:34:01.

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