Ver la Versión Completa : Devolver valor Count en un TQuery
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 :)
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.
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.
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'
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.