PDA

Ver la Versión Completa : Sumar campo que no existe...


HombreGordo
05-08-2008, 12:52:43
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 (http://clubdelphi.com/foros/showthread.php?t=58376) y he hecho algunas de las operaciones para calcular campos usando este hilo (http://clubdelphi.com/foros/showthread.php?t=58651). 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.


....................
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


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

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


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
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. :)