回 帖 发 新 帖 刷新版面

主题:[讨论]关于VB如何以秒为单位从ACCESS数据库数据查询的问题

ACCESS数据库中数据表NT里的一段完整数据这样的! 
以下数据均为一秒中保存一次!! 

批号          时间      数据01          ID 
1121        18:22:31    112        23912 
1121        18:22:32    112        23913 
1121        18:22:33    110        23914 
1121        18:22:34    121        23915 
            .......................... 
          一直到 
1121        19:39:36    120        28523 

我想要的结果是  
从数据表NT,能按每5秒读出数据!!! 

批号          时间      数据01      ID 
1121        18:22:31    112        23912 
1121        18:22:36    112        23913 
1121        18:22:51    110        23914 
            .......................... 
          

从数据表NT,能按每10秒读出数据!!! 

批号          时间      数据01      ID 
1121        18:22:31    112        23912 
1121        18:22:41    112        23913 
1121        18:22:51    110        23914 
            .......................... 

从数据表NT,能按每30秒读出数据!!! 

批号          时间      数据01      ID 
1121        18:22:31    112        23912 
1121        18:23:01    112        23913 
1121        18:23:31    110        23914 
            .......................... 

从数据表NT,能按每60秒读出数据!!! 

批号          时间      数据01      ID 
1121        18:22:31    112        23913 
1121        18:23:31    112        23913 
1121        18:24:31    110        23914 
            .......................... 


使用VB如何提出数据? 

回复列表 (共5个回复)

沙发

'假设cnn数据库联接已经建立

'获取记录的最早时间
dim beginTime as string 
dim sql as string 
dim rst as new adodb.recordset

'每5秒读一次数据
sql="select * from NT order by 时间"
rst.open sql,cnn,0,1
if rst.eof then 
   msgbox "无数据" 
   rst.close
   set rst=nothing
   exit sub
end if
beginTime=rst("时间")
do while not rst.eof
    if datediff("s",beginTime,rst("时间"))=5 then
        5秒_批号=rst("批号")
        5秒_时间=Rst("数据")
        5秒_数据01=rst("数据01")
        5秒_ID=rst("ID")
        beginTime=rst("时间")
    end if
    rst.movenext
loop

板凳


'补充:下面一段也可以换成下面的方式,效率更高:
do while not rst.eof
    if datediff("s",beginTime,rst("时间"))=5 then
        5秒_批号=rst("批号")
        5秒_时间=Rst("数据")
        5秒_数据01=rst("数据01")
        5秒_ID=rst("ID")
        beginTime=rst("时间")
    end if
    rst.movenext
loop


'更改之后的代码段:
(1)把rst.open sql,cnn,0,1改成 rst.open sql,cnn,1,1
(2)循环部分改成:
do while not rst.eof
   5秒_批号=rst("批号")
   5秒_时间=Rst("数据")
   5秒_数据01=rst("数据01")
   5秒_ID=rst("ID") 
   rst.move 5
loop
(3)把上面所有的beginTime相关的都删除

3 楼

10秒、30秒、60秒都是一样的操作方式

4 楼

可以考虑写成一个函数:
function showRecord(secondNums)

   dim sql as string 
   dim rst as new adodb.recordset

   '每几秒秒读一次数据
   sql="select * from NT order by 时间"
   rst.open sql,cnn,1,1
   if rst.eof then 
      msgbox "无数据" 
      rst.close
      set rst=nothing
      exit sub
   end if
   do while not rst.eof
      secondNums秒_批号=rst("批号")    '此处读取数据根据实际情况设置,这里只是‘示意’
      secondNums秒_时间=Rst("数据")    '此处读取数据根据实际情况设置,这里只是‘示意’
      secondNums秒_数据01=rst("数据01")'此处读取数据根据实际情况设置,这里只是‘示意’
      secondNums秒_ID=rst("ID")        '此处读取数据根据实际情况设置,这里只是‘示意’
      rst.move secondNums
   loop    
   rst.close
   set rst=nothing
 
end function

调用方式:
call showRecord(5)
call showRecord(10)
call showRecord(30)
call showRecord(60)

5 楼

非常感谢qingdaofeng所做的解答!!!!1

我来回复

您尚未登录,请登录后再回复。点此登录或注册