none
Error de sintaxis en la instrucción INSERT INTO.

    Pregunta

  • Hola quisiera saber si alguien me puede ayudar mi caso es el siguiente:

    Estoy creando una aplicación para inventarios la cual esta diseñada de esta manera.

    Tengo unos textbox los cuales a la hora de dar clic en un botón agregar envían los datos a una DataGridView y lo que quiero es que a la hora de dar clic en un botón guardar me envíe los datos de la DataGridView a una base de datos de Access 2010 y aquí esta mi código para que lo vean y me digan donde esta el error.

        Private Sub guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles guardar.Click
            If DataGridView1.Rows.Count = 0 Then
                Return
            End If
            Using conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Yordi\Documents\Visual Studio 2008\Projects\Inventario\Inventario\Inventario.accdb;")
                conn.Open()

                Dim query As String = "INSERT INTO Inventario (Codigo, Articulo, Concepto, Fecha de Ingreso) VALUES (@Codigo, @Articulo, @Concepto, @Fecha de Ingreso)"
                Dim cmd As New OleDb.OleDbCommand(query, conn)

                For Each row As DataGridViewRow In DataGridView1.Rows
                    cmd.Parameters.Clear()
                    cmd.Parameters.AddWithValue("@Codigo", CStr(row.Cells(0).Value))
                    cmd.Parameters.AddWithValue("@Articulo", CStr(row.Cells(1).Value))
                    cmd.Parameters.AddWithValue("@Concepto", CStr(row.Cells(2).Value))
                    cmd.Parameters.AddWithValue("@Fecha de Ingreso", CStr(row.Cells(3).Value))
                    cmd.ExecuteNonQuery()  
                Next
            End Using
        End Sub

    viernes, 16 de noviembre de 2012 23:13

Respuestas

  • "Yordi Pérez" escribió:

    > aquí esta mi código para que lo vean y me digan donde esta el error.
    >
    > Dim query As String = "INSERT INTO Inventario (Codigo, Articulo,
    > Concepto, Fecha de Ingreso) VALUES (@Codigo, @Articulo, @Concepto,
    > @Fecha de Ingreso)"

    El error está en la sintaxis de la consulta SQL de datos añadidos, porque aparte de lo que te ha indicado Leandro Tuttini, también deberás de encerrar entre corchetes EL NOMBRE DEL PARÁMETRO que contenga espacios en blanco, en tu caso, el nombre del parámetro llamado [@Fecha de ingreso].

    En Access NO ES NECESARIO ASIGNARLE UN NOMBRE A LOS PARÁMETROS, pero si lo haces, al menos házlo bien. ;-)

    Puedes utilizar cualquiera de estas dos sintaxis:

       Dim query As String = _
          "INSERT INTO Inventario (Codigo, Articulo, Concepto, [Fecha de Ingreso]) " & _
          "VALUES (@Codigo, @Articulo, @Concepto, [@Fecha de Ingreso])"
    
       Dim query As String = _
          "INSERT INTO Inventario (Codigo, Articulo, Concepto, [Fecha de Ingreso]) " & _
          "VALUES (?, ?, ?, ?)"
    

    Desde luego, si todavía estás a tiempo, lo mejor que puedes hacer es eliminar los espacios en blanco existentes en los nombres de los campos o en el nombre de la propia tabla de datos.

    Y con independencia de la sintaxis que hayas utilizado, cuando se trabaja con una base de datos de Access hay que procurar añadir los valores de los parámetros EN EL MISMO ORDEN en el que se encuentran definidos en la consulta SQL, cuestión ésta que sí estás haciendo bien.

    > cmd.Parameters.AddWithValue("@Fecha de Ingreso", CStr(row.Cells(3).Value))

    Aquí da igual que el nombre del parámetro lo encierras entre corchetes, porque como he comentado anteriormente, al motor de datos que utiliza Access le da igual que el parámetro lleve o no nombre. Es SOLAMENTE en la sintaxis de la consulta SQL donde sí importa que esté encerrado entre corchetes, porque de no hacerlo, el motor de datos no sabe lo que hacer con las palabras " de Ingreso", por lo que obtendrás la oportuna excepción a la hora de ejecutar la consulta SQL. ;-)

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    sábado, 17 de noviembre de 2012 8:22
    Moderador
  • no puede suar esto "Fecha de Ingreso" como nombre de campo

    si el campo tiene espacios debes ponerlo entre [], o sea

    INSERT INTO Inventario (Codigo, Articulo, Concepto, [Fecha de Ingreso])

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 16 de noviembre de 2012 23:23

Todas las respuestas

  • no puede suar esto "Fecha de Ingreso" como nombre de campo

    si el campo tiene espacios debes ponerlo entre [], o sea

    INSERT INTO Inventario (Codigo, Articulo, Concepto, [Fecha de Ingreso])

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 16 de noviembre de 2012 23:23
  • "Yordi Pérez" escribió:

    > aquí esta mi código para que lo vean y me digan donde esta el error.
    >
    > Dim query As String = "INSERT INTO Inventario (Codigo, Articulo,
    > Concepto, Fecha de Ingreso) VALUES (@Codigo, @Articulo, @Concepto,
    > @Fecha de Ingreso)"

    El error está en la sintaxis de la consulta SQL de datos añadidos, porque aparte de lo que te ha indicado Leandro Tuttini, también deberás de encerrar entre corchetes EL NOMBRE DEL PARÁMETRO que contenga espacios en blanco, en tu caso, el nombre del parámetro llamado [@Fecha de ingreso].

    En Access NO ES NECESARIO ASIGNARLE UN NOMBRE A LOS PARÁMETROS, pero si lo haces, al menos házlo bien. ;-)

    Puedes utilizar cualquiera de estas dos sintaxis:

       Dim query As String = _
          "INSERT INTO Inventario (Codigo, Articulo, Concepto, [Fecha de Ingreso]) " & _
          "VALUES (@Codigo, @Articulo, @Concepto, [@Fecha de Ingreso])"
    
       Dim query As String = _
          "INSERT INTO Inventario (Codigo, Articulo, Concepto, [Fecha de Ingreso]) " & _
          "VALUES (?, ?, ?, ?)"
    

    Desde luego, si todavía estás a tiempo, lo mejor que puedes hacer es eliminar los espacios en blanco existentes en los nombres de los campos o en el nombre de la propia tabla de datos.

    Y con independencia de la sintaxis que hayas utilizado, cuando se trabaja con una base de datos de Access hay que procurar añadir los valores de los parámetros EN EL MISMO ORDEN en el que se encuentran definidos en la consulta SQL, cuestión ésta que sí estás haciendo bien.

    > cmd.Parameters.AddWithValue("@Fecha de Ingreso", CStr(row.Cells(3).Value))

    Aquí da igual que el nombre del parámetro lo encierras entre corchetes, porque como he comentado anteriormente, al motor de datos que utiliza Access le da igual que el parámetro lleve o no nombre. Es SOLAMENTE en la sintaxis de la consulta SQL donde sí importa que esté encerrado entre corchetes, porque de no hacerlo, el motor de datos no sabe lo que hacer con las palabras " de Ingreso", por lo que obtendrás la oportuna excepción a la hora de ejecutar la consulta SQL. ;-)

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    sábado, 17 de noviembre de 2012 8:22
    Moderador
  • Ok, gracias a ambos me sirvio bastante
    domingo, 18 de noviembre de 2012 16:24
  • Hola Leandro, tenia un problema similar y gracias a tu ayuda pude solucionarlo!

    Muchas gracias por el aporte!

    Saludos

    viernes, 15 de agosto de 2014 17:56
  • Estos ayudas son muy buenas me an salvado varias veces
    jueves, 02 de junio de 2016 13:09