Artigo: 194653 - Última revisão: segunda-feira, 14 de Março de 2005 - Revisão: 1.2

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

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 | Reduzir tudo

Sintomas

O controlo FlexGrid hierárquica apresenta sempre um máximo de linhas de 2048 independentemente do número de registos na origem de dados.

Resolução

Embora o número de registo do mshflexgrid correcto, apenas o primeiro 2048 registos são apresentados. Se precisar de apresentar mais de 2048, terá de abrir o conjunto de registos e povoar a grelha utilizando o método GetString do ADO e a propriedade clip o MSHFlexGrid.

O código abaixo pode ser utilizado em vez de código no evento Command1_Click na secção Mais informações para resolver este 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
				

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo.

Este erro foi corrigido no Visual Studio 6.0 Service Pack 3.

Para 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ção

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

Passos para reproduzir o comportamento

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 debate sobre linhas de 3000 10000 na sua tabela. Para uma questão de simplicidade, pode criar um ciclo e inserir o mesmo registo num contador de 3000 para 10000.
  3. Guardar a tabela como "Teste".

    NOTA: Pode escolher qualquer outro back-end para efectuar o teste.

Cliente de Visual Basic

  1. Inicie um novo projecto EXE padrão no Visual Basic. É criado o Form1 por predefinição.
  2. Seleccione "Components" no menu projecto e escolha os seguintes componentes:
    • Controlo de dados Microsoft ADO 6.0 (OLE DB).
    • Controlo de FlexGrid hierárquica 6.0 da Microsoft.

  3. Seleccione References no menu projecto e clique em "Microsoft ActiveX Data Objects 2.0 Library."
  4. Coloque os seguintes objectos 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. Ligar ADODC através do DSN ou através do fornecedor de OLEDB nativo (se existir). Na propriedade OrigemDosRegistos, escrever: seleccione * de teste.
  6. Coloque o código seguinte na secção Geral declaração 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. Prima a tecla F5 para executar o código e note que apenas 2048 registos são apresentados no MSHFlexGrid.

    NOTA: Ligar à origem de dados utilizando o fornecedor de OLEDB para ODBC ou utilizando o fornecedor de OLEDB 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )