如何将MSComm收到的数据保存在数据库中
编号:QA000890
建立日期: 1999年4月30日 最后修改日期:1999年5月6日
所属类别:
wujing:
pvb6.0
nt4.0
最近想编一电话记费软件,用vb mscomm接收交换机从com传过来的文本。传过来的是一串字符。需要整理后print 在屏幕上。然后存在一个建好的Access数据库里面。请问:
1.如何从接收的字符串定义若干个变量,以便显示在屏幕上.
2.如何将这一组变量存到Access数据库。
接收的字符串:
610 980103 12:00:00 00:00:11 61234567 ..........
610(分机号码)
980103(日期)
12:00:00(时间)
00:00:11(时长)
61234567(电话号码)
在分解该行中的各个信息(变量)之前,程序应如何确定已收完了一行字符?(每一行的字符数可能不等,行尾以回车结束。)此时用MSCOMM的“事件驱动”方式还是用“查询”方式?
回答:
如果你接收的字符串中每个字段的长度都是固定的,你可以这样做:
sCaller = Left(s, 5)
sDate = Trim(Mid(s, 6, 10))
sTime = Trim(Mid(s, 16, 10))
等等。
如果不是固定长度的,而是使用空格分割的,可以采用这样的代码:
s = Trim(s)
nPos = InStr(s, " ")
sCaller = Left(s, nPos - 1)
s = Trim(Mid(s, nPos))
nPos = InStr(s, " ")
sDate = Left(s, nPos - 1)
以下类推。
获得各个字段后,使用下面的代码保存(假定有关时间的字段为日期型),rdRecord为你的数据库的Recordset:
rdRecord.AddNew
rdRecord("Caller") = sCaller
rdRecord("Date") = CDate(sDate)
rdRecord("Time") = CDate(sTime)
....
rdRecord.Update
在分解前,你可以使用InStr函数寻找一下vbCr(即Chr(13)),来确定新行的开始。
只要可能,在使用MSCOMM时总是愿意使用事件驱动方式的,只有在这种方式实在不行的时候才用“查寻方式”。你的问题应该可以使用事件驱动方式,只是每次需要先确定一下行的起始位置。
此问题由李海回答。
| |
|
|
| |
|
|