Visual Basic.NET - Problema al guardar decimales con BBDD Access

 
Vista:
sin imagen de perfil
Val: 8
Ha disminuido su posición en 21 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al guardar decimales con BBDD Access

Publicado por Jose (3 intervenciones) el 26/06/2019 12:51:58
Mi problema es que al guardar un número decimal en Access lo omite. Si quiero guardar por ejemplo 1,25 este se convierte en la bbdd en 125,00. He revisado la configuración regional y el separador de decimales es la coma.
Este es el código que estoy usando:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Public Class NUEVOARTICULOTELEFONIA
    Private Sub LineaspartetelfBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs)
        Me.Validate()
        Me.LineaspartetelfBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.AvisosDataSet)
 
    End Sub
 
    Private Sub NUEVOARTICULOTELEFONIA_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        txtParte.Text = INTERCAMBIO.ParteTelefonia
        txtArticulo.Select()
        'TODO: esta línea de código carga datos en la tabla 'AvisosDataSet.lineaspartetelf' Puede moverla o quitarla según sea necesario.
        Me.LineaspartetelfTableAdapter.Fill(Me.AvisosDataSet.lineaspartetelf)
 
    End Sub
 
    Private Sub BtnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
        txtTotal.Text = CDbl(txtCantidad.Text) * CDbl(txtPrecio.Text)
        Me.LineaspartetelfTableAdapter.agregararticulo(txtArticulo.Text, txtCantidad.Text, txtPrecio.Text, txtTotal.Text, txtParte.Text)
        DETALLETELEFONIA.LineaspartetelfTableAdapter.filtroparte(DETALLETELEFONIA.AvisosDataSet.lineaspartetelf, txtParte.Text)
 
        Dim linea As DataGridViewRow
        Dim valor As Double
 
        For Each linea In DETALLETELEFONIA.LineaspartetelfDataGridView.Rows
            valor = valor + linea.Cells(3).Value
        Next
 
        DETALLETELEFONIA.txtTotalParte.Text = FormatNumber(valor, 2) & " €"
 
        txtArticulo.Text = ""
        txtCantidad.Text = ""
        txtPrecio.Text = ""
        txtTotal.Text = ""
        txtArticulo.Select()
    End Sub
 
    Private Sub TxtCantidad_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtCantidad.KeyPress
        If Char.IsNumber(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If
    End Sub
 
    Private Sub TxtPrecio_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtPrecio.KeyPress
        If Char.IsNumber(e.KeyChar) Then
            e.Handled = False
        ElseIf e.KeyChar = "." Then
            e.KeyChar = ","
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If
    End Sub
 
    Private Sub BtnCerrar_Click(sender As Object, e As EventArgs) Handles btnCerrar.Click
        Me.Close()
    End Sub
End Class

Un saludo y gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 2.210
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al guardar decimales con BBDD Access

Publicado por Phil Rob (570 intervenciones) el 26/06/2019 14:57:59
Hola,

Tu código es difícil, hay del VisualBasic et VB.Net juntos …
Es mejor deshabilitar la referencia VisualBasic en las propiedades del proyecto (cf. Imagen 2).

Para responder a tu pregunta, comento algunos detalles:

Tienes que verificar que en la base de datos, los campos están realmente del mismo tipo que Single o Double (cf. imagen 1) (Disculpa, no tengo Access en español).

La conversión no es segura en el código, este la corrección:

1
2
3
4
5
6
7
‘ … … …
Dim valor As Double = 0   ' Siempre iniciar una variable para totalizar
 
For Each linea In DETALLETELEFONIA.LineaspartetelfDataGridView.Rows
valor = valor + CType(linea.Cells(3).Value, Double)    ' Convertir !!!
Next
‘ … … …

Los procedimientos …_KeyPress están muy difícil. Propongo el función PuntoComa :

1
2
3
4
5
6
7
8
9
10
11
Private Function PuntoComa(ByVal Valor As String) As String
        Dim Prueba As String = "1,2"
        Dim PruebaNum As Single
        Try
            PruebaNum = CType(Prueba, Single)
            Prueba = Valor.Replace(".", ",")
        Catch ex As Exception
            Prueba = Valor.Replace(",", ".")
        End Try
        Return Prueba
    End Function

Con esta función, aceptamos el punto y la coma en las TextBox y modificamos la propiedad Text solo ante la conversión y el cálculo, por ejemplo :
1
2
‘    txtTotal.Text = CDbl(txtCantidad.Text) * CDbl(txtPrecio.Text)
txtTotal.Text = CType(PuntoComa(txtCantidad.Text), Double) * CType(PuntoComa(txtPrecio.Text), Double)


Propongo que verificas este detalles antes continuar …

Imagen 1 :
DecimaleAccess

Imagen 2 :
RefVB
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 21 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al guardar decimales con BBDD Access

Publicado por Jose (3 intervenciones) el 27/06/2019 10:45:26
Gracias por contestar.

He probado lo que me comentas, en la base de datos los campos están como numéricos double y he modificado el código como me indicas, pero sigue haciendo lo mismo.

Un saludo y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 2.210
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al guardar decimales con BBDD Access

Publicado por Phil Rob (570 intervenciones) el 27/06/2019 14:37:14
Envías tu proyecto de desarrollo y la DB y un ejemplo de datos, miraré ...

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 21 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al guardar decimales con BBDD Access

Publicado por Jose (3 intervenciones) el 02/07/2019 10:23:34
Este es el enlace para descargar el proyecto:

https://www.dropbox.com/s/yuqld70blc5vrav/Intranet%20Valem.zip?dl=0

Dentro de los detalles de un parte de telefonía si agregas un artículo con cantidad 2 y precio 1,25 verás el problema.

Un saludo y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 2.210
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al guardar decimales con BBDD Access

Publicado por Phil Rob (570 intervenciones) el 02/07/2019 12:58:47
Hola jose,

Que es el formulario para iniciar el programa ?

...

QueEsForm1


QueEsForm2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 2.210
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al guardar decimales con BBDD Access

Publicado por Phil Rob (570 intervenciones) el 02/07/2019 14:05:52
Miro tu DB avisos.mdb.
Dos tablas son lineaspartetelf y lineasparteteinf : no son mismas.
En lineaspartetelf, los valores numéricos son del tipo "Double".
En ineasparteteint, los valores numéricos son del tipo "Decimal", no es número con decimales !

En el código, he encontrado el uso de lineaspartetelf pero he buscado en los archivos avisosDataSet en el explorador de soluciones. Los tipos en avisos.mdb y en avisosDataSet no son mismos.

Creo que el avisosDataSet.XSD debe ser corregir ante continuar.



DecimaleAccess3
.................................
DecimaleAccess4
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar