Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   66,00 no es double ??? (https://www.clubdelphi.com/foros/showthread.php?t=11423)

chele 14-06-2004 12:32:09

66,00 no es double ???
 
Buenas, tengo una variable declarada asi :

suma : double;

Y le envio el valor :

66,00

Y me da este error :

no es un valor entero valido

¿Que esta mal? ¿por que no es entero? ....

Venga gracias anticipadas.

chele 14-06-2004 12:34:50

Vale segun veo es que es el . no la ,

¿Como le hago un replace? en vb es facil suma = replace(suma,",",".")

Pero en delphi no conosco la funcion ...

Gracias anticipadas.

__cadetill 14-06-2004 12:46:59

Cómo obtienes el dato? quizás cambiando la forma de obtención solucionaríamos el problema

No obstante puedes mirarte la función StringReplace o la función Pos

chele 14-06-2004 12:52:36

A ver creia solucionarlo pero nada, este es el codigo que tengo :

Código Delphi [-]
procedure TlFactAutorizaciones21.hinteriuraPrint(sender: TObject;
  var Value: String);

function CambiaEn(Cadena, Esto, Por: String): String;
   var
     aPos: Integer;
   begin
     aPos := Pos(Esto, Cadena);
     Result:= '';
     while (aPos <> 0) do begin
       Result := Result + Copy(Cadena, 1, aPos-1) + Por;
       Delete(Cadena, 1, aPos + Length(Esto)-1);
       aPos := Pos(Esto, Cadena);
     end;
     Result := Result+Cadena;
   end;

var
a : string;
ParaCambiar:string;
//a : double;
begin


a:=CambiaEn(value,',','.');

     if anterior1 = anterior then
        begin

        end
     else
         begin
        suma1 := suma1 + strtofloat(a);
         end;

anterior1 := anterior;
end;

Pero me da el mismo error, y ahora estoy enviando el valor 66.00 ya que hago el reemplazo correctamente.

El valor me llega de una base de datos y yo lo leo de un QRDBText

¿Que puedo hacer?. Pense que al quitarle la coma y ponerle punto iba a funcionar pero nada.

Gracias anticipadas.

chele 14-06-2004 12:58:57

Vale ya esto si que no lo entiendo, si pongo esto :

suma1 := 30.3;

Me dice que es correcto, es decir no peta

Pero si pongo :

suma1 := strtoint(a);

ME da el error, si miro el valor de a es 66.00 es decir correcto

Bua me esta ganando no se que error es ...

__cadetill 14-06-2004 13:00:20

Vale, y por qué no accedes al dataset asociado y coges directamente el valor de allí?

Código Delphi [-]
suma1 := suma1 + Sender.DataSet.FieldByName(Sender.DataField).AsFloat;

chele 14-06-2004 13:12:10

Por que no es un dataset, yo creo el codigo segun necesito, el cliente mete muchas variables y creo el sql, a partir del sql creo el resto, no es un dataset.

Esto es mas menos :

Código Delphi [-]
        qry := TIBQuery.Create(qry);
        qry.database := datamodule2.database;
        Qry.SQL.Text := cadenaSQL;
        qry.open();

        llistat := Tlfactautorizaciones21.create(Self);

        llistat.QuickRep1.DataSet := qry;

Donde cadenaSQL depende de muuuchas cosas, es asi como nos han dicho qeu tenemos que hacerlo en la empresa y no me dejarian cambiarlo.

¿se te ocurre otra forma de hacerlo?

__cadetill 14-06-2004 13:18:16

jeje, cuando hablo de dataset, lo digo de forma genérica, es decir, a cualquier descendiente de la clase dataset (como puede ser un TIBQuery)

La idea sigue siendo la misma, da igual que lo que tengas detrás sea un TIBQuery, como un TQuery, como TTable, como un TIBDataset,....... Lo importante es que deriban todos de Dataset y que todos tienen el FieldByName que te menciono en el ejemplo (ya que este método es de la clase dataset, no de la clase TIBQuery u otra)

Pruebalo y me comentas ;)

chele 14-06-2004 13:25:37

Ah si ??? juas cada dia me doy mas cuenta de lo poco que se jeje.

Y como le referencio ???

Es decir todo esto lo hago en otro form ... ¿como lo referencio?

__cadetill 14-06-2004 13:28:38

Bueno, la operación de suma la haces en el OnPrint de un TQrDbText, no?

Si es así, en principio sólo tendrías que poner la linea de código que te he pasado (siempre y cuando suma1 sea de tipo Float)

__cadetill 14-06-2004 13:32:34

Perdón, la linea anterior tiene un error, tendría que quedar algo así

Código Delphi [-]
if Sender is TQrDbText then
  suma1 := suma1 + TQrDbText(Sender).DataSet.FieldByName(TQrDbText(Sender).DataField).AsFloat;

chele 14-06-2004 16:44:38

Bua funciona perfecto, gracias :)


La franja horaria es GMT +2. Ahora son las 20:18:28.

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