2012-09-25 18 views
0

MSFlexGrid는 ~ 3000,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

다른 컨트롤을 사용하면? 당신은 피할 수있는 유일한 방법은 적은 메모리를 사용하는 것입니다 메모리 한도에 도달했습니다. listview와 더 현대적인 그리드 컨트롤은 집안을 당신의 코드에 맡기는 가상 목록을 허용합니다. 즉, 데이터를 적게 표시하는 것이 일반적인 제안입니다. 사용자는 어떤 형태의 필터링이나 페이징없이 목록에서 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