手填mshflexgrid,一万条记录要20多秒才能填完,正常吗?太慢了,(求帮我改下代码吧)
日期:2007-05-15 荐:
手填mshflexgrid,一万条记录要20多秒才能填完,正常吗?太慢了,(求帮我改下代码吧)手填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 IfEnd Withrs.CloseSet rs = Nothing '释放资源Exit Functiongherr: MsgBox Err.Description datafillgrid = FalseEnd Function考虑分页显示谢谢楼上,分页显示能给点代码吗?另外:我用绑定的办法是很快的。可是用手填就太慢。我认为还是我的代码不优化?能帮我优化一下吗?另外:如何分页呀?谢谢。分页显示也比较慢,一个个的填记录方法有问题。我用的方法如下:1、网格只显示20条记录,关控件的SCROOL,用VB的HSCROOL替代。2、写20条记录到数据库(字段与记录的字段相同)3、关联数据库和网格控件后刷新显示。4、计算HScrool控件Value与显示记录位置,调整下次写数据库记录位置。优点:显示速度快、网格不闪烁。手填一次就得等刷新一次后才能再填,这种方法很难提高填入速度的。想提高速度就得先让网格VISIBLE=FALSE,填完后再TRUE,不过网格闪的厉害。对于1万条数据来说,20秒是一个可以接受的范围。我试过,用手填没这么慢呀!拖延网格刷新!拖延网格刷新!如何实现呀?说说吗?关注如何能做到拖延网格刷新?刷新时,弹出另一个窗体,显示刷新数据的进度.然后再跳回来刷新时,弹出另一个窗体,显示刷新数据的进度.然后再跳回来-------------------------谢谢。不过个人觉得不好,显得很乱。我的目的就是提高速义,优化代码。请教。强烈推荐使用JANUS GIRD2000这个控件.lgxgrid控件手填20000条数据的用时是11秒(列数为3)。手填前要先设置好行数,不要在循环体中添加行。如果是用lgxgrid控件手填,可以这样:lgxgrid1.setrows(20000) '直接设置行数为20000行for i=1 to 20000 for j=1 to 3 call lgxgrid1.setdata(i,j,i j) nextnext以上代码用时11秒我改了一下,手填前先 redraw = false ,用填后再:redraw = true快了一些,9000条,7秒钟,有20个字段,正常吗?请教一下。???rs.CursorLocation = adUseClient'游标放在本地rs.Open sql, conn, adOpenForwardOnly, adLockReadOnly'用只向前,并且只读模式.TopRow = .Rows - 1 '???????????????有何作用?这句作用是使表格滚动到最后一行我改了一下,手填前先 redraw = false ,用填后再:redraw = true快了一些,9000条,7秒钟,有20个字段,正常吗?请教一下。???这是一个非常正确的做法,我以前也是碰到和你一样的问题,改成redraw = false后,填表速度有质的飞跃。在填充前.Visible = False完成后.Visible = True试试
标签: