Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Probelma: Query con SUM no la reconoce delphi (https://www.clubdelphi.com/foros/showthread.php?t=74470)

Inon 22-06-2011 00:21:26

Probelma: Query con SUM no la reconoce delphi
 
Hola gente de Club Delphi, vengo ante ustedes con una duda:
tengo la siguientes instrucciones para crear un query:
Código:

Cadena:='SELECT SUM(costo) AS monto FROM mi_tabla';
Query2.SQL.Clear;
Query2.SQL.Add(Cadena);
Query2.ExecSQL;
LMonto.Caption:=Query2.FieldByName('monto').AsString;  <--Aqui esta el problema

costo es de tipo DECIMAL

y LMonto es tipo LAbel solo para mostrar la suma de todos los registros de la tabla.
pero me sale el siguiente error Query2: Field 'monto' not found.

lo raro es que en phpmyadmin si me muestra el resultado sin problemas.

Inon 22-06-2011 00:27:04

Ya descubri el error:
Yo tenia esto:
Código:

Cadena:='SELECT SUM(costo) AS monto FROM mi_tabla';
Query2.SQL.Clear;
Query2.SQL.Add(Cadena);
Query2.ExecSQL;
LMonto.Caption:=Query2.FieldByName('monto').AsString;

Y el problema se corrigio activando la Query para que me reconozca el campo "monto", de tal forma que el codigo queda así:
Código:

Cadena:='SELECT SUM(costo) AS monto FROM mi_tabla';
Query2.SQL.Clear;
Query2.SQL.Add(Cadena);
Query2.ExecSQL;
Query2.Active:=True;  <-- Se activa para poder ver el campo "monto"
LMonto.Caption:=Query2.FieldByName('monto').AsString;
Query2.Active:=False;  <-- Se desactiva porque ya no se requiere

Bueno espero que a alguno le sirva, Saludos.

Casimiro Noteví 22-06-2011 00:58:41

Código Delphi [-]
Query2.Close;
Query2.SQL.Text:='SELECT SUM(costo) AS monto FROM mi_tabla';
Query2.ExecSQL;
LMonto.Caption:=Query2.Fields[0].AsString;

Si quieres asignar el valor devuelto por el select entonces te vale mejor así.

defcon1_es 22-06-2011 12:36:33

Hola.
Esto es redundante:
Código Delphi [-]
Query2.ExecSQL; //Puedes quitar esta línea de código
Query2.Active:=True;


ecfisa 22-06-2011 16:13:12

Hola Inon.

Simplificando un poco y para redondear, las diferencias entre ExecSQL y Open (o Active:= True) son:

El método ExecSQL se usa para realizar consultas que no devuelven un resultado como por ejemplo: INSERT, UPDATE, DELETE, CREATE.

Para realizar consultas de las que esperamos devuelvan un resultado se debe usar el método Open o la propiedad Active.

La propiedad Active permite determinar o verificar si un TDataSet está abierto o cerrado. Llama a los métodos Open o Close según su valor sea puesto en True o False, por lo que también es redundante hacer:
Código Delphi [-]
  Query.Active:= True;
  Query.Open;
  // o 
  Query.Active:= False;
  Query.Close;

Saludos.


La franja horaria es GMT +2. Ahora son las 01:56:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi