none
Realizar un INSERT a una base de datos de Access RRS feed

  • Pregunta

  • Hola,

    Estoy haciendo un programa en Visual.Net y quiero escribir en unos campos de una base de datos de Access He probado a hacerlo de varias maneras, pero no consigo dar con ello, al hacer el INSERT, me da error. El código es el siguiente:

    vbnet Código:
    1. Private Sub Guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Guardar.Click
    2.  
    3.        
    4.   Try
    5.        If swError = False Then
    6.  
    7.        'obtenemos el id que corresponde
    8.         Dim Id As Integer = devolverId()
    9.  
    10.         Dim Cmd As OleDb.OleDbCommand
    11.  
    12.         Dim SQL As String
    13.  
    14.         Dim objCmd As New OleDb.OleDbCommand
    15.  
    16.         Dim Con=NewOleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\Users\clientes\bdclientes.accdb;Persist Security Info=False")
    17.  
    18.  
    19.  
    20.       SQL = "INSERT INTO clientes (cl_nombre, cl_apellidos) VALUES ('" & tNombre.Text & "','" & tApellidos.Text & "' )"
    21.  
    22.       Cmd = New OleDb.OleDbCommand(SQL, Con)
    23.  
    24.  
    25.       Con.Open()
    26.  
    27.                 objCmd = New OleDb.OleDbCommand(SQL, Con)
    28.  
    29.                 objCmd.ExecuteNonQuery()
    30.  
    31.                 Con.Close()
    32.  
    33.  
    34.  
    35.       End If
    36.         Catch ex As Exception
    37.             MsgBox("Se ha producido un error y los datos no han sido guardados.")
    38.         End Try
    39.  
    40.     End Sub

    Me da error al hacer el ExecuteNonQuery()
    A ver si me podeis echar una mano,

    Gracias por adelantado
    martes, 23 de agosto de 2011 8:19

Respuestas

  • Hola,

    Aparentemente es correcto.

    Por lo que debe ser un problema de modelo de datos.

    ¿La tabla clientes tiene clave primaria? Supongo que los campos nombre y apellido no son la clave primaria.

    Comprueba que la clave primaria esta definida como un autonumerico. Sino lo esta, ponlo, o incluye el campo clave en la sentencia insert.

    Comprueba tambien que no hayas puesto algun otro campo como obligatorio en la base de datos, y luego no lo estes incluyendo en el insert.

    Un saludo.


    MCP Senior Analyst - http://www.secondnug.com/
    martes, 23 de agosto de 2011 9:09
    Moderador

Todas las respuestas

  • Hola

    A simple vista no se puede ver cual es el error.

    Podrías poner el valor que devuelve ex.Message?

    De todas manerás te hago una recomendación, trata de utilizar parámetros:

    SQL = "INSERT INTO clientes (cl_nombre, cl_apellidos) VALUES (?,?)"
    cmd=new OleDbCommand(SQL,con)
    
    cmd.Parameters.AddWithValue("Nombre",tNombre.Text)
    cmd.Parameters.AddWithValue("Apellido",tApellidos.Text)
    con.Open()
    
    dim filas as integer= cmd.ExecuteNonQuery()
    con.Close()
    
    


    Prueba y me cuentas!

    Un saludo


    Javier Torrecilla
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    TabControl con Mejoras
    martes, 23 de agosto de 2011 8:34
    Moderador
  • probaré con parámetros que es lo único que me falta y lo he dejado apra el final porque así no lo he hecho nunca.

     

    De todas formas te dejo aqui el error por si acaso.

     

    martes, 23 de agosto de 2011 8:53
  • Hola,

    Aparentemente es correcto.

    Por lo que debe ser un problema de modelo de datos.

    ¿La tabla clientes tiene clave primaria? Supongo que los campos nombre y apellido no son la clave primaria.

    Comprueba que la clave primaria esta definida como un autonumerico. Sino lo esta, ponlo, o incluye el campo clave en la sentencia insert.

    Comprueba tambien que no hayas puesto algun otro campo como obligatorio en la base de datos, y luego no lo estes incluyendo en el insert.

    Un saludo.


    MCP Senior Analyst - http://www.secondnug.com/
    martes, 23 de agosto de 2011 9:09
    Moderador
  • Ya funciona!!!!

     

    El tema es que si, el campo primary key tiene que ser autonumérico y no incluirlo en el insert

     

    Yo habia probado las dos cosas pero por separado, así que muchas gracias!!!!

    martes, 23 de agosto de 2011 13:28
  • Hola,

    Estoy haciendo un programa en Visual.Net y quiero escribir en unos campos de una base de datos de Access He probado a hacerlo de varias maneras, pero no consigo dar con ello, al hacer el INSERT, me da error. El código es el siguiente:

    vbnet Código:
    1. Private Sub Guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Guardar.Click
    2.  
    3.        
    4.   Try
    5.        If swError = False Then
    6.  
    7.        'obtenemos el id que corresponde
    8.         Dim Id As Integer = devolverId()
    9.  
    10.         Dim Cmd As OleDb.OleDbCommand
    11.  
    12.         Dim SQL As String
    13.  
    14.         Dim objCmd As New OleDb.OleDbCommand
    15.  
    16.         Dim Con=NewOleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\Users\clientes\bdclientes.accdb;Persist Security Info=False")
    17.  
    18.  
    19.  
    20.       SQL = "INSERT INTO clientes (cl_nombre, cl_apellidos) VALUES ('" & tNombre.Text & "','" & tApellidos.Text & "' )"
    21.  
    22.       Cmd = New OleDb.OleDbCommand(SQL, Con)
    23.  
    24.  
    25.       Con.Open()
    26.  
    27.                 objCmd = New OleDb.OleDbCommand(SQL, Con)
    28.  
    29.                 objCmd.ExecuteNonQuery()
    30.  
    31.                 Con.Close()
    32.  
    33.  
    34.  
    35.       End If
    36.         Catch ex As Exception
    37.             MsgBox("Se ha producido un error y los datos no han sido guardados.")
    38.         End Try
    39.  
    40.     End Sub

    Me da error al hacer el ExecuteNonQuery()
    A ver si me podeis echar una mano,

    Gracias por adelantado
    hola me prodrias psar unos codigos de como insertar registros con campos auto numericos a una tabla access 2007 desde vb .net no lo he logrado resolver y alo intente de mil maneras mi correo es miguel.rgk@hotmail.com
    martes, 27 de septiembre de 2011 0:54