Access数据插入中发生INSERT INTO语句中的语法错误 [英] Syntax Error in INSERT INTO statement occured in Access Data insertion

查看:69
本文介绍了Access数据插入中发生INSERT INTO语句中的语法错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这里,我提供了我的全部项目代码.........
每当我单击按钮时,访问表已更新.但是出现了"INSERT INTO语句中的语法错误" ...任何人都可以帮助我…….

Imports System.Data
Imports System.Windows.Forms.DataGrid
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Windows.Forms.DataGridView
Imports System.Data.OleDb

Public Class DataPreview
    Public stx As String
    Public str As String
    Public STX1 As String
    Public STX2 As String
    Dim i As Integer
    Dim j As Integer
    Public stxb() As Byte
    Dim cnnOLEDB As New OleDbConnection
    Dim cmdOLEDB As New OleDbCommand
    Dim cmdInsert As New OleDbCommand
    Dim cmdUpdate As New OleDbCommand
    Dim cmdDelete As New OleDbCommand
    Dim adpOLEDB As New OleDbDataAdapter
    Dim strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & System.Environment.CurrentDirectory & "\SMSDB.mdb"
    Enum com
        com1 = 1
        com2
        com3
        com4
        com5
        com6
        com7
        com8
        com9
        com10
        com11
        com12
        com13
        com14
        com15
        com16
        com17
        com18
        com19
        com20
    End Enum
    ''Private Sub DataPreview_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ''    ''TODO: This line of code loads data into the ''SQLDBCon1.SMSData1'' table. You can move, or remove it, as needed.
    ''    Me.SMSData1TableAdapter.Fill(Me.SQLDBCon1.SMSData1)
    ''    ''TODO: This line of code loads data into the ''SQLDBCon.SMSData1'' table. You can move, or remove it, as needed.
    ''    Me.SMSData1TableAdapter.Fill(Me.SQLDBCon.SMSData1)
    ''    ''TODO: This line of code loads data into the ''AccessDB.Modem_Automation'' table. You can move, or remove it, as needed.
    ''    Me.Modem_AutomationTableAdapter.Fill(Me.AccessDB.Modem_Automation)
    ''    ''Me.SMSData1TableAdapter.Fill(Me.SMSData1DataSet1.SMSData1)
    ''    For Each sp As String In My.Computer.Ports.SerialPortNames
    ''        ComboBox1.Items.Add(sp)
    ''    Next

    ''End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If Button1.Text = "Open" Then
            If LCase(ComboBox1.Text) = "com1" Then
                AxMSComm1.CommPort = 1
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com2" Then
                AxMSComm1.CommPort = 2
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com3" Then
                AxMSComm1.CommPort = 3
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com4" Then
                AxMSComm1.CommPort = 4
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com5" Then
                AxMSComm1.CommPort = 5
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com6" Then
                AxMSComm1.CommPort = 6
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com7" Then
                AxMSComm1.CommPort = 7
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com8" Then
                AxMSComm1.CommPort = 8
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com9" Then
                AxMSComm1.CommPort = 9
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com10" Then
                AxMSComm1.CommPort = 10
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com11" Then
                AxMSComm1.CommPort = 11
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com12" Then
                AxMSComm1.CommPort = 12
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com13" Then
                AxMSComm1.CommPort = 13
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com14" Then
                AxMSComm1.CommPort = 14
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com15" Then
                AxMSComm1.CommPort = 15
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com16" Then
                AxMSComm1.CommPort = 16
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com17" Then
                AxMSComm1.CommPort = 17
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com18" Then
                AxMSComm1.CommPort = 18
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com19" Then
                AxMSComm1.CommPort = 19
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com20" Then
                AxMSComm1.CommPort = 20
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            End If
        ElseIf Button1.Text = "Close" Then
            AxMSComm1.PortOpen = False
            Button1.Text = "Open"
        End If
    End Sub

    ''Private Sub Fill__ToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    ''    Try
    ''        Me.SMSData1TableAdapter.Fill__(Me.SQLDBCon.SMSData1)
    ''    Catch ex As System.Exception
    ''        System.Windows.Forms.MessageBox.Show(ex.Message)
    ''    End Try

    ''End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        For Me.i = 1 To 24
            If i = 1 Then
                STX1 = Mid(str, 1, 1)
            ElseIf i = 2 Then
                STX2 = Mid(str, 2, 2)
            ElseIf i = 3 Then
                stx = Mid(str, 4, 3)
                stx = stx / 100
            ElseIf i = 4 Then
                stx = Mid(str, 7, 10)
            ElseIf i = 5 Then
                For Me.j = 1 To 6
                    If j = 1 Then
                        stx = "Date: " & Mid(str, 17, 2)
                        stx = stx & "/"
                    ElseIf j = 2 Then
                        stx = stx & Mid(str, 19, 2)
                        stx = stx & "/"
                    ElseIf j = 3 Then
                        stx = stx & Mid(str, 21, 2)
                        stx = stx & "  Time: "
                    ElseIf j = 4 Then
                        stx = stx & Mid(str, 23, 2)
                        stx = stx & ":"
                    ElseIf j = 5 Then
                        stx = stx & Mid(str, 25, 2)
                        stx = stx & ":"
                    ElseIf j = 6 Then
                        stx = stx & Mid(str, 27, 2)
                    End If
                Next
            ElseIf i = 6 Then
                stx = Mid(str, 29, 4)
                ''stxb = System.Text.Encoding.UTF8.GetBytes(stx)
                ''MsgBox(System.Text.Encoding.UTF8.GetBytes(stx))
                ''stx = Val(stx)
                Dim result As String = ""
                For i As Integer = 0 To stx.Length - 1
                    Dim bin As String = _
                        LongToBinary(Asc(stx.Substring(i, 1)))
                    result &= bin.Substring(bin.Length - 4)
                Next i
                MsgBox(result)
            ElseIf i = 7 Then
                stx = Mid(str, 33, 3)
            ElseIf i = 8 Then
                stx = Mid(str, 36, 3)
                stx = stx / 10
            ElseIf i = 9 Then
                stx = Mid(str, 39, 3)
                stx = stx / 100
            ElseIf i = 10 Then
                stx = Mid(str, 42, 8)
                stx = stx / 10
            ElseIf i = 11 Then
                stx = Mid(str, 50, 3)
            ElseIf i = 12 Then
                stx = Mid(str, 53, 3)
                stx = stx / 10
            ElseIf i = 13 Then
                stx = Mid(str, 56, 3)
                stx = stx / 100
            ElseIf i = 14 Then
                stx = Mid(str, 59, 8)
                stx = stx / 10
            ElseIf i = 15 Then
                stx = Mid(str, 67, 3)
            ElseIf i = 16 Then
                stx = Mid(str, 70, 3)
                stx = stx / 10
            ElseIf i = 17 Then
                stx = Mid(str, 73, 8)
                stx = stx / 10
            ElseIf i = 18 Then
                stx = Mid(str, 81, 3)
                stx = Val("&h" & stx)
                stx = stx / 10
            ElseIf i = 19 Then
                stx = Mid(str, 84, 3)
                stx = Val("&h" & stx)
                stx = stx / 10
            ElseIf i = 20 Then
                stx = Mid(str, 87, 8)
                stx = stx / 10
            ElseIf i = 21 Then
                stx = Mid(str, 95, 3)
                stx = Val("&h" & stx)
                stx = stx / 10
            ElseIf i = 22 Then
                stx = Mid(str, 98, 8)
                stx = stx / 10
            ElseIf i = 23 Then
                stx = Mid(str, 106, 4)
                ''stx = Val(stx)
                Dim result As String = ""
                For i As Integer = 0 To stx.Length - 1
                    Dim bin As String = _
                        LongToBinary(Asc(stx.Substring(i, 1)))
                    result &= bin.Substring(bin.Length - 4)
                Next i
                MsgBox(result)
            ElseIf i = 24 Then
                stx = Mid(str, 110, 1)
            End If
            ''stx = Convert.ToDecimal(str)
            MsgBox(stx)
            
        Next
        cmdInsert.CommandText = "INSERT INTO SMSDATA1DB (Start Of Packet, Packet Identifier) VALUES (''" & STX1 & "'', ''" & STX2 & "'')"
        MsgBox(cmdInsert.CommandText)
        cmdInsert.CommandType = CommandType.Text
        cmdInsert.Connection = cnnOLEDB
        cmdInsert.ExecuteNonQuery()
        cmdInsert.Dispose()
    End Sub

    Private Sub DataPreview_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ''Dim str As String
        ''Dim stx As String
        ''OpenConnection()
        ''objda.SelectCommand.CommandText = "Select * FROM SMSDATA1DB"
        ''objda.Fill(objdataset, "SMSDATA1DB")
        ''dv = New DataView(objdataset.Tables("SMSDATA1DB"))
        ''DGView.DataSource = dv
        str = "#SP101PACE_TEST1221111153500073123012109712345678240101080987654302400219876543048111113579246155246813570003."
        cnnOLEDB.ConnectionString = strConnectionString
        ''MsgBox(strConnectionString)
        cnnOLEDB.Open()
        cmdOLEDB.CommandText = "SELECT * FROM SMSDATA1DB"
        cmdOLEDB.Connection = cnnOLEDB
        Dim rdrOLEDB As OleDbDataReader = cmdOLEDB.ExecuteReader
        ''stx = Convert.ToDecimal(str)
    End Sub
    '' This version of LongToBinary does not add a "&B" in the front.
    Private Function LongToBinary(ByVal long_value As Long, Optional ByVal separate_bytes As Boolean = True) As String
        '' Convert into hex.
        Dim hex_string As String = long_value.ToString("X")

        '' Zero-pad to a full 16 characters.
        hex_string = hex_string.PadLeft(16, "0")

        '' Read the hexadecimal digits
        '' one at a time from right to left.
        Dim result_string As String = ""
        For digit_num As Integer = 0 To 15
            '' Convert this hexadecimal digit into a
            '' binary nibble.
            Dim digit_value As Integer = _
                Integer.Parse(hex_string.Substring(digit_num, _
                1), Globalization.NumberStyles.HexNumber)

            '' Convert the value into bits.
            Dim factor As Integer = 4
            Dim nibble_string As String = ""
            For bit As Integer = 0 To 3
                If digit_value And factor Then
                    nibble_string &= "1"
                Else
                    nibble_string &= "0"
                End If
                factor \= 2
            Next bit

            '' Add the nibble''s string to the left of the
            '' result string.
            result_string &= nibble_string
        Next digit_num

        '' Add spaces between bytes if desired.
        If separate_bytes Then
            Dim tmp As String = ""
            For i As Integer = 0 To result_string.Length - 4 _
                Step 4
                tmp &= result_string.Substring(i, 4) & " "
            Next i
            result_string = tmp.Substring(0, tmp.Length - 1)
        End If

        '' Return the result.
        Return result_string
    End Function

    Private Sub AxMSComm1_OnComm(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AxMSComm1.OnComm

    End Sub
End Class

解决方案

 cmdInsert.CommandText = " & STX1& " ','"& STX2&  ')"


代替,
尝试使用这样的查询

 cmdInsert.CommandText = " ;
cmdInsert.Parameters.AddWithValue(" ,STX1);
cmdInsert.Parameters.AddWithValue(" ,STX2); 


好吧,很难从整个代码中指出确切的问题,但是问题似乎出在Insert语句中使用的列名.
检查指定的列名称是否正确,如果正确,则可以将列名称封装在方括号( [] )中,如下所示.

 cmdInsert.CommandText = " & STX1&  ','"& STX2& " 


请查看以下链接以获取更多信息.

http://www.daniweb.com/web-development/数据库/ms-access-and-filemaker-pro/threads/135895

http://forums.codecharge.com/posts.php?post_id=45537


尝试以下查询:

  Dim  objda  As   OleDbDataAdapter
obj.SelectCommnd =新建OledbCommand
objda.SelectCommand.CommandText = " 
objda.SelectCommand.Parameters.AddWithValue(" ,TextBox1.Text)
objda.SelectCommand.Parameters.AddWithValue(" ,TextBox2.Text)
objda.SelectCommand.Parameters.AddWithValue(" ,TextBox3.Text)
   尝试 ' 处理OleDb异常
       objda.SelectCommand.ExecuteNonQuery()
   捕获,例如 As  OleDb.OleDbException
       MessageBox.Show(例如消息)
   结束 尝试 

它将为您提供帮助:)


Here i am providing my total Project code .........
Whenever i click on button Access table has been Updated . But an "Syntax Error in INSERT INTO statement" has been Occured ... Any one plzz Help mee.......

Imports System.Data
Imports System.Windows.Forms.DataGrid
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Windows.Forms.DataGridView
Imports System.Data.OleDb

Public Class DataPreview
    Public stx As String
    Public str As String
    Public STX1 As String
    Public STX2 As String
    Dim i As Integer
    Dim j As Integer
    Public stxb() As Byte
    Dim cnnOLEDB As New OleDbConnection
    Dim cmdOLEDB As New OleDbCommand
    Dim cmdInsert As New OleDbCommand
    Dim cmdUpdate As New OleDbCommand
    Dim cmdDelete As New OleDbCommand
    Dim adpOLEDB As New OleDbDataAdapter
    Dim strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & System.Environment.CurrentDirectory & "\SMSDB.mdb"
    Enum com
        com1 = 1
        com2
        com3
        com4
        com5
        com6
        com7
        com8
        com9
        com10
        com11
        com12
        com13
        com14
        com15
        com16
        com17
        com18
        com19
        com20
    End Enum
    ''Private Sub DataPreview_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ''    ''TODO: This line of code loads data into the ''SQLDBCon1.SMSData1'' table. You can move, or remove it, as needed.
    ''    Me.SMSData1TableAdapter.Fill(Me.SQLDBCon1.SMSData1)
    ''    ''TODO: This line of code loads data into the ''SQLDBCon.SMSData1'' table. You can move, or remove it, as needed.
    ''    Me.SMSData1TableAdapter.Fill(Me.SQLDBCon.SMSData1)
    ''    ''TODO: This line of code loads data into the ''AccessDB.Modem_Automation'' table. You can move, or remove it, as needed.
    ''    Me.Modem_AutomationTableAdapter.Fill(Me.AccessDB.Modem_Automation)
    ''    ''Me.SMSData1TableAdapter.Fill(Me.SMSData1DataSet1.SMSData1)
    ''    For Each sp As String In My.Computer.Ports.SerialPortNames
    ''        ComboBox1.Items.Add(sp)
    ''    Next

    ''End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If Button1.Text = "Open" Then
            If LCase(ComboBox1.Text) = "com1" Then
                AxMSComm1.CommPort = 1
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com2" Then
                AxMSComm1.CommPort = 2
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com3" Then
                AxMSComm1.CommPort = 3
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com4" Then
                AxMSComm1.CommPort = 4
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com5" Then
                AxMSComm1.CommPort = 5
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com6" Then
                AxMSComm1.CommPort = 6
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com7" Then
                AxMSComm1.CommPort = 7
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com8" Then
                AxMSComm1.CommPort = 8
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com9" Then
                AxMSComm1.CommPort = 9
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com10" Then
                AxMSComm1.CommPort = 10
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com11" Then
                AxMSComm1.CommPort = 11
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com12" Then
                AxMSComm1.CommPort = 12
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com13" Then
                AxMSComm1.CommPort = 13
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com14" Then
                AxMSComm1.CommPort = 14
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com15" Then
                AxMSComm1.CommPort = 15
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com16" Then
                AxMSComm1.CommPort = 16
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com17" Then
                AxMSComm1.CommPort = 17
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com18" Then
                AxMSComm1.CommPort = 18
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com19" Then
                AxMSComm1.CommPort = 19
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            ElseIf LCase(ComboBox1.Text) = "com20" Then
                AxMSComm1.CommPort = 20
                AxMSComm1.PortOpen = True
                Button1.Text = "Close"
            End If
        ElseIf Button1.Text = "Close" Then
            AxMSComm1.PortOpen = False
            Button1.Text = "Open"
        End If
    End Sub

    ''Private Sub Fill__ToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    ''    Try
    ''        Me.SMSData1TableAdapter.Fill__(Me.SQLDBCon.SMSData1)
    ''    Catch ex As System.Exception
    ''        System.Windows.Forms.MessageBox.Show(ex.Message)
    ''    End Try

    ''End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        For Me.i = 1 To 24
            If i = 1 Then
                STX1 = Mid(str, 1, 1)
            ElseIf i = 2 Then
                STX2 = Mid(str, 2, 2)
            ElseIf i = 3 Then
                stx = Mid(str, 4, 3)
                stx = stx / 100
            ElseIf i = 4 Then
                stx = Mid(str, 7, 10)
            ElseIf i = 5 Then
                For Me.j = 1 To 6
                    If j = 1 Then
                        stx = "Date: " & Mid(str, 17, 2)
                        stx = stx & "/"
                    ElseIf j = 2 Then
                        stx = stx & Mid(str, 19, 2)
                        stx = stx & "/"
                    ElseIf j = 3 Then
                        stx = stx & Mid(str, 21, 2)
                        stx = stx & "  Time: "
                    ElseIf j = 4 Then
                        stx = stx & Mid(str, 23, 2)
                        stx = stx & ":"
                    ElseIf j = 5 Then
                        stx = stx & Mid(str, 25, 2)
                        stx = stx & ":"
                    ElseIf j = 6 Then
                        stx = stx & Mid(str, 27, 2)
                    End If
                Next
            ElseIf i = 6 Then
                stx = Mid(str, 29, 4)
                ''stxb = System.Text.Encoding.UTF8.GetBytes(stx)
                ''MsgBox(System.Text.Encoding.UTF8.GetBytes(stx))
                ''stx = Val(stx)
                Dim result As String = ""
                For i As Integer = 0 To stx.Length - 1
                    Dim bin As String = _
                        LongToBinary(Asc(stx.Substring(i, 1)))
                    result &= bin.Substring(bin.Length - 4)
                Next i
                MsgBox(result)
            ElseIf i = 7 Then
                stx = Mid(str, 33, 3)
            ElseIf i = 8 Then
                stx = Mid(str, 36, 3)
                stx = stx / 10
            ElseIf i = 9 Then
                stx = Mid(str, 39, 3)
                stx = stx / 100
            ElseIf i = 10 Then
                stx = Mid(str, 42, 8)
                stx = stx / 10
            ElseIf i = 11 Then
                stx = Mid(str, 50, 3)
            ElseIf i = 12 Then
                stx = Mid(str, 53, 3)
                stx = stx / 10
            ElseIf i = 13 Then
                stx = Mid(str, 56, 3)
                stx = stx / 100
            ElseIf i = 14 Then
                stx = Mid(str, 59, 8)
                stx = stx / 10
            ElseIf i = 15 Then
                stx = Mid(str, 67, 3)
            ElseIf i = 16 Then
                stx = Mid(str, 70, 3)
                stx = stx / 10
            ElseIf i = 17 Then
                stx = Mid(str, 73, 8)
                stx = stx / 10
            ElseIf i = 18 Then
                stx = Mid(str, 81, 3)
                stx = Val("&h" & stx)
                stx = stx / 10
            ElseIf i = 19 Then
                stx = Mid(str, 84, 3)
                stx = Val("&h" & stx)
                stx = stx / 10
            ElseIf i = 20 Then
                stx = Mid(str, 87, 8)
                stx = stx / 10
            ElseIf i = 21 Then
                stx = Mid(str, 95, 3)
                stx = Val("&h" & stx)
                stx = stx / 10
            ElseIf i = 22 Then
                stx = Mid(str, 98, 8)
                stx = stx / 10
            ElseIf i = 23 Then
                stx = Mid(str, 106, 4)
                ''stx = Val(stx)
                Dim result As String = ""
                For i As Integer = 0 To stx.Length - 1
                    Dim bin As String = _
                        LongToBinary(Asc(stx.Substring(i, 1)))
                    result &= bin.Substring(bin.Length - 4)
                Next i
                MsgBox(result)
            ElseIf i = 24 Then
                stx = Mid(str, 110, 1)
            End If
            ''stx = Convert.ToDecimal(str)
            MsgBox(stx)
            
        Next
        cmdInsert.CommandText = "INSERT INTO SMSDATA1DB (Start Of Packet, Packet Identifier) VALUES (''" & STX1 & "'', ''" & STX2 & "'')"
        MsgBox(cmdInsert.CommandText)
        cmdInsert.CommandType = CommandType.Text
        cmdInsert.Connection = cnnOLEDB
        cmdInsert.ExecuteNonQuery()
        cmdInsert.Dispose()
    End Sub

    Private Sub DataPreview_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ''Dim str As String
        ''Dim stx As String
        ''OpenConnection()
        ''objda.SelectCommand.CommandText = "Select * FROM SMSDATA1DB"
        ''objda.Fill(objdataset, "SMSDATA1DB")
        ''dv = New DataView(objdataset.Tables("SMSDATA1DB"))
        ''DGView.DataSource = dv
        str = "#SP101PACE_TEST1221111153500073123012109712345678240101080987654302400219876543048111113579246155246813570003."
        cnnOLEDB.ConnectionString = strConnectionString
        ''MsgBox(strConnectionString)
        cnnOLEDB.Open()
        cmdOLEDB.CommandText = "SELECT * FROM SMSDATA1DB"
        cmdOLEDB.Connection = cnnOLEDB
        Dim rdrOLEDB As OleDbDataReader = cmdOLEDB.ExecuteReader
        ''stx = Convert.ToDecimal(str)
    End Sub
    '' This version of LongToBinary does not add a "&B" in the front.
    Private Function LongToBinary(ByVal long_value As Long, Optional ByVal separate_bytes As Boolean = True) As String
        '' Convert into hex.
        Dim hex_string As String = long_value.ToString("X")

        '' Zero-pad to a full 16 characters.
        hex_string = hex_string.PadLeft(16, "0")

        '' Read the hexadecimal digits
        '' one at a time from right to left.
        Dim result_string As String = ""
        For digit_num As Integer = 0 To 15
            '' Convert this hexadecimal digit into a
            '' binary nibble.
            Dim digit_value As Integer = _
                Integer.Parse(hex_string.Substring(digit_num, _
                1), Globalization.NumberStyles.HexNumber)

            '' Convert the value into bits.
            Dim factor As Integer = 4
            Dim nibble_string As String = ""
            For bit As Integer = 0 To 3
                If digit_value And factor Then
                    nibble_string &= "1"
                Else
                    nibble_string &= "0"
                End If
                factor \= 2
            Next bit

            '' Add the nibble''s string to the left of the
            '' result string.
            result_string &= nibble_string
        Next digit_num

        '' Add spaces between bytes if desired.
        If separate_bytes Then
            Dim tmp As String = ""
            For i As Integer = 0 To result_string.Length - 4 _
                Step 4
                tmp &= result_string.Substring(i, 4) & " "
            Next i
            result_string = tmp.Substring(0, tmp.Length - 1)
        End If

        '' Return the result.
        Return result_string
    End Function

    Private Sub AxMSComm1_OnComm(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AxMSComm1.OnComm

    End Sub
End Class

解决方案

cmdInsert.CommandText = "INSERT INTO SMSDATA1DB (Start Of Packet, Packet Identifier) VALUES ('" & STX1 & "', '" & STX2 & "')"


instead of,
try to use query like this

cmdInsert.CommandText = "INSERT INTO SMSDATA1DB ([Start Of Packet], [Packet Identifier]) VALUES (@STX1,@STX1)";
cmdInsert.Parameters.AddWithValue("@STX1",STX1);
cmdInsert.Parameters.AddWithValue("@STX2",STX2);


Well, its difficult to point out exact problem from your entire code, But problem seems to be with Column names used in your Insert statement.

Check specified column names are correct, if they are correct then you may Encapsulate the column names in square brackets([]) as below.

cmdInsert.CommandText = "INSERT INTO SMSDATA1DB ([Start Of Packet], [Packet Identifier]) VALUES ('" & STX1 & "', '" & STX2 & "')"


Have a look at below links for more information.

http://www.daniweb.com/web-development/databases/ms-access-and-filemaker-pro/threads/135895

http://forums.codecharge.com/posts.php?post_id=45537


Try this query :

Dim objda As New OleDbDataAdapter
obj.SelectCommnd=New OledbCommand
objda.SelectCommand.CommandText="Insert into TableName (Field1, Field2, Field3) values(@Field1, @Field2, @Field3)"
objda.SelectCommand.Parameters.AddWithValue("@Field1", TextBox1.Text)
objda.SelectCommand.Parameters.AddWithValue("@Field2", TextBox2.Text)
objda.SelectCommand.Parameters.AddWithValue("@Field3", TextBox3.Text)
   Try                                     'To handle OleDb Exceptions
       objda.SelectCommand.ExecuteNonQuery()
   Catch ex As OleDb.OleDbException
       MessageBox.Show(ex.Message)
   End Try

It will help you :)


这篇关于Access数据插入中发生INSERT INTO语句中的语法错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆