PDA

Ver la Versión Completa : Devolver valor Count en un TQuery


bulc
12-05-2022, 17:51:47
Me gustaría ejecutar un TQuery.SQL de modo que pueda obtener un dato Count (*) From TableX Where FieldX= 'Texto' y que el dato volviera a Delphi en forma de Variable.
No tengo mucha idea pero si sospecho que hay que usar un Query1.Fields[0].
Antes de enviar código de aficionado me gustaría tener alguna idea de como hacerlo.
Saludos.
bulc

ecfisa
12-05-2022, 18:03:57
Hola.

Un ejemplo:

begin
Query.Close;
Query.Sql.Clear;
Query.Sql.Add( 'SELECT COUNT(*) AS TOTAL' );
Query.Sql.Add( 'FROM COUNTRY WHERE CONTINENT = :CONT' );
Query.ParamByName( 'CONT' ).AsString := 'South America';
Query.Open;
ShowMessage( Query.FieldByName( 'TOTAL' ).AsString );
...


Saludos :)

bulc
12-05-2022, 21:16:52
Nada que añadir.
Un saludo afectuoso.
bulc

Neftali [Germán.Estévez]
13-05-2022, 08:54:05
Me gustaría ejecutar un TQuery.SQL de modo que pueda obtener un dato Count (*) ...

Sólo como comentario, cuando nos interesa realizar un count (sólo un count), siempre es mejor utilizar COUNT(ID) en lugar de COUNT(*), siendo el ID la clave primaria de la tabla.
Es un pequeño detalle, pero si uno se acostumbra, en tablas grandes (o muy "anchas") siempre mejora un poquito el rendimiento.

bulc
13-05-2022, 13:57:55
Estaría perdido sin Club Delphi.
Saludos.
bulc

PepCat
13-05-2022, 16:56:07
;546865']Sólo como comentario, cuando nos interesa realizar un count (sólo un count), siempre es mejor utilizar COUNT(ID) en lugar de COUNT(*), siendo el ID la clave primaria de la tabla.
Es un pequeño detalle, pero si uno se acostumbra, en tablas grandes (o muy "anchas") siempre mejora un poquito el rendimiento.

Vaya, muy inetersante!! Gracias por este detalle!

Casimiro Notevi
13-05-2022, 17:35:27
Son normas básicas de SQL, si se hace un select count(*) de una tabla de artículos, por ejemplo, que tiene montones de campos, tardará mucho más que un select count(id) que sólamente "mirará" el valor del índice de esa clave primaria.

bulc
13-05-2022, 17:37:43
En una aplicación el TQuery no encuentra el campo. He probado en otra más sencilla y tampoco va. Para no dejar los datos en blanco he puesto el TrY-Except.
El caso es que no me funciona. A ver cómo lo ves tú.

procedure TForm1.Button2Click(Sender: TObject);
Var
Dato : Integer; Total: Integer;
BEGIN
TRY
Q1.Close;
Q1.SQL.Clear; //
Q1.SQL.Add('Select COUNT (ID) as Total FROM DCOLOR where CAT = :Medidas ' ) ;
Q1.ParamByName('Medidas').AsString := '215X150' ;
Q1.Open ; // = Q.Active := True ;
ShowMessage( 'Registros: ' + Q1.FieldByName('Total').AsString ) ;
EXCEPT
ShowMessage( 'Except side');
Q1.SQL.Clear; //Time to find nº Edifil
Q1.SQL.Text :='SELECT * FROM DCOLOR ORDER BY ID' ;
Q1.Open;
END;
end;

Un saludo.
bulc

Casimiro Notevi
13-05-2022, 17:44:52
"No va", "no funciona", "no encuentra"... no es información para que se te pueda ayudar. Debes copiar exactamente el mensaje de error.
Pregunta tonta: ¿tu campo clave se llama id? :)

Neftali [Germán.Estévez]
14-05-2022, 15:20:17
El caso es que no me funciona.

¿Qué número de registros te devuelve?
¿Qué muestra este ShowMessage?
ShowMessage( 'Registros: ' + Q1.FieldByName('Total').AsString );
¿Si lanzas esta consulta directamente, qué te evuelve?
Select COUNT (ID) as Total FROM DCOLOR where CAT = '215X150'