none
error al grabar datos en una base de datos de access RRS feed

  • Pregunta

  • hola a todos: tengo la siguiente funcion:

      Function GuardarProveedor(ByVal TipoIdProv As String, ByVal idProv As String, ByVal tipoProv As String, ByVal denoprov As String, ByVal Residente As String, ByVal pais As String, ByVal tiporegi As String, ByVal fechaRegistro As String, ByVal fechaUltCambio As String, ByVal PaisEfectPagoGen As String, ByVal PaisEfectPagoParFis As String, ByVal denopago As String, ByVal PaisEfecPago As String, ByVal aplicConvDobTrib As String, ByVal pagExtSujRetNorLeg As String, ByVal pagRegFis As String, ByVal tipoContribuyente As String, ByVal partRel As String, Optional ByVal Telefono As String = "", Optional ByVal Direccion As String = "", Optional ByVal Correo As String = "") As String
            Dim strMensajeGuardado As String = ""
            Dim sqlGenerales As String = "INSERT INTO Proveedor (TipoIdProv, idProv, tipoProv, denopro, Residente, Pais, TipoRegi, PaisEfectPagoGen, PaisEfectPagoParFis, denopago, PaisEfecPago, aplicConvDobTrib, pagExtSujRetNorLeg, pagRegFis,Telefono, tipoContribuyente, parteRel, Direccion, Correo, fechaRegistro, fechaUltCambio) VALUES (@TipoIdProv, @idProv, @tipoProv, @denopro, @Residente, @Pais, @TipoRegi, @PaisEfectPagoGen, @PaisEfectPagoParFis, @denopago, @PaisEfecPago, @aplicConvDobTrib, @pagExtSujRetNorLeg, @pagRegFis, @Telefono, @tipoContribuyente, @parteRel, @Direccion, @Correo, @fechaRegistro, @fechaUltCambio)"
            Dim CadenaConexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\baseDatos\Proveedor.accdb;"
            Dim Conexion As OleDbConnection = New OleDbConnection(CadenaConexion)
            Dim cmd As OleDbCommand = New OleDbCommand(sqlGenerales, Conexion)
            cmd.Connection.Open()
            cmd.Parameters.Clear()
            cmd.Parameters.AddWithValue("@TipoIdProv", TipoIdProv)
            cmd.Parameters.AddWithValue("@idProv", idProv)
            cmd.Parameters.AddWithValue("@tipoProv", tipoProv)
            cmd.Parameters.AddWithValue("@denopro", denoprov)
            cmd.Parameters.AddWithValue("@Residente", Residente)
            cmd.Parameters.AddWithValue("@Pais", pais)
            cmd.Parameters.AddWithValue("@TipoRegi", tiporegi)
            cmd.Parameters.AddWithValue("@PaisEfectPagoGen", PaisEfectPagoGen)
            cmd.Parameters.AddWithValue("@PaisEfectPagoParFis", PaisEfectPagoParFis)
            cmd.Parameters.AddWithValue("@denopago", denopago)
            cmd.Parameters.AddWithValue("@PaisEfecPago", PaisEfecPago)
            cmd.Parameters.AddWithValue("@aplicConvDobTrib", aplicConvDobTrib)
            cmd.Parameters.AddWithValue("@pagExtSujRetNorLeg", pagExtSujRetNorLeg)
            cmd.Parameters.AddWithValue("@pagRegFis", pagRegFis)
            cmd.Parameters.AddWithValue("@fechaRegistro", fechaRegistro)
            cmd.Parameters.AddWithValue("@tipoContribuyente", tipoContribuyente)
            cmd.Parameters.AddWithValue("@fechaUltCambio", fechaUltCambio)
            cmd.Parameters.AddWithValue("@parteRel", partRel)
            cmd.Parameters.AddWithValue("@Direccion", Direccion)
            cmd.Parameters.AddWithValue("@Correo", Correo)
            cmd.Parameters.AddWithValue("@Telefono", Telefono)
            cmd.ExecuteNonQuery()
            cmd.Connection.Close()
            strMensajeGuardado = "Proveedor guardado Correctamente"
    
            Return strMensajeGuardado
        End Function
    pero al registrar los datos me los registra mal..

    alguien me puede ayudar diciendome en donde esta mi error. ya rebise todos los datos del programa y llegan bien..

    domingo, 11 de junio de 2017 4:43

Respuestas

  • El proveedor OLE DB -para el marco de trabajo de .NET- utiliza marcadores de posición '?' para determinar la relación argumento-parámetro, por tanto, es importante que el orden de asignación de valores a la colección de parámetros sea el mismo en que aparecen los parámetros en la consulta sql.

    Nota -por ejemplo- que en la consulta sql que adjuntas el último parámetro es @fechaUltCambio, sin embargo en la asignación de valores a la colección de parámetros el último parámetro al que se asigna un valor es @Telefono, es incorrecto.

    Deberías seguir la siguiente sintaxis:

    Dim sqlGenerales As String = "INSERT INTO Proveedor (Id, Nombre, Direccion VALUES (?, ?, ?))"
    
    '...
    
    cmd.Paremeters.AddWithValue("@Id", valor1) 'Primera posición ?
    cmd.Paremeters.AddWithValue("@Nombre", valor2) 'Segunda posición ?
    cmd.Paremeters.AddWithValue("@Direccion", valor3) 'Tercera posición ?
    
    '...


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 11 de junio de 2017 5:15

Todas las respuestas

  • El proveedor OLE DB -para el marco de trabajo de .NET- utiliza marcadores de posición '?' para determinar la relación argumento-parámetro, por tanto, es importante que el orden de asignación de valores a la colección de parámetros sea el mismo en que aparecen los parámetros en la consulta sql.

    Nota -por ejemplo- que en la consulta sql que adjuntas el último parámetro es @fechaUltCambio, sin embargo en la asignación de valores a la colección de parámetros el último parámetro al que se asigna un valor es @Telefono, es incorrecto.

    Deberías seguir la siguiente sintaxis:

    Dim sqlGenerales As String = "INSERT INTO Proveedor (Id, Nombre, Direccion VALUES (?, ?, ?))"
    
    '...
    
    cmd.Paremeters.AddWithValue("@Id", valor1) 'Primera posición ?
    cmd.Paremeters.AddWithValue("@Nombre", valor2) 'Segunda posición ?
    cmd.Paremeters.AddWithValue("@Direccion", valor3) 'Tercera posición ?
    
    '...


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 11 de junio de 2017 5:15
  • Podrías también crear un Store procedure en access, a mi me funciono muy bien, te paso el ejemplo que utilice.

    https://wilfredo-patricio.blogspot.com/2008/07/procedimientos-almacenados-en-access-y.html

    Saludos

    domingo, 11 de junio de 2017 10:16
  • Gracias compa.. ese era el problema...
    domingo, 11 de junio de 2017 17:38