ID do artigo: 194653 - Última revisão: segunda-feira, 14 de março de 2005 - Revisão: 1.2

CORRECÇÃO: MSHFLexGrid não exibe mais de 2048 linhas

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sintomas

O controle FlexGrid hierárquicos sempre exibe um máximo de linhas de 2048 independentemente do número de registros da fonte de dados.

Resolução

Embora a contagem de registro do mshflexgrid estiver correta, somente o primeiro 2048 registros são exibidos. Se você precisar exibir mais de 2048, você precisará abrir o conjunto de registros e preencher a grade utilizando o método GetString do ADO e a propriedade Clip do MSHFlexGrid.

O código a seguir pode ser usado no lugar do código no evento Command1_Click na seção Mais informações para solucionar esse comportamento:
   Dim cn As New ADODB.Connection
   Dim rs As New ADODB.Recordset
   Dim rsVar As Variant
   Dim i As Integer
   cn.Open "Testing"  '<-- Your DSN

   rs.Open "select * from Cies", cn, adOpenStatic, adLockOptimistic
   rs.MoveLast

   rs.MoveFirst
   ' Assuming that rs is your ADO recordset
   MSHFlexGrid1.Rows = rs.RecordCount + 1

   rsVar = rs.GetString(adClipString, rs.RecordCount)

   MSHFlexGrid1.Cols = rs.Fields.Count

   ' Set column names in the grid
   For i = 0 To rs.Fields.Count - 1

       MSHFlexGrid1.TextMatrix(0, i) = rs.Fields(i).Name

   Next

   MSHFlexGrid1.Row = 1
   MSHFlexGrid1.Col = 0

   ' Set range of cells in the grid
   MSHFlexGrid1.RowSel = MSHFlexGrid1.Rows - 1
   MSHFlexGrid1.ColSel = MSHFlexGrid1.Cols - 1
   MSHFlexGrid1.Clip = rsVar

   ' Reset the grid's selected range of cells
   MSHFlexGrid1.RowSel = MSHFlexGrid1.Row
   MSHFlexGrid1.ColSel = MSHFlexGrid1.Col

   rs.Close
   Set rs = Nothing
   cn.Close
   Set cn = Nothing
				

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo.

Esse bug foi corrigido no Visual Studio 6.0 Service Pack 3.

Para obter mais informações sobre service packs do Visual Studio, consulte os seguintes artigos na Base de dados de Conhecimento da Microsoft:

194022 INFO: Visual Studio 6.0 Service Packs, What, Where, Why  (http://support.microsoft.com/kb/194022/EN-US/ )

194295 HOWTO: Tell That Visual Studio 6.0 Service Packs Are Installed  (http://support.microsoft.com/kb/194295/EN-US/ )

Mais Informações

Esse comportamento do MSHFlexGrid pode ser demonstrado contra vários back-ends incluindo SQL Server, Access, etc.

Etapas para reproduzir o problema

Tabela de teste

  1. Criar uma tabela simples com os seguintes campos:
         Name         Data Type (SQL Server)       Data Type(Access) 
      ------------------------------------------------------------------
    
         PartID          Integer                      Integer
         PartName        VarChar (10)                 Text (10)
    					
  2. Inserir sobre 3000 10000 linhas da tabela. Para simplificar, você pode criar um loop e inserir o mesmo registro em um contador de 3000 para 10000.
  3. Salvar sua tabela como "Test".

    Observação: Você pode escolher qualquer outro back-end para executar o teste.

Cliente do Visual Basic

  1. Inicie um novo projeto Standard EXE no Visual Basic. O Form1 é criado por padrão.
  2. Selecione "Componentes" no menu Project e escolha os seguintes componentes:
    • Controle de dados do Microsoft ADO 6.0 (OLE DB).
    • Controle hierárquico FlexGrid 6.0 da Microsoft.

  3. Selecione referências no menu Project e clique em "Microsoft ActiveX Data Objects 2.0 Library."
  4. Coloque os seguintes objetos no formulário:
        Control             Name                  Caption
       -------------------------------------------------------------------
    
       CommandButton       Command1           Using ADO Recordset
       CommandButton       Command2           Using ADODC
       CommandButton       Command3           Free MSHFlexGrid
       MSHFlexGrid         MSHFlexGrid1       Testing MSHFlexGrid Display
       ADODC               Adodc1
    					
  5. Vincule ADODC através do DSN ou por seu provedor OLE DB nativo (se existir). Na propriedade OrigemDoRegistro, escreva: selecione * de teste.
  6. Coloque o código a seguir na seção Declaração geral do Form1:
           Option Explicit
    
           Private Sub Command1_Click()
    
              Dim cn As New ADODB.Connection
              Dim rs As New ADODB.Recordset
    
              cn.Open "Testing"               '<-- Your DSN
    
              rs.Open "select * from Test", cn, adOpenStatic, adLockOptimistic
              rs.MoveLast
    
              ' Check the number records in your ADO recordset
              ' The RecordCount property of the ADO recordset reflects the
              ' actual number of records
    
              Debug.Print "ADO recordset record-count: " & vbTab & _
                  rs.RecordCount
    
              Form1.Caption = "Loading grid... please wait..."
    
              Set MSHFlexGrid1.Recordset = rs
    
              ' Check the number of rows that the Hierarchical FlexGrid
              ' contains The RecordCount property of the Hierarchical
              ' FlexGrid also reflects the actual number of records
    
              Debug.Print "MSHFlexGrid1 Recordset record-count: " & vbTab &  _
                 MSHFlexGrid1.Recordset.RecordCount
    
              Form1.Caption = "MSHFlexGrid Display Sample"
    
              ' Free resources
              rs.Close
              Set rs = Nothing
              cn.Close
              Set cn = Nothing
    
           End Sub
    
           Private Sub Command2_Click()
    
              Form1.Caption = "Loading data... please wait..."
    
              ' Set the Grid's source to be ADODC
              Set MSHFlexGrid1.DataSource = Adodc1
    
              ' Check the number of records in ADODC recordset
              Debug.Print "ADO data control record-count: " & vbTab &  _
                 Adodc1.Recordset.RecordCount
              Form1.Caption = "MSHFlexGrid Display Sample"
           End Sub
    
           Private Sub Command3_Click()
              MSHFlexGrid1.Clear
              Form1.Caption = "Grid is clear now..."
           End Sub
    					
  7. Pressione a tecla F5 para executar o código e observe que somente 2048 registros são exibidos na MSHFlexGrid.

    Observação: Conectar à fonte de dados usando o provedor OLE DB para ODBC ou usando o provedor OLE DB nativo não tem efeito no comportamento FlexGrid hierárquica.

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Palavras-chave: 
kbmt kbbug kbfix kbvs600sp3fix KB194653 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 194653  (http://support.microsoft.com/kb/194653/en-us/ )