Problemas con punto decimal en vb.net t mysql

Resuelto/Cerrado
chechu - 13 ene 2009 a las 23:33
 guillermo - 26 oct 2023 a las 21:10
Hola,
Haciendo una breve reseña de lo que estoy intentando hacer, les comento:
Estoy trabajando con VB .NET 2005 y MYSQL 5.0
Conectando via ADO .NET
Mi problema es el siguiente:
Tengo una llamada Costos (por darle un Nombre)
Que tiene una columna con datos Decimales
Pero cuando hago mi consulta y lo cargo en un Dataset, para luego asignar a un Textbox, como en mi Configuración Regional esta Predeterminado que la coma (,) es separador de Decimales, me toma al punto (.) como separador de Miles, por lo tanto como en la Base de Datos el valor es por ej. 10.3 entonces me toma como 103,00

Quisiera poder recibir bien los datos, sin necesidad de modificar mis configuraciones Regionales.

Aguardo sus comentarios al respecto, y desde ya agradezco su ayuda.

Saludos..
Consulta también:

12 respuestas

Bueno según veo tienen problemas con la configuración regional, pues yo uso la siguiente solución. Solo vb.net 2008, no se si servirá para otra versión.

Lo que tienen que hacer es decirle a su programa que cree su propia configuracion regional, es decir el programa que ustedes están diseñando usará la configuración regional que ustedes construyan y no la de windows.

ejemplo

importan el siguiente espacio de nombre

Imports System.Globalization

despues en el load del formulario inicial de la aplicacion escriben esto

System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("es-CO")
System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd"
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator = "."
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyGroupSeparator = ","
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator = ","


ustedes colocan ese codigo en el formulario inicial y de alli en adelante el programa tomara esa confiracion que ustedes realizaron.


ustedes veran si cambian el formato de la fecha o de los decimales o separador de miles solo cambienlo...


ya saben traten de leer y entender el codigo de esta manera no se les olvirará, no anden copiando y pegando


a mi me sirvio me imagino que a ustedes tambien


Saludos su servidor OD
40
Buenisimooo.... gracias justo lo que andaba buscando.... no quieria cambiar la configuracion regional de mi laptop.... gracias!!!
0
y como lo asocias a un texbox cuando quieres que salga el separador de miles al momento de ingresar el numero ej: 10500 se transforme 10,500
0
TE LA RIFASTE BROTHER UN APLAUSO PARA TI.....
0
funciona a la perfecciona muchisimas gracias carnal me salvaste la vida....gracias
0
Me salvastes de un dor de cabeza!! Gracias
0
tengo el mismo problema ayudaaaaaaaaaaaaaaaaaaaaa
15
Cambia la configuracion regional de la PC que usara tu programa. En donde dice Simbolo decimal, elige el punto, y donde dice separador de miles, pon una coma.
14
AMIGO MUCHISIMAS GRACIAS...
AHORA ME FUNCIONA PERFECTO
GRACIAS MUCHAS GRACIAS
0
se me dificulta mucho bueno no le endiendo
0
juliorg Mensajes enviados 4 Fecha de inscripción jueves, 14 de abril de 2016 Estatus Miembro Última intervención jueves, 28 de abril de 2016
14 abr 2016 a las 08:08
wow Esta solucion la buscaba muchisimo tiempo, muchisimas gracias.
0
Primero, suponiendo que caja de texto es TextBox1, en KeyPress haz lo siguiente, para que sólo se pueda poner un punto como separador decimal. No se permite separador de miles. Independiente de la configuración regional de tu PC.

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles TextBox1.KeyPress
If e.KeyChar = Convert.ToChar(13) Then
Me.Button1.Focus()
ElseIf e.KeyChar = Convert.ToChar(8) Then ' se pulsó Retroceso
e.Handled = False
ElseIf (e.KeyChar = ","c) Then ' no permite la coma
e.Handled = True ' Handled = True, no permite; = False, si permite...
ElseIf (e.KeyChar = "."c) Then
Dim ctrl As TextBox = DirectCast(sender, TextBox)
If (ctrl.Text.IndexOf("."c) <> -1) Then ' sólo puede haber una coma
e.Handled = True
End If
ElseIf (e.KeyChar < "0"c Or e.KeyChar > "9"c) Then
' desechar los caracteres que no son dígitos
e.Handled = True
End If
End Sub

Luego, en el LostFocus haz lo siguiente: (Label1 es para expresar el resultado en el formulario)

Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles TextBox1.LostFocus
Me.Label1.Visible = False
Dim objTextBox As TextBox = CType(sender, TextBox)
If objTextBox.Text = "" Then
Exit Sub
Else
If IsNumeric(objTextBox.Text) Then
' Si es la "," s/Config.Reg. en decimales, constata que ya haya "." y que no
' haya aún "," para reemplazar el "." por la "," como separador decimal
If laComa = True Then
If objTextBox.Text.IndexOf("."c) <> -1 Then
If objTextBox.Text.IndexOf(","c) = -1 Then
' Reemplaza el "." por la "," para adaptar a la Conf.Reg. actual
Dim TestString As String = objTextBox.Text
objTextBox.Text = Replace(TestString, "."c, ","c)
End If
End If
End If
' Hago el formateo con puntos y comas, s/conf.regional actual
Dim a As Decimal = CDec(objTextBox.Text)
objTextBox.Text = a.ToString("N2")
Else
MessageBox.Show("No es una expresión numérica válida.", My.Application.Info.ProductName, _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
objTextBox.Text = "" : objTextBox.Focus()
End If
End If
End Sub

Espero te sea útil a tí u otros colegas que tengan igual dudas. Suerte. Bernardo.
9
Muchas Gracias!, genial tu aporte. Esto del punto por la coma me estaba matando. La gente no entiende que nuestro separador decimal es la coma y que los teclados son americanos, por eso es que traen el punto en el teclado numerico. Pues como sea, desde ya muchas gracias y ahora mis usuarios no se van a poder quejar por el punto del num pad. saludos!
Gracias!!!
0
Hola elDitoVecco la variable lacoma como la dimensionas?? y que es lo que captura
Mil gracias por tu respusta
0
hola kajajajiak
0

¿No encontraste la respuesta que buscabas?

Haz una pregunta
checa tu configurcion regional en el panel de cntrol
7
Gracias por el aporte, me sirvio de mucho...
3
en viual 6.0 el true dbinput 5.0 te soluciona poner tanto codigo
en visual .net existe el component one pero esta 1200 US$ tambien con true dbinput 8.0 pro
¿ Esto existe hace 10 años pero viene aparte del visual .net xq microsoft no ponen en sus controles
e true db input y te ahorran tanto dolor de cabaze ? o existe algo de no le permita realizar estos arreglos
1
Tambien puedes agregar un <asp:Rangevalidator> o un <asp:Customvalidator> y mediante una expresion regular puedes evitar que se ingresen comas o puntos en el campo, ademas de texto y lo que se le ocurra al usuario.
Por ejemplo con la expresion \d\d/\d\d/\d\d\d\d verificas que una fecha se ingrese en el formato dia/mes/año
1
Me sirvio!!!!! Gracias por tu colaboración
0
Me sirvió mucho....Gracias
0
Muchas gracias me funciono aunque retoque algunas cosas, Muchas Gracias!!!!
0
Genial!! me solucionó mi problema. Gracias!
0