Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Convertir datos DBEdit tipo $ a numero (https://www.clubdelphi.com/foros/showthread.php?t=33003)

destrukthor 23-06-2006 14:12:11

Convertir datos DBEdit tipo $ a numero
 
Hola Hola.
Mil disculpa por preguntar esto, pero no puedo cambiar los valor de un DBedit con formato $ 15.000,05, a numero real o entero para su suma o manipulacion.

desde ya muchas gracias.

Lepe 23-06-2006 14:19:27

no uses el DBEdit, sino el campo asociado en la BBDD, puede ser una de las siguientes formas:

NombreTAblaNombreCAmpo.ASFloat
table1.Fieldbyname('total').AsCurrency
table1.Fields[3].AsCurrency
etc.

Saludos

destrukthor 23-06-2006 15:16:45

GRacias pero....
 
Hola gracias pro responder, pero ocurre el siguiente problema cuando estas insertando un registro nuevo o este a su vez no le haz ingresado ningun valor y la funcion q hace los calculos analiza todos estos datos dice un error de datso Null, q debe corresponder a q no son ni cero y ningun numero es ahi mi problema tener q analizar cada campo del registro nuevo eso es largo si tengo 7 campos a calcular...
por eso lo de la conversion...

luisgutierrezb 23-06-2006 15:54:30

te recomiendo que pongas un valor por default si no creas los campos de la tabla en el evento afterinsert de la tabla puedes poner:

dataset['Campo1'] := 0;
dataset['Campo2'] := 0;

etc, asi cuando hagas las operaciones, no abra nulos abra ceros... si por alguna causa necesitas los nulos entonces puedes comprobar

if tabla.fieldbyName('Campo1').IsNull then
..acciones si es nulo
else
..acciones si no es nulo

Lepe 23-06-2006 16:05:05

Lo que si puedes hacer es la comprobación de valores nulos en la rutina que hace el cálculo.

Un Tfield, tiene el método IsNull, antes de hacer el cálculo, pregunta si alguno de los campos implicados es null, y en ese caso, no haces el cálculo.

Una posible idea es esta:
Código Delphi [-]
function HacerCalculos:Boolean;
var Nombres : Array [0..3] of string = ('precio', 'unidad', 'base','impuestos');
begin
  Result := false;
  for I:= low(Nombres) to High(nombres) do
  begin
    Result :=  tabla1.Fieldbyname(Nombres[i]).IsNull;
    If Result then Break;
  end;
end;

Si no te sirve, indica qué estas haciendo, que tablas, campos, Base de Datos, componentes de acceso, etc

Ayudar a ciegas es dificil ;)

Saludos

destrukthor 23-06-2006 16:36:32

Amigos gracias.....
 
Gracias nuevamente por su ayuda, ya encotre mi problema era el tipo de funcion q estaba usando para extraer los datos de la tabla, usaba...
Tabla1.FiendValues['campo1']
y esta no le dice q tipode dato es, asi q por obligacion ahi q usar una q le diga el tipode datos q tiene comop el FieldByName('campo1').AsFloat

destrukthor 23-06-2006 16:59:50

Gracias nuevamente
 
Gracias por las soluciones, me han dado las respuestas q necesitaba.

Gracias por la pronta respuesta.

destrukthor 24-06-2006 18:53:40

Hola Amigo, Suiendo con el problem
 
Hola lo funciona bien y ya no tengo el error de nulls, bien el problema radica en q tenemos un registro nuevo o la edicion de los campo, pues bien si cambio los valores en los DBEdit en tiempo real no me hace los calculos ya q no se an guardado, bueno la idea es q realice los calculos con los datos y despues guardar los q mas acomodan.
Es el ahi el q quiero usar el DBEdit q es donde se ingresan los datos q son de formato $ para poderlos dejar en valores reales.
Que complicado soy pero se q lo lograre.
Si lo descubro les aviso, se q tiene q haber una forma....
Desde ya gracias...

Lepe 24-06-2006 23:21:59

No uses el DBEdit, usa el campo, ya te lo dije, lo vuelvo a decir y no lo diré más :p

destrukthor 25-06-2006 13:15:10

Nuevamente te explico lepe..
 
Mi problema radica en q tengo un procedure en un evento Change del DBedit q es cuando cambia el valor de DBEdit y antes de hacer el Table1.Post quiero q los valores ingresados o modificados hagan un calculo antes y me entregue un resultado el cual determinara si los valores ingresas dan el resultado esperado antes de Guardar los cambio o nuevos ingresos, por lo tanto al no Guardar la tabla y sus campos sigue teniendo los valores de antes de las modificaciones.
La solucion seria trabajar todo con variales y Edit i hacer los calculos antes y transferiri los datos a las tablas pero seria muy largo e ineficiente es ahi el drama q tengo con los datos definido en una tabla con $ y sus DBEdit.
Quisiera q probaras lo q te digo para q te des cuenta del problema.
Como tu lo expresas funciona pero solo despues q se ejecuta el Table1.Post
Antes no me toma los valores q ingreso en el momento.
Ahora cuando cambia de foco un DBEdit debiera de hacer los calculos pero no conozco el evento q ocurre despues del quitar el foco a un DBEdit y pasar al siguiente.
Las modificaciones q me sujerists funcionan bien ya no tengo el error de Null, pero mientras no Guarde no me hace los calculos.

Sorry :)

Lepe 25-06-2006 19:34:49

El evento al perder el foco es el OnExit de ese DBEdit, y justo despues es cuando el valor de ese DBEdit se asigna al campo de la tabla, por tanto, en el mismo OnExit del DBEdit no te sirve, sino que tendrás que usar el OnEnter del siguiente DBEdit.

El problema que tiene ese método, es que el usuario puede no salir del DBEdit para guardar los cambios, es decir, da el foco al DBEdit, cambia el valor del DBEdit, y a continuación coge el ratón y le da a guardar los cambios. Si el botón de guardar es un TSpeedButton o derivado, no se genera el evento OnExit del DBEdit, porque precisamente los TSpeedButton no capturan el foco del ratón.

En ese caso habría que llamar a la rutina que hace los cálculos 20 veces, uno en el evento OnExit de cada DBEdit, (porque el usuario siempre puede editar un registro y cambiar un sólo dato para ver los cálculos y posteriormente cancelar la edición), y otra vez en el evento BeforePost de la tabla.

Como ves no es eficiente, pero la comodidad de modificar un dato, y que automáticamente se recalcule todos los demás, tiene un precio.

Saludos

kuan-yiu 26-06-2006 10:27:28

Pues que cosas, yo uso algo así y me funciona perfectamente.
En el evento "OnExit" de un TDBEdit llamo a un par de funciones y una de ellas utiliza el nuevo dato que el edit le ha pasado a la tabla. Ojo uso el de la consulta, no el del edit, aunque en mis pruebas he comprobado que son iguales.

Para aclarar un poco, yo tengo un TDBGrid con varias líneas que voy modificando y cuando acabo lo grabo todo en una única transacción. En el evento "OnExit" del TDBEdit realizo un reparto proporcional de cantidades entre las diferentes líneas del grid considerando el cambio que se ha producido en la actual.

Y me funciona perfectamente.

destrukthor 26-06-2006 16:35:51

Hola y mil gracias a todos....
 
Mil gracias a tosos los q respondieron en este tema, gracias a su ayuda he logrado resolver mi problema, el cual residia en los eventos y con las aclaratorias de ustedes funciono.
Utilizando el evento OnExit y los datos de las tablas mis calculos se realizan en directo y sin tener q guardar los cambios hasta su aprovacion.
Nuevamente mil gracias a todos fueron de gran ayuda y disculpas a quienes hice enojar con mis dudas, ya q soy nuevo en esto y es mi primera vez mmm claro q me refiero a delphi posupuesto... jijiji...
Gracias y gracias.

ThorTauro@hotmail.com este es mi correo para quienes quieran escribir sujerencias gracias.


La franja horaria es GMT +2. Ahora son las 15:08:55.

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