FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Currency desde DBGrid a StringGrid sin perder precisión
Estoy convencido que esto que voy a preguntar debe estar en algún lugar del foro, pero no lo he podido encontrar.
Resulta que tengo una aplicación típica de punto de venta, en la que muestro los resultados de la búsqueda de artículos en un DBGrid y luego desde este elijo que artículo se agregará a la venta (armada en un StringGrid). Lo que va sucediendo es que desde el número original, al que se muestra en pantalla en la búsqueda en formato moneda, al que posteriormente se agrega al StringGrid se va perdiendo precisión con los redondeos. Los problemas son con los artículos cuyo precio es muy pequeño y cuando se venden mucho de ellos. Por ejemplo: en 200 artículos de $0.13 hay una diferencia de $0.8 (80 centavos). Si bien no es mucho, me gustaría saber si es factible acomodar eso y quizás lo más importante ¿tiene sentido hacerlo?. La consulta SQL es la siguiente:
Saludos y gracias de antemano!
__________________
https://www.youtube.com/DexterBass |
#2
|
||||
|
||||
En eso no tiene absolutamente nada que ver los dbgrids, stringgrinds, etc.
¿Qué tipo de dato usas en los campos de la tabla para almacenar importes? |
#3
|
||||
|
||||
Hola Casimiro.
Muchas gracias por responder. El campo Precio es del tipo Moneda (uso una base de datos de Access XP). Saludos!
__________________
https://www.youtube.com/DexterBass |
#4
|
||||
|
||||
Hola.
¿ Con que función pasas el valor moneda a las celdas del StringGrid ? Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#5
|
||||
|
||||
Hola ecfisa!.
Muchas gracias a vos también por responder. Al importe lo tomo desde el DBGrid de la siguiente forma:
Por lo que me estás preguntando, intuyo que no es la manera más correcta. Saludos!
__________________
https://www.youtube.com/DexterBass |
#6
|
||||
|
||||
Hola Dexter182.
No, no digo que no sea correcta... pero por las dudas proba de este modo: Y también recorda que es mejor usar la función FieldByName que la propiedad vectorial Fields, ya que si algún día cambias el órden de las columnas podrías tener problemas. Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#7
|
||||
|
||||
Ecfisa: ¡Nuevamente gracias por tu tiempo!
Probé de la manera que me recomiendas y me salta una excepción EConverterError '$ 38,54' is not a valid floating point value. Por las dudas cambié el FloatToStr por CurrToStr, pero obtuve los mismo resultados. Cita:
Además mejora la legibilidad del código. ¡Gracias por el consejo! Saludos!
__________________
https://www.youtube.com/DexterBass |
#8
|
||||
|
||||
Crea un registro TFormatSettings e indica los parámetros de conversión acorde a la configuración regional de tu sistema. Ese registro lo envías como parámetro a las versiones sobrecargadas de cualquier función de conversión
|
#9
|
||||
|
||||
Gracias Agustín por brindar otra sugerencia!
Yo creo que debo tener un gigante error de concepto en como usar los DBGrids, más que nada por esto que me dice Casimiro: Cita:
Tampoco logro sacarle provecho a lo que sugiere Agustín y estoy convencido de que es parte del mismo error de concepto. Cita:
Puedo usarla directamente desde un ADOQuery, pero para usarla desde un DBGrid tengo que hacer algo como esto: Agradezco a todos su ayuda y les pido perdón por mi ignorancia. Saludos!
__________________
https://www.youtube.com/DexterBass |
#10
|
||||
|
||||
Casimiro intenta decirte que los controles visuales simplemente se limitan a mostrar datos
Los datos propiamente dichos estan en un TDataSet (ni siquiera un ADOQuery, que es una implementacion; TDataSet es abstracto) Cuanto mas abstractas sean las clases que usas, mas facil es de realizar mantenimientos mas adelante a tu codigo Cuanto mas concretas sean las clases que usas, es mas dificil porque al "atarte" a una implementacion particular, si luego tenes que cambiar a otra, podes perder algunas caracteristicas o te obliga a cambiar la forma de hacer las cosas En el DBGrid no tenes la propiedad FieldByName porque es de un DataSet Osea, en algun momento conectaste tu DBGrid a un DataSet usando de intermediario un DataSource. Tenes que tener muy presente que haya un DataSource en el medio, el DataSet que conoce el Grid es uno solo. En alguna parte de tu codigo estas creando esa relacion
Si haces la prueba de cerrar "TuDataSet/Query/etc" o modificar un campo, o lo que fuera, el Grid se "actualiza" Por lo tanto para acceder a los datos del Grid, la forma correcta es usando el DataSet. |
#11
|
||||
|
||||
Cita:
AgustinOrtu lo ha dejado claro, un dbgrid es solamente una "ventana" a los datos, un lugar por donde mostrar, repito, mostrar, mostrar los datos del dataset. Es en el dataset donde debes hacer todo el trabajo. La ventana mostrará lo que hagas en el dataset. La ventana es el dbgrid. Si pintas tu habitación de color azul, desde la calle la gente verá a través de tu ventana la habitación azul. Si la pintas de verde, la gente verá a través de la ventana que la has pintado verde. Pero tú no haces nada con la ventana, salvo cambiarle el tamaño, ponerle unas cortinas para que no te vean o cerrarla y luego abrir la ventana en otra habitación para que la gente vea otros datos/muebles. Piensa siempre en dbgrid = ventana. |
#12
|
||||
|
||||
Hola Dexter182
Cita:
Desde el componente DBGrid podes acceder al DataSet asociado y al campo mismo, ejemplo: Mostrará tres veces el valor correspondiente al registro actual. Es decir que [1], [2] y [3] son diferentes modos de hacer referencia al mismo registro (o valor). Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#13
|
||||
|
||||
¡¡¡Muchísimas gracias a los tres!!!!
Han sido realmente muy claros. Nunca me percaté de esto que tan claramente me explicaron y siempre accedí a los datos desde el mismo DBGrid (es decir, siempre convirtiendo de texto a lo que fuese necesario). Tengo varias cosas para corregir en mi programa. Muchas gracias de verdad!!!! PD: Si bien no me dedico a la programación, mi trabajo se ha facilitado mucho con un programa que hice en Delphi y al que siempre le voy agregando, modificando y arreglando cosas y este foro es mi fuente habitual de consulta para intentar desasnarme.
__________________
https://www.youtube.com/DexterBass |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
dbgrid o stringgrid | shoulder | Varios | 7 | 23-07-2008 00:38:52 |
dbgrid o stringGrid | josi | Varios | 1 | 22-05-2008 20:41:24 |
Impresión desde un StringGrid... | Lester | Impresión | 10 | 26-03-2005 07:14:29 |
DBGRid vs StringGrid | Ray | Conexión con bases de datos | 1 | 28-10-2004 08:35:46 |
Impresion desde un StringGrid | fmonte | Varios | 3 | 17-09-2004 05:28:29 |
|