Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: Bazooka en Noviembre 23, 2012, 02:22:59 pm
-
HOLA AMIGOS estoy utiliznado este codigo para escribir en la base de datos y cuando intento guardar me tira el error
dim P01, P02
Call ConectarADO
P01 = "'" & txNombre.Text & "'"
P02 = FormatNumber ( txValor.Text , 2)
[color=blue][b]EDITADO LUEGO: [/color][/b]Hasta la medula que es un error de signos pero no cual es la mejor forma de resolver por que si a 2000,09 lo transformo en 2000.09 ME LO ACEPTA Y GUARDA OK!!!
'tbn probe asi P02 = Format(txValor.Text, "###0.00") y es lo mismo
ComandoSQL = "UPDATE t_Empleados SET f_nombre=" & P01 & "," & "f_monto=" & P02 & " WHERE ID= " & ID
'EN ESTA LINEA SE PRODUCE EL ERROR 13 NO COINCIDEN LOS TIPOS
ADOConexion.Execute ComandoSQL
ACLARO QUE EN LA BASE DE DATOS EL CAMPO f_Monto es Numerico-Simple de 2 diigitos!
y si txValor.Text= 2000,00 no me da el error y si tiene decimales txValor.Text = 1988,84 ahi Sí!!!! me tira el error
EDIT SI txValor.Text = 1988,84 LE CAMBIO EL SIGNO txValor.Text = 1988.84 ME LO TOMA OK!!! PERO EN EL SISTEMA QUE ESTOY TRABAJANDO EL PUNTO ES SEP DE MILES NO DE DECIMALES..!
-
Hablas de Access? Creo que si.
Algunos tips
Ten cuidado con la configuración regional. Si usas el punto como separador decimal cuando envies un numero con coma la coma no sera considerada y eso puede traer problemas en algun momento. Ahora si la configuracion regional te admite la coma como separador decimal entonces el punto te generara error. Checa eso
P01 y P02 no estan declaradas debidamente, considero que no basta con dim P01, P02. Deberías indicar el tipo de dato.
No se para que rubro estas realizando este trabajo, pero sinceramente te recomendaría que no formatees en BD, menos aun los decimales porque redondear a 2 decimales es alterar, sin embargo puede que la excepcio a esta regla es el rubro para donde desarrolles. Los formateos de N decimales deben estar en la capa de presentación y no en la BD.
EDITO: Jeje editaste cuando escribia, volvere a checar tu post.
-
Hola Ivancho Si es acces!!
Y si están declaradas
Dim P01, P02 'asi !!
Además el panel de control esta tanto en modenda como en numeros Separador de miles . (punto) y de Decimales , (coma)
Alguna forma de cambie solo de acuerdo al panel de control ya tengo armado todo !!
-
Doc, cuando declaras:
Dim P01, P02
y nada mas
Es como si lo estuvieras declarando asi:
Dim P01 As Variant
Dim P02 As Variant
No son, integer, ni double, ni string.
Yo preferiria especificar el tipo de dato cuando declaro y evitarme algun imprevisto por no tener control sobre los tipos de datos declarados.
Por lo otro supongo que con Replace del caracter (. por ,) podría funcionar, ahorita mismo no tengo el ejemplo a la mano pq te escribo desde el fono, pero creo que por alli podria ir tu solucion.
Saludos
-
Haber si anda el amigo Enter por ahi por que este code es parte de uno que creo él.
Gracias Iban
-
me dio dolor de cabeza ver algo como Dim P01, P02, siempre hay que declarar el tipo de dato, en tu caso tendrias que declarar uno como string y el otro double, hay que ver en la base de datos tambien como esta definido esos campos.
-
Les agradezco que lo aclaren y conozco bien los riesgos de no declarar los tipos correctos. En este caso en particular se trataba de un code de otra persona y asi estaba y asi lo deje.
De igua forma el que esta dando el error lo cambie a Dim P02 as Single y todo sigue igual acabo de utilizar la siguiente linea P02 = Replace(P02, ",", ".") como me dijo el amigo Ivan y Funciono!!
Y YA ACLARE SEBA QUE EN LA BASE ESTA COMO NUMERO SIMPLE DE 2 DECIMALES EL CAMPO EN CUESTION!!! ES EL P... ADO QUE ESTA JODIENDO! QUE NO SE POR QUE CARAJO NO TOMA CORRECTAMENTE (ESAS COSITAS DE MICROSOFT)
-
En esos casos yo hago lo siguiente (no es lo más ortodoxo, pero me funciona):
Public Function Formato_numeros(ByVal Valor as Currency)
dim NuevoValor as Double
NuevoValor = Replace(Valor, ",", "!")
NuevoValor = Replace(NuevoValor, ".", "")
Formato_numeros = Replace(NuevoValor, "!", ".")
Y la devolución de esa función es lo que guardo en la base de datos (en un campo DECIMAL).
EDITO: Perdón, no había visto el último comentario.
-
En esos casos yo hago lo siguiente (no es lo más ortodoxo, pero me funciona):
Public Function Formato_numeros(ByVal Valor as Currency)
dim NuevoValor as Double
NuevoValor = Replace(Valor, ",", "!")
NuevoValor = Replace(NuevoValor, ".", "")
Formato_numeros = Replace(NuevoValor, "!", ".")
Y la devolución de esa función es lo que guardo en la base de datos (en un campo DECIMAL).
EDITO: Perdón, no había visto el último comentario.
Gracias Geronimo!!
Para que serían los signos "!" ?
-
jajaja Ahora que lo veo, es ridículo. En realidad debiera simplemente reemplazar el punto por nada y luego la coma por punto.
Public Function Formato_numeros(ByVal Valor as Currency)
dim NuevoValor as Double
NuevoValor = Replace(Valor, ".", "")
Formato_numeros = Replace(NuevoValor, ",", ".")¡Gracias por hacerme ver este sinsentido!