[求助]VB中ACESS数据库查询赋值耗时太长的问题
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是一个图表控件。
[解决办法]
能不能这样呢,在循环中不直接向图表控件赋值,你赋给一个变量,再通过一个循环从变量里赋值给控件,这样虽然用到了两个循环,可能要快些。
我原来从数据库里给TEXT赋值,每条记录为一行,当上千行后就很慢了,后来采用这个办法快多了。另一种解决办法是,先把图表的visible设为FLASH,等循环完后再设为TRUE。你试试吧。
[解决办法]
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
[解决办法]
用 GetRows 代替 For MoveNext Next
就能一次性读取5w数据,而不是循环5w次...
[解决办法]
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) 中的第一下标值