none
Problema al guardar un registro ya registrado RRS feed

  • Pregunta

  • Buenas

    Tengo el siguiente problema:

    Enlacé una base de datos en access 2010 con visual studio 2008. Ya hice que, atraves de códigos, buscara, creara, modificara y eliminara registros.

    En access tengo las columnas: Numero de mantenimiento, Código, Equipo, Componente, subcomponente, descripción, fecha, duración y nota. Todas son tipo texto menos "Numero de mantenimiento"que es autonumerica.

    Cuando guardo un numero de registro que, por casualidad, ya este registrado me sale el siguiente error:

    Los cambios solicitados en la tabla no se realizaron correctamente porque crearían valores duplicados en el índice, clave principal o relación. Cambie los datos en el campo o los campos que contienen datos duplicados, quite el índice o vuelva a definirlo para permitir entradas duplicadas e inténtelo de nuevo.

    y quiero que en vez de salir eso me salga un msgbox diciendo que hay un error porque ese numero de registro ya esta ocupado. Imagino que tengo que hacer algo con mi boton de guardar. El codigo es el siguiente (el error sale en la linea subrayada):

        Sub Nuevo()
            Dim CMD As New OleDb.OleDbCommand("INSERT INTO MANTENIMIENTOS VALUES(" & cbm1.Text & ",'" & cbm2.Text & "','" & cbm3.Text & "','" & tbm1.Text & "','" & tbm2.Text & "','" & tbm3.Text & "','" & dtpm.Text & "','" & tbm4.Text & "','" & tbm5.Text & "','" & tbm6.Text & "')", CN)
            CN.Open()
            CMD.ExecuteNonQuery()
            CN.Close()
            Mostrar()
            MsgBox("Registro agregado", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "Información")
        End Sub

     Private Sub bguardarm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bguardarm.Click
            If N = 1 Then
                Nuevo()
            ElseIf N = 2 Then
                Modificar()
            End If
            Bloquear()
            Limpiar()
            Cargar()
            N = 0
        End Sub

    Espero puedan ayudarme.

    Muchas gracias

    • Cambiado Enrique M. Montejo domingo, 5 de agosto de 2012 11:39 acceso a datos (De:Lenguaje VB.NET)
    martes, 26 de junio de 2012 19:51

Todas las respuestas

  • es que si el valor que asignas al compo que defines como key ya existe no puedes hacer un INSERT tienes que hacer un UPDATE

    ademas un tema muy importante usa parametros

    ADO.NET Parte 4 Actualización Información Ms Access

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 26 de junio de 2012 20:06
  • Gracias por tu respuesta.

    Por lo que entendi cambie el insert por un update pero me sale el siguiente error:

    Error de sintaxis en la instrucción UPDATE.

    Además, estuve leyendo el link que me enviaste pero no entiendo bien como usar parametros.

    martes, 26 de junio de 2012 20:22
  • no, no solo es cambiar uan palabra por otra, es cambiar la estructura del query

    un INSERT no es igua a un UPDATE, has investigado el link que pusie para ver como realizar estas operaciones?

    porque veo que el articulo ni lo has mirado


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 26 de junio de 2012 20:32
  • Si lo vi pero no lo entiendo. Hasta me descargue el ejemplo pero de verdad no lo entiendo. Es muy distinto al codigo que yo tengo y bueno soy nuevo en esto.
    martes, 26 de junio de 2012 20:36
  • Hola amigo:

    Analiza el siguiente codigo y adaptalo a tus necesidades:

    Using cnx As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Ruta)
    If cnx.State = ConnectionState.Closed Then cnx.Open()
    Dim Sqlupdate As String
    Sqlupdate = "UPDATE Tu_tabla SET Tucampo= @param1, Tucampo2= @param2 WHERE ID = @paramaid"
    Dim cmd As New OleDbCommand(Sqlupdate, cnx)
    cmd.CommandType = CommandType.Text
    cmd.Parameters.AddWithValue("@param1", txtbox1.Text)
    cmd.Parameters.AddWithValue("@param2 ", txtbox2.Text)
    cmd.Parameters.AddWithValue("@paramaid", txboxid.Text)
    cmd.ExecuteNonQuery()
    MessageBox.Show("La informacion fue actualizada con Exito", "¡Actualizacion!", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Using
    Suerte!

    Luis Escobar :D

    martes, 26 de junio de 2012 20:40