none
Porque no funciona la actualizacion? access 2007 y vb 2008

    Pregunta

  • Muchas gracias de antemano.
    Estoy con VS 2008 y access 2007.

    No entiendo porque no funciona esta sql de actualizacion.

     Function updateindi(ByVal alta As String, ByVal baja As String, ByVal codi As String, ByVal codal As String, ByVal codm As String) As Boolean
            Dim cmd As New OleDbCommand
            Try
                Dim conexion = New OleDb.OleDbConnection
                conexion.ConnectionString = cadenabbdd
                'abro mi conexion
                conexion.Open()
                Dim qcomando As String = "UPDATE INDI SET FALTA=@F1, FBAJA=@F2 WHERE ((CODI=@V1) AND (CODAL=@V2) AND (CODM=@V3))"
                cmd = New OleDb.OleDbCommand(qcomando, conexion)
                cmd.Parameters.Add("@FALTA", OleDbType.Date).Value = alta
                If baja.ToString = "" Then
                    cmd.Parameters.Add("@FBAJA", OleDbType.Date).Value = DBNull.Value
                Else
                    cmd.Parameters.Add("@FBAJA", OleDbType.Date).Value = baja
                End If
                cmd.Parameters.Add("@CODI", OleDbType.VarChar).Value = codi.ToString
                cmd.Parameters.Add("@CODAL", OleDbType.VarChar).Value = codal.ToString
                cmd.Parameters.Add("@CODM", OleDbType.VarChar).Value = codm.ToString
                cmd.ExecuteNonQuery()
                ' cierro mi conexion
                cmd.Parameters.Clear()
                conexion.Close()
                Return True
            Catch ex As OleDb.OleDbException
                Return False
                MsgBox("Error al modificar los datos (updateindi)" & ex.Message, MsgBoxStyle.Critical)
            Finally
            End Try
        End Function

    El error que me dice, es que no se han especificado parametros para alguno de los valores. Pero he comprobado varias veces y todas las variables tiene su correspondiente valor.

    Gracias por vuestra ayuda de nuevo.

    Susana

    jueves, 17 de noviembre de 2016 21:56

Respuestas

Todas las respuestas

  • Hola pitu001,

    El error que muestra es correcto, porque si te fijas bien en la consulta, los parámetros que envías son @F1, @F2, @V1 ... y cuando envías los parámetros mediante el cmd.Parameters no envías ninguno de ellos.

    Según tengo entendido usando OleDB toma los parámetros mediante posición.

    Por lo que tendrías que tener algo como esto :

    Function updateindi(ByVal alta As String,
                    ByVal baja As String,
                    ByVal codi As String,
                    ByVal codal As String,
                    ByVal codm As String) As Boolean
        Try
            Using con As New OleDbConnection("MiCadenaConexion")
                con.Open()
    
            Dim query = "UPDATE INDI SET FALTA = ?, FBAJA = ? WHERE CODI = ? AND CODAL= ? AND CODM = ?"
    
                Dim cmd As New OleDbCommand(query, con)
                cmd.Parameters.Add("@FALTA", OleDbType.Date).Value = alta
                cmd.Parameters.Add("@FBA", OleDbType.Date).Value = If(baja = String.Empty, DBNull.Value, baja)
                cmd.Parameters.Add("@CODI", OleDbType.VarChar).Value = codi
                cmd.Parameters.Add("@CODAL", OleDbType.VarChar).Value = codal
                cmd.Parameters.Add("@CODM", OleDbType.VarChar).Value = codm
    
                'Si actualizó devuelve True
                Return cmd.ExecuteNonQuery > 0
    
            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            Return False
        End Try
    End Function

    Ya que los parámetros son de tipo String, es innecesario agregar el ToString() en cada uno de ellos.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 17 de noviembre de 2016 23:16
  • Muchas gracias, hice el cambio y NO funciono.

    Seguire indagando

    Susana


    EDITO: Arreglado, el nombre de un campo estaba mal, y eso que lo mire 1000 veces. Perfecto gracias
    viernes, 18 de noviembre de 2016 4:46