手填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

解决方案 »

  1.   

    分页显示也比较慢,一个个的填记录方法有问题。我用的方法如下:
    1、网格只显示20条记录,关控件的SCROOL,用VB的HSCROOL替代。
    2、写20条记录到数据库(字段与记录的字段相同)
    3、关联数据库和网格控件后刷新显示。
    4、计算HScrool控件Value与显示记录位置,调整下次写数据库记录位置。
    优点:
    显示速度快、网格不闪烁。
      

  2.   

    手填一次就得等刷新一次后才能再填,这种方法很难提高填入速度的。想提高速度就得先让网格VISIBLE=FALSE,填完后再TRUE,不过网格闪的厉害。
      

  3.   

    强烈推荐使用JANUS GIRD2000这个控件.
      

  4.   

    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)
      next
    next以上代码用时11秒
      

  5.   

    我改了一下,手填前先 redraw = false ,用填后再:redraw = true
    快了一些,9000条,7秒钟,有20个字段,正常吗?
    请教一下。???
      

  6.   

    rs.CursorLocation = adUseClient'游标放在本地
    rs.Open sql, conn, adOpenForwardOnly, adLockReadOnly'用只向前,并且只读模式
    .TopRow = .Rows - 1             '???????????????有何作用?
    这句作用是使表格滚动到最后一行
      

  7.   

    我改了一下,手填前先 redraw = false ,用填后再:redraw = true
    快了一些,9000条,7秒钟,有20个字段,正常吗?
    请教一下。???这是一个非常正确的做法,我以前也是碰到和你一样的问题,改成redraw = false后,填表速度有质的飞跃。
      

  8.   

    在填充前
    .Visible = False
    完成后
    .Visible = True试试