none
BD Access, DataGridView y separador decimal RRS feed

  • Pregunta

  • Buenos días

    Llevo días probando cosas y buscando en Google y no encuentro solución al siguiente problema:

    Tengo una Base de Datos Access (.mdb) en la que algunos de sus campos han sido creados como "single" y desde Access he introducido la información de los registros y en uno de los campos "single" por ejemplo he introducido el valor 1,5 y así aparece (con coma como separador decimal). El idioma de Windows (W10) es Español-Internacional.

    En una Form de Visual Basic 2005 tengo un DataGridView enlazado a esa BD que muestra los datos en la que aparece también como 1,5 (con coma como separador decimal).

    Cuando intento modificar o introducir un nuevo registro aparentemente acepta la coma pero el registro no se actualiza en la BD. Lo hago mediante BindingNavigator y el siguiente código asociado al botón "Guardar":

     Me.ReguladoresTableAdapter.Update(Me.PruebaDataSet.Reguladores)

    No recibo ningún mensaje de error.

    Si intento eliminar un registro existente con datos con valores decimales obtengo el siguiente mensaje de error al hacer click en "Guardar": "Update requiere que DeleteCommand sea válido cuando se pasa la colección DataRow con filas eliminadas."

    Si introduzco en el DataGridView un valor utilizando el punto decimal por ejemplo 1.5 me lo convierte en 15.

    Si la actualización del registro la hago mediante el siguiente código:

            Dim clave(2)
            clave(0) = Modelo.Text
            clave(1) = Fabricante.Text
            clave(2) = Encapsulado.Text
            Dim nuevo As DataRow = BD.Tables("REGULADORES").Rows.Find(clave)
            If nuevo Is Nothing Then
                Dim alta As DataRow = BD.Tables("REGULADORES").NewRow()
                alta("Modelo") = Modelo.Text
                alta("Fabricante") = Fabricante.Text
                alta("Encapsulado") = Encapsulado.Text
                alta("Pin1") = Pin1.Text
                alta("Pin2") = Pin2.Text
                alta("Pin3") = Pin3.Text
                alta("MaxCor") = MaxCor.Text
                BD.Tables("REGULADORES").Rows.Add(alta)
                TabReg.Update(BD.Tables("REGULADORES"))
                BD.Tables("REGULADORES").AcceptChanges()
            Else
                MsgBox("Existe")
            End If

    Recibo el siguiente mensaje: "Error de sintaxis en la instrucción INSERT INTO."

    Ya no se que hacer y no entiendo qué es lo que pasa.

    Saludos.

    Josep.

    jueves, 19 de mayo de 2016 16:51

Respuestas

  • Solucionado.

    He iniciado un nuevo proyecto en el que conecto a la BD Access mediante "Datos -> Agregar nuevo origen de datos" y conecto el DataGridView al BindingSource creado y he agregado un botón para guardar los cambios que ejecuta el siguiente código:

            Me.ReguladoresTableAdapter.Update(Me.CalculadorDataSet.Reguladores)

    - Para añadir registros: En el último registro del DataGridView tecleo los datos del nuevo registro a agregar y luego hago click en el botón "Guardar".

    - Para modificar registros: Selecciono el dato a modificar, lo modifico y luego click en el botón "Guardar"

    - Para eliminar registros: Selecciono el registro entero haciendo click en la columna que está más a la izquierda (todos los campos de esa fila tienen que quedar seleccionados) y pulso la tecla "Supr" del teclado, luego click en el botón "Guardar"

    Parece que todo funciona correctamente. ¿Qué diferencias hay con el proyecto que no funcionaba?: creo que fundamentalmente el enlace a datos lo hago mediante los menús en lugar de código introducido manualmente y que no uso OleDBDataAdapter para conectar con la tabla de la BD Access ni OleDBCommandBuilder que genere los comandos SQL de actualización de datos.

    Además ha podido despistarme que cómo mi sistema operativo es Windows 10 pro 64 bits la primera vez que inicié la depuración recibí el mensaje "El proveedor 'Microsoft.Jet.OLEDB.4.0' no está registrado en el equipo local" (no existe msjet40.dll para 64 bits) que lo he solucionado así: "Proyecto -> Propiedades -> Compilar -> Opciones de compilación avanzadas" y al final de la pantalla que sale he seleccionado en "CPU de destino" -> x86.

    Sobre el uso del separador decimal sí que sigue comportándose igual: si introduzco el valor usando la coma se actualiza sin problemas pero si uso el punto por ej.: 1.5 lo convierte en 15.

    He puesto todo esto por si a alguien que tenga problemas parecidos le puede servir...

    Muchas gracias y saludos.

    • Marcado como respuesta alpepep domingo, 22 de mayo de 2016 9:10
    domingo, 22 de mayo de 2016 9:09