手填mshflexgrid,一万条记录要20多秒才能填完,正常吗?太慢了,(求帮我改下代码吧)
我的代码如下:
'将记录集内容装入到mshflexgrid中:
Public Function datafillgrid(pGrid As MSHFlexGrid, SQL As String, C As ADODB.Connection) As BooleanDim rs As New ADODB.Recordset, i As Integer, j As Integer, str As String 'str用于存放字段内容
On Error GoTo gherrrs.Open SQL, C, adOpenStatic, adLockReadOnlyWith pGrid
.Clear: .FixedRows = 1: .FixedCols = 1: .Row = 1: .Col = 1 '设定MSFlexGrid属性
'如果记录不为空
If Not (rs.EOF And rs.BOF) Then '判断是否为空
rs.MoveLast: rs.MoveFirst '移动记录,如果不移动,有时候RecordCount会统计不准确
pGrid.Cols = rs.Fields.Count + 1 '统计字段数量,列要比字段数多一个,第一列为空列
.ColWidth(0) = 200
.TextMatrix(0, 0) = ""
Dim rscol As Integer '字段的序号
For i = 1 To rs.Fields.Count '循环显示字段名称
'.Col = i
rscol = i - 1
If rs.Fields(rscol).Type = adDecimal Or rs.Fields(rscol).Type = adDouble Or rs.Fields(rscol).Type = adNumeric Or rs.Fields(rscol).Type = adSingle Then '根据数据类型,设定数据的显示格式
.ColAlignment(i) = 6
Else
.ColAlignment(i) = 1
End If
.ColWidth(i) = 1200
.TextMatrix(0, i) = rs.Fields(rscol).Name '显示字段名称
Next i .Rows = rs.RecordCount + 1 '因为有固定行,固要加一行
For i = 1 To rs.RecordCount '循环显示记录,有多少条记录则循环多少次
.Row = i '先设定MSFlexGrid的行号
For j = 1 To rs.Fields.Count
rscol = j - 1 '字段的序号,第一列对应rs的第0列字段
str = rs.Fields(rscol) & "" '把字段内容放到字符串中
.TextMatrix(.Row, j) = str
Next j
rs.MoveNext '显示下一条记录
Next i
.TopRow = .Rows - 1 '???????????????有何作用?
datafillgrid = True '返回true
Else
datafillgrid = False
End If
End With
rs.Close
Set rs = Nothing '释放资源
Exit Function
gherr:
MsgBox Err.Description
datafillgrid = FalseEnd Function
我的代码如下:
'将记录集内容装入到mshflexgrid中:
Public Function datafillgrid(pGrid As MSHFlexGrid, SQL As String, C As ADODB.Connection) As BooleanDim rs As New ADODB.Recordset, i As Integer, j As Integer, str As String 'str用于存放字段内容
On Error GoTo gherrrs.Open SQL, C, adOpenStatic, adLockReadOnlyWith pGrid
.Clear: .FixedRows = 1: .FixedCols = 1: .Row = 1: .Col = 1 '设定MSFlexGrid属性
'如果记录不为空
If Not (rs.EOF And rs.BOF) Then '判断是否为空
rs.MoveLast: rs.MoveFirst '移动记录,如果不移动,有时候RecordCount会统计不准确
pGrid.Cols = rs.Fields.Count + 1 '统计字段数量,列要比字段数多一个,第一列为空列
.ColWidth(0) = 200
.TextMatrix(0, 0) = ""
Dim rscol As Integer '字段的序号
For i = 1 To rs.Fields.Count '循环显示字段名称
'.Col = i
rscol = i - 1
If rs.Fields(rscol).Type = adDecimal Or rs.Fields(rscol).Type = adDouble Or rs.Fields(rscol).Type = adNumeric Or rs.Fields(rscol).Type = adSingle Then '根据数据类型,设定数据的显示格式
.ColAlignment(i) = 6
Else
.ColAlignment(i) = 1
End If
.ColWidth(i) = 1200
.TextMatrix(0, i) = rs.Fields(rscol).Name '显示字段名称
Next i .Rows = rs.RecordCount + 1 '因为有固定行,固要加一行
For i = 1 To rs.RecordCount '循环显示记录,有多少条记录则循环多少次
.Row = i '先设定MSFlexGrid的行号
For j = 1 To rs.Fields.Count
rscol = j - 1 '字段的序号,第一列对应rs的第0列字段
str = rs.Fields(rscol) & "" '把字段内容放到字符串中
.TextMatrix(.Row, j) = str
Next j
rs.MoveNext '显示下一条记录
Next i
.TopRow = .Rows - 1 '???????????????有何作用?
datafillgrid = True '返回true
Else
datafillgrid = False
End If
End With
rs.Close
Set rs = Nothing '释放资源
Exit Function
gherr:
MsgBox Err.Description
datafillgrid = FalseEnd Function
解决方案 »
- 如何直接向Webbrowser中写入html代码,不需要Navigate到实际存在的文件
- 运行没有问题,但是dbf表是中的数据没有变化
- 我设计的报表工具DTE2008版再次被华军软件园收录 散分来了 Http://www.OnlineDown.net/soft/64454.htm
- 请推荐一个表格控件,急,谢谢
- 怎样使RICHTEXTBOX里面的字符显示特定的颜色和背景颜色?
- 兄弟们。高手们。让我们共同创业。
- 怎么让ComboBox自动选中指定得一项
- 100分求救,怎样让鼠标变成小手摸样,就像浏览网页!
- 用vb可否写鼠标驱动程序?应该怎么写,关注!!
- 有谁能用VB做一个像金山游侠,FPE2000等修改游戏的软件
- 数据库的备份与恢复 急,在线等
- [还是不懂~~~]如何读取某一个word文档内容,并依次保存到一个数组中去(以回车为分隔)?
1、网格只显示20条记录,关控件的SCROOL,用VB的HSCROOL替代。
2、写20条记录到数据库(字段与记录的字段相同)
3、关联数据库和网格控件后刷新显示。
4、计算HScrool控件Value与显示记录位置,调整下次写数据库记录位置。
优点:
显示速度快、网格不闪烁。
手填前要先设置好行数,不要在循环体中添加行。
如果是用lgxgrid控件手填,可以这样:
lgxgrid1.setrows(20000) '直接设置行数为20000行
for i=1 to 20000
for j=1 to 3
call lgxgrid1.setdata(i,j,i+j)
next
next以上代码用时11秒
快了一些,9000条,7秒钟,有20个字段,正常吗?
请教一下。???
rs.Open sql, conn, adOpenForwardOnly, adLockReadOnly'用只向前,并且只读模式
.TopRow = .Rows - 1 '???????????????有何作用?
这句作用是使表格滚动到最后一行
快了一些,9000条,7秒钟,有20个字段,正常吗?
请教一下。???这是一个非常正确的做法,我以前也是碰到和你一样的问题,改成redraw = false后,填表速度有质的飞跃。
.Visible = False
完成后
.Visible = True试试