Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-09-2014
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
problemas con decimales al insertar en tabla

Buenas amigos,

La verdad no se donde puede estar el problema.
Tengo una tabla que tiene un campo decimal(4,2) le escribo en un edit 5.38 y me lo guarda como 5.37.
Ya probe a hacer

Código SQL [-]
 convierte:=strtofloat(preciosiniva.text);
          showmessage(floattostr(convierte));
     fmodulo.zqcompras.FieldByName('preciocoste').AsFloat:=convierte;

le puse 5.38, lo convierto y lo vuelvo a mostrar con el showmessage y me marca 5.38, pero a la hora de guardarlo me pone 5.37.

Ya probe a añadirlo directamente con un dbgrid y no hay problema, me pone 5.38.

No me pasa con todos los numeros, solo con algunos, por alguna razon a la hora de escribir en la tabla lo redondea o nose, porque si le pongo en el edit, por ejemplo 5.388 si me guarda 5.38.

Ya revise el query por si habia algo en las propiedades pero no lo encontre.

y la cosa esta rara .

alguno sabe por donde puedo mirar?
Responder Con Cita
  #2  
Antiguo 14-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola anubis.

Puede producirse por el tipo definido en la creación de la tabla o por el modo de asignación que estas haciendo al componente.
Te aconsejo usar tipos escalados en la definicion de la tabla: Usando NUMERIC y DECIMAL.

Y desde Delphi usar el tipo Currency de este modo:
Código Delphi [-]
var
  convierte: Currency;
begin
  convierte:= StrToCurr(preciosiniva.text);
  fmodulo.zqcompras.Edit;
  fmodulo.zqcompras.FieldByName('preciocoste').AsCurrency:= convierte;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 14-09-2014
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
si gracias por responder pero use decimal(4,2), el problema ahora es mayor proque si cambio el asfloat por ascurrency, ademas de haber cambiado en el query
Código Delphi [-]
 Campo6                 := Tcurrencyfield.Create(fmodulo.zqprecios);
   Campo6.FieldName       := 'precio';
   Campo6.FieldKind       := fkdata;
   Campo6.DataSet         := fmodulo.zqprecios;

   Campo3                 := Tfloatfield.Create(fmodulo.zqprecios);
   Campo3.FieldName       := 'preciocoste';
   Campo3.FieldKind       := fkdata;
   Campo3.DataSet         := fmodulo.zqprecios;

donde campo6 es del tipo currencyfield y el campo3 es floatfield, ahi el currency da error de violacion.

Pense que si cambiaba el floatfield por currencyfield era lo mismo.
Responder Con Cita
  #4  
Antiguo 14-09-2014
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Bueno el tema del currency la verdad nose porque no funciona asignandolo a currency, sale un aviso de operacion de coma flotante invalida.

Ya habia hecho un miniprograma de una base de datos ejemplo para probar todo esto y al final tuve que cambiar el tipo decimal(4,2) por numeric(6,2), pense que la decimal era de mas precision que la numerica, pero bueno ya quedo bien el tema

gracias
Responder Con Cita
  #5  
Antiguo 15-09-2014
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Me extraña el asunto siendo decimal el campo, no sé tampoco que sistema gestor de bd estas utilizando. Yo siempre le echo la culpa al paso de decimal a binario cuando me pasan estas cosas con algunos números y con otros no. Entonces compruebo si al pasar de decimal a binario dan un valor exacto en binario o son periódicos. Cuando es un decimal exacto y en binario también no hay problema pero cuando en binario pasa a ser periodico me pasan estas cosas asi que al final siempre acabo redondeando a mano a los decimales que necesito los campos que leo de la bd. Mis investigaciones al respecto me han llevado a la conclusión de que la mayoria de las bd guardan en binario los datos númericos y cuando estos son flotantes pueden surgir este tipo de problemas.

Última edición por engranaje fecha: 15-09-2014 a las 12:58:45.
Responder Con Cita
  #6  
Antiguo 15-09-2014
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
gracias por contestar.
uso firebird y la verdad tampoco entiendo porque hace eso, aun probando en un base de datos nueva de ejemplo. pero bueno ya pude cambiar a numeric y funciona pero no deja de ser extraño
Responder Con Cita
  #7  
Antiguo 17-09-2014
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Poder: 21
Toni Va por buen camino
Ecfisa tienes un privado. Gracias!
__________________
Saludos,

Bitman
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ajustar decimales en Tabla Paradox. zeta2 Conexión con bases de datos 3 13-04-2010 01:36:14
Insertar y/o modificar un campo con decimales rafita Varios 5 30-07-2007 11:41:28
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla taru MySQL 1 27-07-2006 16:36:12
Problemas al insertar en una tabla vhirginia Conexión con bases de datos 30 21-04-2004 23:54:57
Como insertar datos de una tabla en otra tabla? Salomon Firebird e Interbase 1 28-08-2003 12:29:40


La franja horaria es GMT +2. Ahora son las 16:36:27.


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
Copyright 1996-2007 Club Delphi