热情软件屋

 

如何将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时总是愿意使用事件驱动方式的,只有在这种方式实在不行的时候才用“查寻方式”。你的问题应该可以使用事件驱动方式,只是每次需要先确定一下行的起始位置。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio