如何在VB6中解决MSFlexGrid错误30006

如何在VB6中解决MSFlexGrid错误30006,vb6,error-handling,msflexgrid,Vb6,Error Handling,Msflexgrid,MSFlexGrid每次达到350000个单元格时都会产生30006错误 错误定义: 运行时错误“30006”: 无法为FlexGrid分配内存 我的代码示例: Do While Not rs.EOF With MSFlexGrid1 .Rows = .Rows + 1 .TextMatrix(i, 1) = rs.Fields("1") 's1 .TextMatrix(i, 2) = rs.Fields(&quo

MSFlexGrid每次达到350000个单元格时都会产生30006错误

错误定义:

运行时错误“30006”:

无法为FlexGrid分配内存

我的代码示例:

Do While Not rs.EOF
    With MSFlexGrid1
        .Rows = .Rows + 1
        .TextMatrix(i, 1) = rs.Fields("1")    's1
        .TextMatrix(i, 2) = rs.Fields("2")    's2
        .TextMatrix(i, 3) = rs.Fields("3")    'f1
        .TextMatrix(i, 4) = rs.Fields("4")    'gr1
        .TextMatrix(i, 5) = rs.Fields("5")    'gr2
        .TextMatrix(i, 6) = rs.Fields("6")    'gr3
        .TextMatrix(i, 7) = rs.Fields("7")    'gr4
        .TextMatrix(i, 8) = rs.Fields("8")    'gr5
        .TextMatrix(i, 9) = rs.Fields("9")    'gr6
        .TextMatrix(i, 10) = rs.Fields("10")  'gr7
        .TextMatrix(i, 11) = rs.Fields("11")  'gr8
        .TextMatrix(i, 12) = rs.Fields("12")  'c1
        .TextMatrix(i, 13) = rs.Fields("13")  'g1
        .TextMatrix(i, 14) = rs.Fields("14")  's3
        .TextMatrix(i, 15) = rs.Fields("15")  'f2
        .CellAlignment = 4
        .TopRow = .Rows - 1
        .Refresh
    End With
    i = i + 1
    rs.MoveNext
Loop

我需要在MSFlexGrid中使用至少600000个单元格,因此如何使用其他控件解决此问题?

?你已经达到了内存限制,唯一可以避免的方法就是使用更少的内存。listview和更现代的网格控件允许使用虚拟列表,这让您的代码负责管理工作。话虽如此,通常的建议是显示较少的数据。如果没有某种形式的过滤或分页,用户无法轻松使用列表中的600000个条目。@Deanna我实际上在等待一个技巧。。因为我是使用它的人。我甚至为这个做了自己的搜索栏!它完全是实验性的,所以我不担心用户。更像是,你有没有想过在你的屏幕上看到大量的数据?这就是我想要的,如果MSFlexGrid在这方面失败,我当然会使用一些API。但是我不想浪费时间去理解API。我需要一个简单的解决方案来维持我的项目,否则我会觉得无聊,把它扔到垃圾箱里。没有一个更简单的解决方案。你已经达到了控制的极限。要么显示更少的数据,要么使用另一个控件。@Deanna如果我不能将整个数据填充到flexgrid中,那么我将重置它并创建一个后台进程,将所有数据填充到txt文件中。我想这样我就可以处理了。呃,这对所述的问题有什么帮助?或者,您是在使用网格存储数据,还是仅仅显示数据?如果是这样,那么您应该考虑从后端分离UI。
'I got 15 columns so this makes 21874row * 15column = 328110 cells
'it blows at 21875th row so 328125th cell is not reachable
'for that reason i reset the grid so it keeps 
Do While Not rs.EOF
    With MSFlexGrid1
        If .Rows >= 21874 Then
            .Rows = 2
            .Clear
            i = 1
        End If
        .Rows = .Rows + 1
        .TextMatrix(i, 1) = rs.Fields("1")    's1
        .TextMatrix(i, 2) = rs.Fields("2")    's2
        .TextMatrix(i, 3) = rs.Fields("3")    'f1
        .TextMatrix(i, 4) = rs.Fields("4")    'gr1
        .TextMatrix(i, 5) = rs.Fields("5")    'gr2
        .TextMatrix(i, 6) = rs.Fields("6")    'gr3
        .TextMatrix(i, 7) = rs.Fields("7")    'gr4
        .TextMatrix(i, 8) = rs.Fields("8")    'gr5
        .TextMatrix(i, 9) = rs.Fields("9")    'gr6
        .TextMatrix(i, 10) = rs.Fields("10")  'gr7
        .TextMatrix(i, 11) = rs.Fields("11")  'gr8
        .TextMatrix(i, 12) = rs.Fields("12")  'c1
        .TextMatrix(i, 13) = rs.Fields("13")  'g1
        .TextMatrix(i, 14) = rs.Fields("14")  's3
        .TextMatrix(i, 15) = rs.Fields("15")  'f2
        .CellAlignment = 4
        .TopRow = .Rows - 1
        .Refresh
    End With
    i = i + 1
    rs.MoveNext
Loop