PDA

Ver la Versión Completa : sumar o restar valores tipo money


gonza_619
16-09-2010, 02:48:22
hola miren tengo 2 dbedits en donde estan valores tipo money de una tabla.
bien ahora los necesito sumar , como seria la funcion? o a los dbedits los paso a variables real. puede ser que strtoint(dbedit1.text) ese dbedit.text tiene un valor money, pero nuca ese valor va a ser por ej: $2,5
en este caso seran $2sin coma,
Bmuchas gracias

ecfisa
16-09-2010, 04:10:01
Hola.

Te pongo dos formas para hacerlo:

begin
var
r1,r2: Currency;
begin
// Ej. 1
r1:= Table1.FieldByName('Campo1').AsCurrency +
Table1.FieldByname('Campo2').AsCurrency;
// Ej. 2
r2:= DBEdit1.DataSource.DataSet.FieldByName('Campo1').AsCurrency +
DBEdit2.DataSource.DataSet.FieldByName('Campo2').AsCurrency;
end;


Saludos. :)

ecfisa
16-09-2010, 05:23:15
Hola.

Antes de que me den el tirón de orejas, se me deslizó un 'begin' de más.
Favor de ignorarlo... :D

Saludos. :)

gonza_619
16-09-2010, 05:25:57
ok no ay drama se me ocurrio esto q al parecer funciona

query1.SQL.Clear;
Query1.sql.text:= 'Select costo as cost from cursos where cod_curso =1' ;
query1.Active:=true;
w:= Query1.FieldByName('cost').AsCurrency;

query1.SQL.Clear;
Query1.sql.text:= 'Select sum(importe) as Monto from cobranzas where alucurso =1' ;
query1.Active:=true;
j:= Query1.FieldByName('Monto').AsCurrency;

if j<w then
begin
showmessage('chau');
end;

ecfisa
16-09-2010, 08:56:32
Hola.

Sin analizár la lógica empleada ya que no sé lo que buscas que haga el código, pareciera funcionar.
A excepción de un detalle :

Mas allá que j este pegado al then (pudo ser error de tipeo).
Sucede que si la variable j no es de tipo Boolean te va a dar error de expresión en la línea del if/then.
Y si lo és, te va a dar un error de incompatibilidad de tipos cuando le asignas el valor del campo Monto del Query.

Por otro lado me parece un código muy complicado para mostrar un mensaje despedida... :D

Saludos. :)

gonza_619
16-09-2010, 12:01:39
bien ahora qisiera sber si esto es correcto
en un dbedit1.text se almacena un valor tipo money ($80) por ej, entonces lo paso a currency para valores moneda
var x:currency;
x:=strtocurr(dbedit1.text);

me da error $80 no es un valor flotant valido, y no lo paso a flotant por eso la duda, como seria entonces para q se mantenga money? grax

ecfisa
16-09-2010, 12:46:51
Hola.

Yo obtendría el valor de este modo

var
x: Currency;
begin
x:= StrToCurr(DBEdit1.Field.AsString);

y luego le doy el formato que desee mostrar:

ShowMessage(Format('%m',[x]));


Saludos.

gonza_619
16-09-2010, 13:05:54
Bien, explico mira yo en el dbedit1.text ingreso un monto en moneda $, ya q el dbedit1.text esta realacionado a un campo tipo moneda, bien ingreso el monto que aun no esta alamcaenado en la tabla, bueno a ese monto lo quero psasr a currency para sumarlo a otro currency, he probado

var
x: Currency;
begin
x:= StrToCurr(DBEdit1.field.AsString);

pero yo no qiero pasar a currency un valor almacenado,sino un valor que ingrese en el dbedit que luego sera almacenado o no, gracias

ecfisa
16-09-2010, 14:21:34
Hola gonza.

Te entiendo perfectamente.

Probá de hacer lo siguiente:

procedure TForm1.DBEdit1Exit(Sender: TObject);
var
x: Currency;
begin
x:= StrToCurr(DBEdit1.Field.AsString);
x:= x + 1000;
ShowMessage(FloatToStr(x));
end;

Notarás que que si ingresaste por ejemplo: $ 1200,00 el mensaje dira: 2200, que en definitiva es la suma del valor que acabas de ingresar + 1000...
No podés trabajar con el valor Text como si fuese un string por que es un MaskedText.

Simplificando mucho, una cosa es lo que se muestra debido a la máscara($,.) y otra el manejo interno del valor numérico.

Espero me hayas entendido.

Saludos. :)