Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Inconsistencias al guardar datos con punto decimal (https://www.clubdelphi.com/foros/showthread.php?t=61758)

Lizette 20-11-2008 22:50:19

Inconsistencias al guardar datos con punto decimal
 
Hola, tengo un problema, mi base de datos esta en mysql, y guardo en la tabla una serie de valores provenientes de edits, 1 combobox, y 2 maskedit, 2 edits contienen valores con punto decimal crrespondientes a precio, el caso es que al hacer la consulta en un dbgrid me mostraba si era entero el puro entero sin .00, si era real me ponia .9 o .11, lo guardo como:

ADOtblProducto.FieldByName('CveProd').AsString:=EditCve.Text;

Todos los campos los tengo como .AsString, se me ocurrio poner .AsCurrency o .AsFloat en los campos q contienen los datos con punto decimal, pero no me funciono, porque los enteros si me los pone bien pero los valores decimales, en vez del valor me pone una serie de numeros que ni al caso, lo volvi a poner como .AsString pero igual, me pone su monton de numeros, pero en la tabla si me los visualiza bien, si los guarda correctamente.. No se cual sea el problema.. :(

Este es mi código:

Código Delphi [-]
procedure TfrmProductoAdd.BitGuardarClick(Sender: TObject);
begin
   ADOtblProducto.Open;
  with ADOtblProducto do
  begin
   ADOtblProducto.Insert;
   ADOtblProducto.FieldByName('CveProd').AsString:=EditCve.Text;
   ADOtblProducto.FieldByName('Descripcion').AsString:=EditDes.Text;
   ADOtblProducto.FieldByName('Presentacion').AsString:=EditPres.Text;
   ADOtblProducto.FieldByName('Clasificacion').AsString:=ComboClas.Text;
   ADOtblProducto.FieldByName('Laboratorio').AsString:=EditLab.Text;
   ADOtblProducto.FieldByName('Existencias').AsString:=EditExis.Text;
   ADOtblProducto.FieldByName('FechaEnt').AsString:=EditFechaEnt.Text;
   ADOtblProducto.FieldByName('FechaCad').AsString:=EditFechaCad.Text;
   ADOtblProducto.FieldByName('PrecioC').AsString:=EditPrecioC.Text;
   ADOtblProducto.FieldByName('PrecioV').AsString:=EditPrecioV.Text;
   ADOtblProducto.Post;
   ADOtblProducto.Refresh;
   ADOtblProducto.Close;
  end;
end;

ContraVeneno 20-11-2008 23:21:47

yo te recomendaría que en lugar de usar TEdit o TMaskEdit para valores monetarios, utilizaras un control hecho específicamente para tal caso.

Las Jedi (JVCL) tienen uno muy bueno, llama TjvValidateEdit al cuál solo le estableces dos propiedades y listo. Y este lo podrías utilizar así:

ADOtblProducto.FieldByName('Precio').AsCurrency:= jvValidateEdit.AsCurrency

olbeup 21-11-2008 11:01:15

Hola Lizette,

Yo utilizo SQL SERVER 2005 y defino el campo si va a contener número decimales lo defino de la siguiente manera:

Importe decimal(10,2) = 7 Enteros y 2 decimales

A la hora de grabar en la base de datos es la siguiente:

Código Delphi [-]
ADOtblProductos.FieldByName('Importe').asFloat := StrToFloat(EditCve.Text);
Espero que te sirva

Un saludo.

dbautista 21-11-2008 20:30:21

Formatear decimales
 
Tambien puedes hacerlo de esta forma
ADOtblProductos.FieldByName('Importe').asstring :=
Formatcurr('#0.00',StrToFloat(EditCve.Text));indicando el numero de decimales que necesitas, y los componentes JVCL son buenos, lo malo es que si cambias de version de delphi te olbiga a cambiar la version de estos tambien, puedes utilizar TPBNumEdit, estos funcionan hasta el momento en delphi 2007 sin ningun problema.....

Por otro lado, es mejor que trabajes con los componentes amarrados a tu base de datos, para que automaticamente delphi tome el control de los tipos de datos de tu base, asi no tienes que estar preocupandote por esta clase de problemas.........


La franja horaria es GMT +2. Ahora son las 05:35:30.

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