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)
-   -   Sumar campo que no existe... (https://www.clubdelphi.com/foros/showthread.php?t=58883)

HombreGordo 05-08-2008 12:52:43

Sumar campo que no existe...
 
Buenas de nuevo por aquí :) Me gustaría que ustedes me ayudaran con este otro conflicto, siempre y cuando puedan echarme una mano (Ojalá :(). El problema es el siguiente: He calculado el la sumatoria de un campo, utilizando el método de [Caro] en este hilo y he hecho algunas de las operaciones para calcular campos usando este hilo. Pero ahora es indispensable, sacar la sumatoria de un campo, en un campo como está calculado según el segundo hilo que mostré. No lo sumaría, porque no existe, porque sólo está ahí para mostrar.

¿Cuál sería la solución para sumar los valores de este campo entre sí?:confused:

Muchas gracias de antemano.

Caro 05-08-2008 13:13:44

Hola HombreGordo, por lo que he visto a la pasada el segundo hilo, le has dado un nombre a ese calculo "RESULTADO", entonces tienes que utilizar resultado para hacer la sumatoria.

Código Delphi [-]
....................
 Total := Total + MiTabla.FieldbyName('RESULTADO').ASCurrency;
....................

Saluditos

coso 05-08-2008 13:37:51

Hola hombregordo,

tomando literalmente el titulo, no se puede sumar un campo que no existe. Si lo que quieres es sumar los resultados de varios campos calculados anteriormente, deberias :
- o bien guardar los valores de los resultados que posteriormente quieres sumar en variables.
- o ejecutar todo en una unica consulta.

Mirando los hilos anteriores (muy por encima) :

- resultado := unidades * multiplicador, con cierta condicion
- totalganancia := sumatorio de ganancias.

Creo que lo que quieres es sumar varios resultados segun ciertas condiciones (corrigeme si me equivoco, pues me he liado un poco) entonces o bien creas varias consultas y vas sumando

Código Delphi [-]
resultado := 0;
q.Active := false;
q.sql.text := 'select unidades * ' + editmult1.text + ' as RESULTADO from tabla where ---condiciones 1 ---';
q.active := true;
resultado := resultado + q.FieldByName('RESULTADO').Asfloat;

q.Active := false;
q.sql.text := 'select unidades * ' + editmult2.text + ' as resultado from tabla where ---condiciones 2 ---';
q.Active := true;
resultado := resultado + q.FieldByName('resultado').asfloat;
...
showmessage(FormatFloat('0.0000',resultado);


o bien creas una unica consulta sql compleja
Código Delphi [-]
q.active := false;
q.sql.text := 'select ((select unidades * ' + mult1.text + ' as res1 from tabla where --cond1--)  +  (select unidades * ' + mult2.text + ' as res2 from tabla where --cond2--) + ... + (select unidades * ' + multn.txt + ' as resn from tabla where ---condn---) as resultado_total from tablas';
q.active := true;
ShowMessage(FormatFloat('0.000',q.FieldByname('resultado_total').Asfloat);

coso 05-08-2008 13:42:58

tambien puedes hacer, de la primera manera (por variables) mediante un bucle

Código Delphi [-]
var
   resultado : float;
   cn : TStringList;
   ml  : TStringList;
begin
   resultado := 0;
   cn := TStringList.Create;
   ml := TStringList.Create;
  
   cn.Add('--condicion 1 --'); //data = 01/01/1999, por ejemplo
   cn.Add('--condicion 2 --');
   ...
   cn.Add('--condicion n --');

   ml.Add(multiplicador1.Text);
   ml.Add(multiplicador2.text);
   ...
   ml.Add(multiplicadorn.text);

   resultado := 0;
   for i := 0 to cn.Count - 1 do
   begin
          q.Active := false;
          q.SQL.Text := 'select unidades * ' + ml[i] + ' as RESULTADO from tabla where ' + cn[i];
          q.Active := true;
          resultado := resultado + q.FieldByName('RESULTADO').Asfloat;
   end;
   ml.Free;
   cn.Free;
end;

venga espero q te sirva. Saludos.

HombreGordo 05-08-2008 17:01:32

¡Hey!
 
Hola de nuevo chicos, gracias por la atención, analizaré los códigos y veré cual me sirve. :) En este mismo post dejaré los resultados de lo que pasó.

De haber sabido lo de las consultas SQL complejas creo que me hubiera ahorrado muchos problemas jajaja.

EDITADO: Funcionó a la perfección, tomé el modelo de código de sumar campo y lo adapté con las sugerencias que agregó coso. Gracias por invertir su tiempo en este hilo. :)


La franja horaria es GMT +2. Ahora son las 10:12:01.

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