Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Hasta donde yo sé, no es conveniente usar double precision para importes monetarios en Firebird (y otras BBDD), ya que dichos valores no se guardan con el valor exacto y al rescatarlos tendrás imprecisiones.

Estos problemas sobre todo, llegan al realizar operaciones con los datos de facturas, base imponible + porcentaje iva - porcentaje de retencion = total factura.

Lo mínimo: NUMERIC(10,2) en dialecto 3, ya que se guardan internamente como un Int64 que no tiene problemas.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #2  
Antiguo 03-10-2007
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 21
felipe88 Va por buen camino
Usa DBExpress...
__________________
Web
Responder Con Cita
  #3  
Antiguo 04-10-2007
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 20
rolandoj Va por buen camino
Smile Caso de Precisión

Cita:
Empezado por Lepe Ver Mensaje
Hasta donde yo sé, no es conveniente usar double precision para importes monetarios en Firebird (y otras BBDD), ya que dichos valores no se guardan con el valor exacto y al rescatarlos tendrás imprecisiones.

Estos problemas sobre todo, llegan al realizar operaciones con los datos de facturas, base imponible + porcentaje iva - porcentaje de retencion = total factura.

Lo mínimo: NUMERIC(10,2) en dialecto 3, ya que se guardan internamente como un Int64 que no tiene problemas.

Saludos
Hola,

La observación es importante y amerita una explicación:

Como dije antes, la metodología de portabilidad incluye varios aspectos. Uno de ellos es el problema de la precisión de datos numéricos. En general, el código no debería quedar dependiente de la implementación que un motor de Base de Datos haga de los valores numéricos. El mayor o menor esfuerzo que se haga para lograr esto depende de las condiciones de diseño de la aplicación y la proyección en el tiempo de dicho diseño.
El consejo más básico es, por supuesto, reducir el uso de decimales a lo estrictamente necesario.

El caso más sencillo es cuando los valores máximos proyectados no exceden las capacidades de la doble precisión. La clave está en definir lo más homogeneamente los decimales requeridos y efectuar tempranamente redondeos asegurando que los bloques de datos individuales queden consistentes para que a su vez sean consistentes los acumulados calculado a partir de ahí. En otras palabras, confiar los redondeos a la lógica de la aplicación y no a las capacidades del motor.

Por ejemplo, entre los software que he desarrollado con esa metodología está una contabilidad completa, incluyendo cálculos automáticos de depreciación y ajustes por inflación, que actualmente trabaja con Interbase 6 y en 6 años no ha dado problemas de precisión.

El asunto se complica es cuando la aplicación requiere valores numéricos proyectados que exceden la capacidad de la doble precisión. Hay varias alternativas dependiendo de la complejidad; y de hecho, si es mucha. incluso podría ser necesario considerar sacrificar portabilidad.

Se puede escribir mucho más sobre esto; pero ya sería tema de otro hilo
Responder Con Cita
  #4  
Antiguo 13-12-2007
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 21
peccatum Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje

Lo mínimo: NUMERIC(10,2) en dialecto 3, ya que se guardan internamente como un Int64 que no tiene problemas.
Hola

Hice caso y cambié varios dominios a numerico con escala ...

Me queda la duda de cual es la mejor forma de pasar parámetros, ya que el "query.paramsByname('precio').asNumeric;" no existe... por ahora estoy usando ".asCurrency" pero no se si es lo más adecuado...

saludos
Responder Con Cita
  #5  
Antiguo 13-12-2007
akela akela is offline
Miembro
 
Registrado: may 2004
Posts: 21
Poder: 0
akela Va por buen camino
Cita:
Empezado por peccatum Ver Mensaje
Hola

Hice caso y cambié varios dominios a numerico con escala ...

Me queda la duda de cual es la mejor forma de pasar parámetros, ya que el "query.paramsByname('precio').asNumeric;" no existe... por ahora estoy usando ".asCurrency" pero no se si es lo más adecuado...

saludos
Si es lo correcto, porque delphi así te maneja el redondeo que se usa abitualmete para el $$ (€)
Responder Con Cita
  #6  
Antiguo 14-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Si has cambiado los campos en la base de datos, te faltaría hacerlo en Delphi.

doble clic a tu tabla/query y verás los campos, si seleccionas uno, en el Inspector de objetos te dirá arriba del todo "Importe TFloatField" bien, le das a supr quitando el campo y boton derecho add, ahora mira la declaración, te debería decir "Importe TBCDField" (esto dependerá de tus componentes de acceso, BDE, MDO, IBX, FIBPLUS, BCD es Binary Coded Decimal que es el representante de numeric o decimal de la base de datos.

Quizás al usar campos Float en delphi, se tengan imprecisiones al multiplicar/dividir entre campos, porque recordemos que el fallo es inherente al tipo Float o double precision.

Edito: Después puedes usar .AsCurrency, como muy bien apunta akela.

Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 14-12-2007 a las 01:56:49.
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
Firebird 1.5.4 funciona en Win Vista pero Firebird 2.0.1 NO !!! Hagen Firebird e Interbase 5 19-05-2007 21:17:54
Firebird 1.5.3 Error:No puede ejecutarse Firebird Guardian xq ya hay una instancia Delphius Firebird e Interbase 5 26-01-2007 10:19:20
alguien ha utilizado Firebird DDX provider? (conectarse con db en firebird!) JuanErasmo .NET 1 04-11-2006 16:17:12
Firebird : Llamado para probadores de Firebird 2.0 JOSEPE Firebird e Interbase 0 12-03-2005 20:33:18
Problemas Firebird Super Server 1.5 con RFunc Firebird v 1.0 Prophoenix Firebird e Interbase 1 09-03-2004 11:40:48


La franja horaria es GMT +2. Ahora son las 16:32:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi