下边是我接收数据并保存的代码,我接收数据比较快,下位机会每隔20ms给我一段数据,我的在20ms内将收到的数据保存下来,现在我使用下边的代码VB程序提示我“语法错误(操作符丢失)在查询表达式”100255f90801271c“
100255f90801271c是我当时接收到下位发送的数据。麻烦论坛的朋友帮我看看我下边的代码是什么问题,是时间段处理不过来吗?
Private Sub MSComm1_OnComm()
Dim inByte() As Byte, byt As Byte, bytsj() As Byte
Dim i As Integer
Dim t As String, str1 As String
Dim sqlinsert As String
strData = ""
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.RThreshold = 0 '禁止在处理数据时再触发OnComm事件,而干扰了数据处理
inByte = MSComm1.Input
For i = 0 To UBound(inByte)
If Len(Hex(inByte(i))) = 1 Then
str1 = 0 & Hex(inByte(i))
Else
str1 = Hex(inByte(i))
End If
strData = strData & str1
Next
MSComm1.InBufferCount = 0 '清空缓冲区数据,避免下次通信出错。
MSComm1.RThreshold = 1 '恢复每次读一个触发一次OnComm事件
Text6 = strData
sqlinsert = "insert into 客车列尾运行数据 values (" + Text6.Text + ")"
Dim rs_suminsert As New ADODB.Recordset
rs_suminsert.CursorLocation = adUseClient
rs_suminsert.Open sqlinsert, conn, adOpenKeyset, adLockPessimistic
End SelectEnd Sub
100255f90801271c是我当时接收到下位发送的数据。麻烦论坛的朋友帮我看看我下边的代码是什么问题,是时间段处理不过来吗?
Private Sub MSComm1_OnComm()
Dim inByte() As Byte, byt As Byte, bytsj() As Byte
Dim i As Integer
Dim t As String, str1 As String
Dim sqlinsert As String
strData = ""
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.RThreshold = 0 '禁止在处理数据时再触发OnComm事件,而干扰了数据处理
inByte = MSComm1.Input
For i = 0 To UBound(inByte)
If Len(Hex(inByte(i))) = 1 Then
str1 = 0 & Hex(inByte(i))
Else
str1 = Hex(inByte(i))
End If
strData = strData & str1
Next
MSComm1.InBufferCount = 0 '清空缓冲区数据,避免下次通信出错。
MSComm1.RThreshold = 1 '恢复每次读一个触发一次OnComm事件
Text6 = strData
sqlinsert = "insert into 客车列尾运行数据 values (" + Text6.Text + ")"
Dim rs_suminsert As New ADODB.Recordset
rs_suminsert.CursorLocation = adUseClient
rs_suminsert.Open sqlinsert, conn, adOpenKeyset, adLockPessimistic
End SelectEnd Sub
INSERT INTO titles
(title_id, title, type, pub_id, price)
VALUES ('BU9876', 'Creating Web Pages', 'business', '1389', '29.99')
INSERT INTO 表的名称(客车列尾运行数据)(字段名(主机编号),字段名(命令名称)。)values (填入的内容(text6.text),填入的内容(text2.text)。)
我这样试过以后还是提示刚才的错误。
sql server 字符串与日期都要用单引号引起来。这与字段类型有关。
看一下你的表的字段类型……
谢谢你。
Dim inByte() As Byte
Dim byt As Byte
Dim bytsj() As Byte
Dim i As Integer
Dim t As String
Dim str1 As String
Dim sqlinsert As String
Dim rs_suminsert As New ADODB.Recordset
strData = ""
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.RThreshold = 0 '禁止在处理数据时再触发OnComm事件,而干扰了数据处理
inByte = MSComm1.Input
For i = 0 To UBound(inByte)
If Len(Hex(inByte(i))) = 1 Then
str1 = 0 & Hex(inByte(i))
Else
str1 = Hex(inByte(i))
End If
strData = strData & str1
Next
' MSComm1.InBufferCount = 0 '去掉的原因是你在处理数据时串口可能又接收到了数据
Text6.Text = strData
'你的数据库语句错了,不符合SQL规范
' sqlinsert = "insert into 客车列尾运行数据 values (" & Text6.Text & ")"
' rs_suminsert.CursorLocation = adUseClient
' rs_suminsert.Open sqlinsert, conn, adOpenKeyset, adLockPessimistic
MSComm1.RThreshold = 1 '恢复每次读一个触发一次OnComm事件
End SelectEnd Sub
Private Sub MSComm1_OnComm()
Dim inByte() As Byte, byt As Byte, bytsj() As Byte
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.RThreshold = 0 '禁止在处理数据时再触发OnComm事件,而干扰了数据处理
inByte = MSComm1.Input
For i = 0 To UBound(inByte)
If Len(Hex(inByte(i))) = 1 Then
str1 = 0 & Hex(inByte(i))
Else
str1 = Hex(inByte(i))
End If
strData = strData & str1
Next
'MSComm1.InBufferCount = 0 '清空缓冲区数据,避免下次通信出错。
Text6 = strData
MSComm1.RThreshold = 1 '恢复每次读一个触发一次OnComm事件
sqlinsert = "insert into [客车列尾运行数据] ([主机编号]) values ('" + Text6.Text + "')"
Dim rs_suminsert As New ADODB.Recordset
rs_suminsert.CursorLocation = adUseClient
rs_suminsert.Open sqlinsert, conn, adOpenKeyset, adLockPessimistic
MSComm控件的设置为
With MSComm1
.CommPort = 1
.Settings = "9600,n,8,1"
.InBufferCount = 0
.InputLen = 0
.RThreshold = 1
.InputMode = comInputModeBinary '以2进制接收
.PortOpen = True
还有一点,20ms一次通信是不是太频繁了些??个人认为没有必要,再次,为了节省时间,把你的波特率加倍吧,改为:19200试一试。