none
Modificar el campo clave de una tabla Access 2007 y VB .NET 2008 (ayuda por favor) RRS feed

  • Pregunta

  • Buenas tardes.

    Me estoy volviendo loca y ya no se que hacer. ¿Se puede cambiar la clave de una tabla? Utilizo access 2007 y VB .net 2008

    Me explico:

    Tabla1 y tiene los siguientes campos. a1 --> clave / a2 y a3. Todos string

                Dim conexion = New OleDb.OleDbConnection
                conexion.ConnectionString = cadenabbdd
                'abro mi conexion
                conexion.Open()
                qcomando = "UPDATE ACTI SET A1=@A1, A2= @A2, A3= @A3 WHERE A1= (@codigoviejo)"
                cmd = New OleDb.OleDbCommand(qcomando, conexion)
                cmd.Parameters.Add("@A1", OleDbType.VarChar).Value = nuevocodigo.ToString
                cmd.Parameters.Add("@A2", OleDbType.VarChar).Value = "XXXX"
                cmd.Parameters.Add("@A3", OleDbType.VarChar).Value = "YYYY"

                cmd.Parameters.Add("@A1", OleDbType.VarChar).Value = codigoviejo.tostring

                cmd.ExecuteNonQuery()

                 conexion.Close()

    ¿Porque no funciona? Todo esta dentro de un TRY y los valores nuevocodigo y codigoviejo existen.

    Muchas graicas

    • Cambiado Enrique M. Montejo jueves, 3 de noviembre de 2016 15:50 Pregunta relacionada con el acceso a datos con Microsoft Access.
    miércoles, 2 de noviembre de 2016 17:16

Todas las respuestas

  • Hola pitu001:

    No veo que hayas creado el comando:

       Dim cmd As OleDbCommand = conexion.CreateCommand

    y después en la consulta puedes poner: cmd.CommandText = "UPDATE ....

    Prueba a ver si ahora te funciona.

    Un cordial saludo.

    Gemma

    miércoles, 2 de noviembre de 2016 17:33
  • Hola pitu001,

    No debes de declarar dos parámetros con el mismo nombre, si te das cuenta envías dos @A1. Según tengo entendido la consulta mediante OleDB es mediante posición usando los signos de ?.

    Prueba cambiando la estructura :

    Try
        Using conexion As New OleDbConnection("MiCadenaConexion")
            conexion.Open()
    
            Dim query = "UPDATE ACTI SET A1 = ?, A2 = ?, A3 = ? WHERE A1 = ?"
            Dim cmd As New OleDbCommand(query, conexion)
            cmd.Parameters.AddWithValue("@A1", nuevocodigo.ToString())
            cmd.Parameters.AddWithValue("@A2", "XXXX")
            cmd.Parameters.AddWithValue("@A3", "YYYY")
            cmd.Parameters.AddWithValue("@codViejo", codigoviejo.ToString())
    
            cmd.ExecuteNonQuery()
    
            MessageBox.Show("Actualizado!!")
        End Using
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 2 de noviembre de 2016 17:49
  • Muchas gracias a los dos.

    La consulta final dependia tambien de otras parametrizaciones, despues de horas ya lo he conseguido.


     Dim cmd As New OleDbCommand
            Try
                Dim conexion = New OleDb.OleDbConnection
                conexion.ConnectionString = cadenabbdd
                'abro mi conexion
                conexion.Open()
                '
                Dim qcomando As String = part1.ToString & campoclavebusqueda.ToString & parterestante & campoclavebusqueda.ToString & ultimaparte.ToString  --> consulta parametrizada
                            cmd = New OleDb.OleDbCommand(qcomando, conexion)
                cmd.Parameters.Add("@" & campoclavebusqueda & "", OleDbType.VarChar).Value = nuevocodigo.ToString
                Dim K As Integer
                For K = 2 To total + 1
                    parametrizaciondelresto(cmd, tablaorden(K), tablavalores(K))
                Next
                cmd.Parameters.Add("@" & campoclavebusqueda & "", OleDbType.VarChar).Value = codigoviejo.ToString
                cmd.ExecuteNonQuery()
                ' cierro mi conexion
                cmd.Parameters.Clear()
                conexion.Close()
                MsgBox("Datos modificados con exito ")
            Catch ex As OleDb.OleDbException
                MsgBox("Error al modificar los datos en la tabla" & ex.Message)
            Finally

            End Try
    • Editado pitu001 miércoles, 2 de noviembre de 2016 18:47
    miércoles, 2 de noviembre de 2016 18:42