串口数据处理写进数据库的有关问题,请高手赐教

串口数据处理写进数据库的问题,请高手赐教!
我下位机是一个单片机,用来做数据采集,总共有四个采集的通道。下位机的数据样式如下。
AD channel 1 Vin = 105 mV
AD channel 2 Vin = 804 mV
AD channel 3 Vin = 94 mV
AD channel 4 Vin = 4370 mV
AD channel 1 Vin = 49 mV
AD channel 2 Vin = 479 mV
AD channel 3 Vin = 95 mV
AD channel 4 Vin = 4705 mV
我通过串口接收到了数据,以文本的形式读入,然后通过正则表达式来提取数字,提取的第一个数字就是通道号,第二个数字就是采集的结果,再写进数据库,然后再调出来画图。现在单片机这样不停的循环发输送采集的数据,这时候只有一路能够写进数据库,有时候是第一通道的,有时候是第二通道的,有时候是三四的,不知道是什么原因,按理说,这四路应该是循环的被提取数字,然后写入数据库的。我原以为是数据库的原因,可是我用虚拟串口一路一路的发送上面的数据,每一路都可以写进数据库去,可用单片机这样连续发就不行。我设置的串口的数据MSComm1.RThreshold = 30 ,每读进来30个字符就处理一次,恳请各位高手赐教,帮我找一下为什么连续处理数据就不能写进数据库的问题。我把程序的源代码贴出来。
Private Sub Command1_Click()
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True '...打开串口
End If

End Sub

Private Sub Command2_Click()
MSComm1.PortOpen = False
End Sub

Private Sub Command3_Click()

MSComm1.CommPort = Combo2.Text '...使用选择的Com口

MSComm1.PortOpen = True '...打开串口

If MSComm1.PortOpen = True Then

MsgBox "串口已经打开", , "提示"

End If

End Sub
Private Sub Form_Load()

Combo1.Text = Combo1.List(0)
Combo2.Text = Combo2.List(0)
Combo3.Text = Combo3.List(0)

MSComm1.InputMode = 0 '以文本的形式读入,如果为1,就是二进制读取

MSComm1.InBufferCount = 0

MSComm1.InputLen = 30 '设置每次接受的长度为一个字节

MSComm1.RThreshold = 30 '设置为1,是一次接受一个字节,设置为0是把缓冲区的所有字节都读出来

MSComm1.Settings = "115200,n,8,1" '...设置通讯参数

End Sub

'串口通信的特点就是串行,数据并非一次传过来多少个,而是一个一个的接收到串口缓冲区中,
'你只能选择一次从串口缓冲区中读多少个,这个可以由MSComm控件的RThreshold属性实现,

Private Sub MSComm1_OnComm()

'...通讯事件发生

Select Case MSComm1.CommEvent

Case comEvReceive '...有接受事件发生

 '...接受显示数据
 
Text1.Text = Text1.Text + MSComm1.Input & Chr(10) & Chr(13) '换行显示,紧接着下一行显示

MSComm1.InBufferCount = 0 '...清空输入寄存器

'....从接收的文本中提取数据
'用vbscript正则表达式提取字符串中的数字,工程-引用-Microsoft VBScript RegularExpressions 5.5打钩-确定
Dim str As String, num() As Single 'str用来存储待处理的字符串,num()用来存储提取的数字
str = Text1.Text '为str赋值
Set re = New RegExp '初始化re为RegExp正则匹配模式
re.Global = True '设置匹配时搜索str的整个字符串,若为false,只搜索str里符合条件的第一项
re.Pattern = "[0-9\-]+(?:\.[0-9]+)?" '定义正则表达式,这里为数字
Set mc = re.Execute(str) '返回符合正则表达式匹配对象,并存储在mc中,mc为MatchCollection对象,其count属性返回匹配对象的总数
ReDim num(1 To mc.Count) '重新定义num数组,下限为1,上限为由str提取到的数字个数即mc.count
i = 1 '初始化数组sum脚标
For Each ma In mc '循环读取mc中的每一匹配对象,并存储在ma中,ma为Match对象,其value属性返回匹配对象所匹配的值,即str里的数字。
num(i) = ma.Value '将数字存储在数组sum中
i = i + 1
Next
For i = 1 To UBound(num) '打印数组
'Print num(i)
Next
'Print num(1)
'Print num(2)

'把数据写入数据库内部
sql = "select * from table1"
 Set rst = run_SQL(sql)
  rst.AddNew
  rst.Fields("channel").Value = num(1)
  rst.Fields("voltage").Value = num(2) * 0.001 '电压单位为伏
  If num(2) = 0 Or num(2) > 2500 Then
  rst.Fields("resistance").Value = 0
  Else: '此公式为计算电阻值的公式
  rst.Fields("resistance").Value = (2.5 - rst.Fields("voltage").Value * 0.001) * Val(Combo3.Text) / (num(2) * 0.001) 'Int(Rnd() * 10000) / 100
  End If
  rst.Fields("datetime").Value = Now()
  rst.Update
  Set rst = Nothing