2012-09-25 62 views
0

MSFlexGrid每次達到〜350,000個單元時都會發出此30006錯誤。如何解決VB6中的MSFlexGrid錯誤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中使用至少600,000個單元格,那麼我該如何解決這個問題?

+1

通過使用其他控件?你已經達到了一個內存限制,唯一避免的方法是使用更少的內存。列表視圖和更多的現代網格控件允許虛擬列表,讓房子保持您的代碼。話雖如此,正常的建議是顯示較少的數據。如果沒有某種形式的過濾或分頁,用戶無法輕鬆使用列表中的600,000個條目。 – Deanna

+0

@Deanna我實際上正在等待一個詭計。因爲生病就是使用它的人。我甚至爲此做了我自己的搜索欄!它的全部實驗,所以我不擔心用戶。它更像是,你有沒有想過在你的屏幕上看到大量的數據?這就是我想要的,如果MSFlexGrid肯定會失敗,我想使用一些API。但我不想全部理解API。我需要一個簡單的解決方案來保持我的項目,否則我會覺得無聊,把它留給垃圾箱。 –

+0

沒有更簡單的解決方案。你已經達到了這個控制的極限。要麼顯示較少的數據,要麼使用其他控件。 – Deanna

回答

0
'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 
相關問題