ACESS数据库中一张表,VB表单里有两个ADODC和DATAGRID,其中一个显示所有数据,另外一个显示查询出来的数据。     今天测试50000组数据时,将查询结果表中数值赋给几个变量,每循环一次耗时时间很长,要1分钟左右。请大家帮忙看看问题。需要怎么改进For k = 0 To Form4.Adodc2.Recordset.RecordCount - 1
     Form4.Adodc2.Recordset.MoveFirst
     Form4.Adodc2.Recordset.Move (k)
     Form4.Pesgo1.XDataII(0, k) = Form4.Adodc2.Recordset.Fields("时间")
     Form4.Pesgo1.XDataII(1, k) = Form4.Adodc2.Recordset.Fields("时间")
     Form4.Pesgo1.YData(0, k) = Form4.Adodc2.Recordset.Fields("数据1")
     Form4.Pesgo1.YData(1, k) = Form4.Adodc2.Recordset.Fields("数据2")
 Next k
      
    上面Pesgo是一个图表控件。

解决方案 »

  1.   

    首先要说明一下
    如果你有50000组数据
    Access绝对不适合你
    因为Access数据库文件超过 20 MB 或者数据较多的情况下
    均会出现系统延迟高
    数据无法正常读取
    数据读取错误等问题
      

  2.   

    不是分页的问题,就是要把大量的数据取出来显示,可以先赋给数组,也可以直接赋给控件的参数。问题就出在
    Form4.Adodc2.Recordset.MoveFirst
    Form4.Adodc2.Recordset.Move (k)然后取值,这里,可能是反复移动RS,占用了大量时间
      

  3.   

    能不能这样呢,在循环中不直接向图表控件赋值,你赋给一个变量,再通过一个循环从变量里赋值给控件,这样虽然用到了两个循环,可能要快些。我原来从数据库里给TEXT赋值,每条记录为一行,当上千行后就很慢了,后来采用这个办法快多了。另一种解决办法是,先把图表的visible设为FLASH,等循环完后再设为TRUE。你试试吧。
      

  4.   

    with Form4.Adodc2.Recordset
    .MoveFirst
    For k = 0 To Form4.Adodc2.Recordset.RecordCount - 1
         .Movenext
         Form4.Pesgo1.XDataII(0, k) = .Fields("时间")
         Form4.Pesgo1.XDataII(1, k) = .Fields("时间2")
         Form4.Pesgo1.YData(0, k) = .Fields("数据1")
         Form4.Pesgo1.YData(1, k) = .Fields("数据2")
     Next k
      

  5.   

    dim rsct as long 
    with Form4.Adodc2.Recordset
    .MoveFirst
    rsct= .RecordCount -1
    For k = 0 To rsct
         Form4.Pesgo1.XDataII(0, k) = .Fields("时间")
         Form4.Pesgo1.XDataII(1, k) = .Fields("时间2")
         Form4.Pesgo1.YData(0, k) = .Fields("数据1")
         Form4.Pesgo1.YData(1, k) = .Fields("数据2")
         if k<rsct then .MoveNext
    Next k
    end with
      

  6.   

    用 GetRows 代替 For MoveNext Next就能一次性读取5w数据,而不是循环5w次...
      

  7.   

    LS说的对
    dim rsall,i as long,j as long
    with Form4.Adodc2.Recordset
    if not .eof then
    rsall= Form4.Adodc2.Recordset.GetRows(-1)
    For i = 0 to ubound(rsall,2)
         Form4.Pesgo1.XDataII(0, k) = rsall(0,i)
         Form4.Pesgo1.XDataII(1, k) = rsall(1,i)
         Form4.Pesgo1.YData(0, k) = rsall(2,i)
         Form4.Pesgo1.YData(1, k) = rsall(3,i)
    next i
    end if
    end with
    这里假定你的记录是4列 自己根据查询所有列名顺序 修改 rsall(0,i) 中的第一下标值