Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Devolver valor Count en un TQuery (https://www.clubdelphi.com/foros/showthread.php?t=95690)

bulc 12-05-2022 17:51:47

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:
Código Delphi [-]
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

Gracias. Y además muy clarito
 
Nada que añadir.
Un saludo afectuoso.
bulc

Neftali [Germán.Estévez] 13-05-2022 08:54:05

Cita:

Empezado por bulc (Mensaje 546850)
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

OK. tomo nota
 
Estaría perdido sin Club Delphi.
Saludos.
bulc

PepCat 13-05-2022 16:56:07

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 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

No me acaba de ir bien.
 
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ú.
Código Delphi [-]
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

Cita:

Empezado por bulc (Mensaje 546887)
El caso es que no me funciona.

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


La franja horaria es GMT +2. Ahora son las 17:24:18.

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