Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema con el componente TDBEdit (https://www.clubdelphi.com/foros/showthread.php?t=74990)

noejfh 22-07-2011 18:45:14

Problema con el componente TDBEdit
 
Saludos a los que vean este nuevo hilo y agradezco quien pueda enviarme solución al problema que poseo con el uso correcto del componente DBEdit:

Estoy realizando un pequeño formulario para calcular precios de venta a partir de un precio de compra (costo), utilizo FDB (Firebird 2.5) un componente DBExpress llamado: BaseDatos para la conexión y consulta un TDBQuery: qArticulo con su respectivo proveedor llamado dspArticulos y ClientDataSet llamado cdsArticulos:

el asunto es que el TDBEdit me envia un mensaje de error ya que el campo de unos de los dbedit esta vacio y la unica manera es ingresar un valor por defecto y no he logrado ponerlo con la propiedad DisplayFormat al cargar el formulario ya con esos campos llenos 0.00.

Alguien me puede dar una pequeña idea de lo que pudiera realizar?


Saludos

Nota: utilizo Delphi XE

Noé

oscarac 22-07-2011 18:48:17

y que mensaje de error te sale?

noejfh 22-07-2011 18:59:35

El mensaje is not a valid Floating point Value.
Esto es seguro porque en el evento on change del DbeEdit, llamo un procedimiento declarado en Delphi.
Y en el procedimiento se utiliza el valor que tienen los Dbedits, Ya convertidos a Float.
La cuestion es que ocupo que los dbedits a la hora que se muestre el formulario, Muestren un Valor de 0. :S Nose si eso se pueda hacer...
Porque usando Edits si me funcionan los cálculos, Mostrando que el valor por default sea 0...
Muchas Gracias...

oscarac 22-07-2011 19:05:06

Cita:

Empezado por noejfh (Mensaje 407187)
La cuestion es que ocupo que los dbedits a la hora que se muestre el formulario, Muestren un Valor de 0. :S Nose si eso se pueda hacer...

disculpa pero esto no lo entendi

ecfisa 22-07-2011 19:18:10

Cita:

Empezado por noejfh (Mensaje 407187)
El mensaje is not a valid Floating point Value.
Esto es seguro porque en el evento on change del DbeEdit, llamo un procedimiento declarado en Delphi.
Y en el procedimiento se utiliza el valor que tienen los Dbedits, Ya convertidos a Float.
La cuestion es que ocupo que los dbedits a la hora que se muestre el formulario, Muestren un Valor de 0. :S Nose si eso se pueda hacer...
Porque usando Edits si me funcionan los cálculos, Mostrando que el valor por default sea 0...
Muchas Gracias...

Hola.

Sería muchisimo mas sencillo poder ayudarte si agregas la parte del código que te dá problemas y el procedimiento implicado.
( Cuando pongas tu código, recordá encerrarlo entre las etiquetas [delphi] [/delphi] )

Un saludo. :)

noejfh 22-07-2011 19:21:08

Formulo nuevamente la pregunta:

Viste el mensaje de error, creo que se debe a que tengo cuatro dbEdit:

dbEditCosto dbEditGasto dbEditUtilidad dbEditVarios

Sin Embargo realize un procedimiento el cual me realiza calculos de incremento
de precio a partir del dbEditCosto sin embargo en el evento OnChange de los dbEdit me manda el mensaje porque aparece un valor sin calcular.

Trato de ver la forma de poner por defecto un valor a los dbEdit pero no se si se podra para que mi procedimiento funcione correctamente utilizando el componente TDBEdit.

Gracias por tu paciencia.

noejfh 22-07-2011 19:42:53

Esto es mi codigo:

El procedimiento no me da problemas sin embargo si tienen alguna sugerencia les agradeceria mucho...
Código Delphi [-]
  Gasto := StrToFloat(frmArticulos.dbeGastos.Text);
  Utilidad := StrToFloat(frmArticulos.dbeUtilidad.Text);
  Varios := StrToFloat(frmArticulos.dbeVarios.Text);


Saludos

Noé

ecfisa 22-07-2011 20:02:00

Hola noejfh.

Me inclinaría a pensar que el problema se produce por el formato. Por ejemplo si dbeGastos.Text tiene el valor '$ 1.890,38' e intentas convertirlo mediante la función StrToFloat te vá a arrojar el error que mencionas.
Ese formato es a sólo fin de ser mostrado, internamente Delphi no lo reconoce como un número decimal válido.

Una solución sería utilizar el valor del campo asociado al DBEdit:
Código Delphi [-]
  Gastos:=StrToFloat(frmArticulos.tuDataSet.FieldByName('tuCampo').AsString);
  ...

O simplemente:
Código Delphi [-]
  Gastos:= frmArticulos.tuDataSet.FieldByName('tuCampo').AsFloat; // o AsCurrency
  ...

O la misma cosa escrita de otro modo:
Código Delphi [-]
   with frmArticulos.dbeGastos.DataSource.tuDataSet do
     Gastos:= FieldByName('tuCampo').AsFloat;
  ...

Saludos.

Caral 22-07-2011 20:03:04

Hola
El DBedit muestra lo que hay en una tabla.
Si se abre la tabla se muestra lo que esta en ella.
Si se hace un insert queda en blanco.
Si se quiere que tenga un valor al iniciar el insert simplemente se una la propiedad edit del dbdeit.
Si se quiere se pueden recorrer todos y dejarlos en cero.
Saludos

noejfh 23-07-2011 00:47:26

Muchas Gracias por la ayuda, me ha sido muy valiosa.
Pero sigo con el problema, es que otro dbEdit tiene un evento OnChange, donde se le dice que realize cierto calculos con los otros dbeedit. Con la propiedad .tex;
Segun yo para que aparesca un cero en los dbedits que toma el valor ago esto.

Código Delphi [-]
dbeGastos.Text:= '0.00';
tambien asi y nada
Código Delphi [-]
dbeGastos.EditText:= '0.00';
para que no me de el error de tipo vacio.
Porque en realidad empieza a hacer el calculo sin tener valor, he ahi el problema..
Que Cuando le ago la asignacion realiza el proceso on change que se llama en el otro dbedit :S, ya que los calculos deben de ser consecutivos y en tipo real digamos, que si cambimos un valor los otros tienen que cambiar tambien.
Muchas Gracias Por la Ayuda, Espero haberme podido explicar un poco.:confused:

Caral 23-07-2011 01:31:31

Hola
La verdad es que yo de plano eliminaría los DBEdits y usaría Edits normales.
Saludos

Paoti 28-07-2011 21:44:57

Hola.

Prueba a hacer esto. (Que es una forma elegante de hacerlo)

1. En el objeto TQuery. en este evento AfterInsert inicializa el valor de la sigguiente forma.

Código Delphi [-]
procedure TForm1.qry1AfterInsert(DataSet: TDataSet);
begin
    // CampoCantidad  es el nombre del campo que quiere inicializar
    qry1.FieldByName('CampoCantidad').AsCurrency := 0;
end;


ahora, lo que veo que estas haciendo es calcular información,


mirate en la ayuda del foro, referente a campos calculados,

consejo: No programes a eventos de los dbedits, trabaja mejor con los eventos del TQuery.

Consejo2. Para evitar conflictos de captura de información en cajas de texto donde quieres números, usa componentes ya especializados que te permiten introducir solo numeros. Tip revisa y documentate sobre estos componentes. http://jvcl.delphi-jedi.org/ hay muchos para evitar el trabajar en validaciones.


Saludos.


La franja horaria es GMT +2. Ahora son las 06:31:16.

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