Visual Basic.NET - error de sintaxis con INSERT INTO

 
Vista:

error de sintaxis con INSERT INTO

Publicado por FJ (6 intervenciones) el 08/03/2013 02:46:52
buen dia, soy nuevo en este visual... antes ya hace mucho habia programado en visual basic 6 pero nada profesional solo por aprender.....
estoy haciendo un programa y cuando trato grabar la informacion en la base de datos de acces me dice "error de sintaxis en la instruccion INSERT INTO"
alguien me podria decir que estoy haciendo mal....
Gracias de antemano.


cuando reviso en el debug al menos para el dataset si me lo esta guardando en la tabla del table adapter pero ya no lo pasa a acces...


esta es la linea que me da el error....... (esta en el formulario "almacenes"


'antes de esta linea tengo la captura de datos del formulario en los cuadros de texto....

MDIParent1.almacentableadapter.Update(MDIParent1.bodegasdataset.Tables("almacenes"))


y la sentencia insert esta en otro formulario...... (mdiparent1)


con esto hago la coneccion a la base de datos y aca...luego en el otro formulario capturo la informacion que quiero grabar y cuando le doy al botos grabar me da el error.....


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub cargainformacion()
        Dim DBPROVIDER As String = "PROVIDER=Microsoft.ACE.OLEDB.12.0;" '"PROVIDER=Microsoft.Jet.OLEDB.4.0;"
        Dim DBSOURCE As String = "DATA SOURCE =C:\inventario planta\planta4.accdb;" 'Pe­rsist Security Info=False;"
        cadconex = DBPROVIDER & DBSOURCE
        miconect = New OleDbConnection(cadconex)
        'MsgBox("Base de Datos Abierta")
 
        almacentableadapter = New OleDbDataAdapter
 
        almacentableadapter.SelectCommand = New OleDbCommand("Select * from almacenes ", miconect)
 
        bodegasdataset = New DataSet
        bodegasdataset.Tables.Add("almacenes")
        almacentableadapter.Fill(bodegasdataset.Tables("almacenes"))
 
        MDIParent1.almacentableadapter.InsertCommand = New OleDbCommand()
        MDIParent1.almacentableadapter.InsertCommand.CommandText = "INSERT INTO almacenes (codalm,desc,sec,cantsec) VALUES (@alm,@des,@sc,@cantsec)"
        MDIParent1.almacentableadapter.InsertCommand.Connection = MDIParent1.miconect
        MDIParent1.almacentableadapter.InsertCommand.Parameters.Add("@alm", OleDbType.VarChar, 255, "codalm")
        MDIParent1.almacentableadapter.InsertCommand.Parameters.Add("@des", OleDbType.VarChar, 255, "DESC")
        MDIParent1.almacentableadapter.InsertCommand.Parameters.Add("@sc", OleDbType.Boolean, "sec")
        MDIParent1.almacentableadapter.InsertCommand.Parameters.Add("@cantsec", OleDbType.BigInt, 0, "cantsec")
 
 
    End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Carlos Javier Medina
Val: 19
Ha aumentado su posición en 5 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

error de sintaxis con INSERT INTO

Publicado por Carlos Javier Medina (34 intervenciones) el 09/03/2013 00:12:36
Lo que te pasa es que los valores deben ir dentro de apostrofes así:

('1425', '2345','algo')
Entonces si solo le pones el parámetro te aparece así:
(1425,2345,algo) y esto te ocasiona el error de sintaxis.
Debes armar la sentencia incluyendo los apostrofes así.

"Insert into almacenes primero, segundo, tercero values(' " & @par1 & " ', ' " & @par2 & " ' ) "

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

error de sintaxis con INSERT INTO

Publicado por FJ (6 intervenciones) el 09/03/2013 05:10:05
Gracias por tu respuesta...
dices que lo haga asi cierto??

"INSERT INTO almacenes (codalm, desc, sec, cantsec) VALUES ('"&@alm&"', '"&@des&"', '"&@sc&"', '"&@cantsec&"')"

pero aun asi no corre....

saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

error de sintaxis con INSERT INTO

Publicado por FJ (6 intervenciones) el 09/03/2013 05:15:45
tambien he probado de esta forma....
"INSERT INTO almacenes (codalm, desc, sec, cantsec) VALUES ('@alm', '@des', '@sc', '@cantsec')"

pero tampoco....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Carlos Javier Medina
Val: 19
Ha aumentado su posición en 5 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

error de sintaxis con INSERT INTO

Publicado por Carlos Javier Medina (34 intervenciones) el 11/03/2013 02:49:19
Mira éste es un código que funciona:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
'Agregar el registro
Dim msInsertSQL As String = "Insert into ciudm(" & _
                                                      "cCiud_id, " & _
                                                      "cCiud_code, " & _
                                                      "cCiud_name, " & _
                                                      "cpais_id, " & _
                                                      "cdept_id, " & _
                                                      "clink_id, " & _
                                                      "cCiud_status" & _
                                                      ") values('" & _
                                                      msCiud_Id & "','" & _
                                                      msCiud_Code & "','" & _
                                                      msCiud_name & "','" & _
                                                      pspais_id & "','" & _
                                                      psdept_id & "','" & _
                                                      mslink_id & "','" & _
                                                      msCiud_Status & _
                                                      "')"
Dim cmdInsertSQL As New SqlCommand(msInsertSQL, psConnectionSQL)
cmdInsertSQL.ExecuteNonQuery()


Debe haber una conexión "psConnectionSQL", la puedes llamar como quieras

Agrégale un try / Catch y en el catch pones un mensaje, luego le pones el debug para que puedas ver el mensaje de error y lo pones aquí, yo lo revisaré mañana lunes por la tarde.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

error de sintaxis con INSERT INTO

Publicado por FJ (6 intervenciones) el 11/03/2013 05:31:46
ALGO QUE NO HE MENCIONADO.... ESTOY PROGRAMANDO EN VB2010
si en mi codigo introduzco los caracteres tal y como me lo muestras, en la lista de errores donde coloco los "_" hay error....
te pego el codigo completo para que lo veas y probablemente asi lo puedas ver mejor...
tengo dos formularios el principal MDIparent1 y el formulario almacenes... te pego el codigo del formulario almacenes..... TENGO UNA BASE DE DATOS EN ACCESS 2007 CON LA TABLA ALMACEN QUE TIENE 4 CAMPOS..... CODALM (TEXTO), DESC(TEXTO), SEC (BOOLEAN), CANTSEC (NUMERICA)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Public Class Almacenes
    Private cadconex As String
    Private miconect As OleDbConnection
    Private bodegasdataset As DataSet
    Private almacentableadapter As OleDbDataAdapter
       Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        TextBox3.Enabled = False
        MDIParent1.Show()
        Me.Hide()
    End Sub
   Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        Dim ans As String
        ans = ComboBox1.Text
        If ans = "Si" Then
            TextBox3.Enabled = True
        Else
            TextBox3.Enabled = False
        End If
    End Sub
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim reg As DataRow
        Dim cod As String
        Dim desc As String
        Dim snsect As Boolean
        Dim sect As Integer
 
        cod = TextBox1.Text
        desc = TextBox2.Text
        If ComboBox1.Text = "Si" Then
            snsect = True
        Else
            snsect = False
        End If
        sect = TextBox3.Text
 
        reg = bodegasdataset.Tables("almacenes").NewRow()
 
        reg("codalm") = cod
        reg("desc") = desc
        reg("sec") = snsect
        reg("cantsec") = sect
        bodegasdataset.Tables("almacenes").Rows.Add(reg)
 
        Try
          almacentableadapter.Update(bodegasdataset.Tables("almacenes"))    EN ESTA LINEA ME DA EL ERROR  SI NO TIENE EL CATCH
 
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try 'Muestra el número de filas actualizadas. 
 
    End Sub
 
 Sub cargainformacion()
        Dim DBPROVIDER As String = "PROVIDER=Microsoft.ACE.OLEDB.12.0;" '"PROVIDER=Microsoft.Jet.OLEDB.4.0;"
        Dim DBSOURCE As String = "DATA SOURCE =C:\inventario planta\planta4.accdb;"
        cadconex = DBPROVIDER & DBSOURCE
        miconect = New OleDbConnection(cadconex)
 
        almacentableadapter = New OleDbDataAdapter
 
        almacentableadapter.SelectCommand = New OleDbCommand("Select * from almacen ", miconect)
 
        bodegasdataset = New DataSet
        bodegasdataset.Tables.Add("almacenes")
        almacentableadapter.Fill(bodegasdataset.Tables("almacenes"))
 
        almacentableadapter.InsertCommand = New OleDbCommand
        almacentableadapter.InsertCommand.CommandText = "INSERT INTO almacenes (codalm,desc,sec, cantsec) VALUES (@alm, @des, @sc, @cantsec)"
        almacentableadapter.InsertCommand.Connection = miconect
        almacentableadapter.InsertCommand.Parameters.Add("@alm", OleDbType.VarChar, 30, "codalm")
        almacentableadapter.InsertCommand.Parameters.Add("@des", OleDbType.VarChar, 200, "DESC")
        almacentableadapter.InsertCommand.Parameters.Add("@sc", OleDbType.Boolean, "sec")
        almacentableadapter.InsertCommand.Parameters.Add("@cantsec", OleDbType.BigInt, 0, "cantsec")
 
 
    End Sub
 
    Private Sub Almacenes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        cargainformacion()
    End Sub
End Class


lo que me dice el mensaje de error es "ERROR DE SINTAXIS EN LA INSTRUCCION INSERT INTO"
el codigo en el formulario principal:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Public Class MDIParent1
 
    Private Sub ShowNewForm(ByVal sender As Object, ByVal e As EventArgs) Handles NewWindowToolStripMenuItem.Click
        ' Create a new instance of the child form.
        Dim ChildForm As New System.Windows.Forms.Form
        ' Make it a child of this MDI form before showing it.
        ChildForm.MdiParent = Me
 
        m_ChildFormNumber += 1
        ChildForm.Text = "Window " & m_ChildFormNumber
 
        ChildForm.Show()
    End Sub
 
    Private Sub ExitToolsStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles ExitToolStripMenuItem.Click
        If MsgBox(" Desea Salir de la Aplicacion?", vbQuestion + vbYesNo, " MENSAJE ") = vbYes Then
            'Call limpiar_Click()
            Me.Close()
            End
        End If
    End Sub
 
    Private Sub CascadeToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles CascadeToolStripMenuItem.Click
        Me.LayoutMdi(MdiLayout.Cascade)
    End Sub
 
    Private Sub TileVerticalToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles TileVerticalToolStripMenuItem.Click
        Me.LayoutMdi(MdiLayout.TileVertical)
    End Sub
 
    Private Sub TileHorizontalToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles TileHorizontalToolStripMenuItem.Click
        Me.LayoutMdi(MdiLayout.TileHorizontal)
    End Sub
 
    Private Sub ArrangeIconsToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles ArrangeIconsToolStripMenuItem.Click
        Me.LayoutMdi(MdiLayout.ArrangeIcons)
    End Sub
 
    Private Sub CloseAllToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles CloseAllToolStripMenuItem.Click
        ' Close all child forms of the parent.
        For Each ChildForm As Form In Me.MdiChildren
            ChildForm.Close()
        Next
    End Sub
 
    Private m_ChildFormNumber As Integer
 
 
    Private Sub ToolsMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolsMenu.Click
        Me.Hide()
        movimientos.Show()
    End Sub
 
 
    Private Sub NuevoToolStripMenuItem_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NuevoToolStripMenuItem.Click
        Almacenes.Show()
 
 
    End Sub
End Class
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

error de sintaxis con INSERT INTO

Publicado por Francisco Barrio (6 intervenciones) el 13/03/2013 02:40:26
Buena noche Carlos....
encontre un error.... bueno realmente a prueba y error encontre porque me daba problema la sentencia INSERT, tuve que cambiar el nombre del campo en la base datos y entonces la linea del insert me quedo asi:
1
MDIParent1.almacentableadapter.InsertCommand.CommandText = "INSERT INTO almacen (codalm,descrip,sec,cantsec) VALUEs (@alm,@desc,@sc,@cantsec)"

y ahi ya me grabo la informacion en la base de datos...

me imagino que al llamar las variables iguales que el campo de alguna forma creo conflicto.... es lo unico que se me ocurre..

saludos y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar