REVISIÓN: MSHFLexGrid no muestra filas de más de 2048

Seleccione idioma Seleccione idioma
Id. de artículo: 194653 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

El control Hierarchical FlexGrid siempre muestra un máximo de filas de 2048 independientemente del número de registros del origen de datos.

Solución

Aunque el recuento de registro de la mshflexgrid es correcto, se muestran sólo el primer 2048 registros. Si necesita mostrar más de 2048, deberá abrir el conjunto de registros y rellenar la cuadrícula mediante el método GetString de ADO y la propiedad clip de la MSHFlexGrid.

El código siguiente puede utilizarse en lugar del código de evento Command1_Click en la sección Más información para solucionar temporalmente este comportamiento:
   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
				

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados al principio de este artículo.

Este error se corrigió en Visual Studio 6.0 Service Pack 3.

Para obtener más información acerca de los service packs de Visual Studio, consulte en contacto con los artículos siguientes en Microsoft Knowledge Base:

194022 INFO: Visual Studio 6.0 Service Packs, What, Where, Why

194295 HOWTO: Tell That Visual Studio 6.0 Service Packs Are Installed

Más información

Se puede demostrar este comportamiento de la MSHFlexGrid contra diversos back-extremos incluidos SQL Server, Access, etc..

Pasos para reproducir este comportamiento

Tabla de prueba

  1. Crear una tabla simple con los siguientes campos:
         Name         Data Type (SQL Server)       Data Type(Access) 
      ------------------------------------------------------------------
    
         PartID          Integer                      Integer
         PartName        VarChar (10)                 Text (10)
    					
  2. Insertar discusión sobre las filas de 3000 10000 de la tabla. Por motivos de simplicidad, puede crear un bucle e insertar el mismo registro en un contador de 3000 a 10000.
  3. Guarde la tabla como "Prueba".

    Nota: Puede elegir cualquier otro back-end para realizar la prueba.

Cliente de Visual Basic

  1. Inicie un nuevo proyecto EXE estándar en Visual Basic. Se creará Form1 de manera predeterminada.
  2. Seleccione "Componentes" en el menú proyecto y elija los componentes siguientes:
    • Microsoft ADO Data Control 6.0 (OLE DB).
    • Control Microsoft Hierarchical FlexGrid 6.0.

  3. Seleccione referencias en el menú proyecto y haga clic en "Microsoft ActiveX Data Objects 2.0 Library."
  4. Coloque los siguientes objetos en el formulario:
        Control             Name                  Caption
       -------------------------------------------------------------------
    
       CommandButton       Command1           Using ADO Recordset
       CommandButton       Command2           Using ADODC
       CommandButton       Command3           Free MSHFlexGrid
       MSHFlexGrid         MSHFlexGrid1       Testing MSHFlexGrid Display
       ADODC               Adodc1
    					
  5. Enlazar ADODC mediante el DSN o mediante el proveedor OLEDB nativo (si existe). En la propiedad RecordSource, escriba: seleccionar * de prueba.
  6. Coloque el código siguiente en la sección General Declaration de 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. Presione la tecla F5 para ejecutar el código y tenga en cuenta que 2048 sólo registros se muestran en la MSHFlexGrid.

    Nota: Conectar con el origen de datos mediante el proveedor OLEDB para ODBC o mediante el proveedor OLEDB nativo no tiene ningún efecto en el comportamiento del control Hierarchical FlexGrid.

Propiedades

Id. de artículo: 194653 - Última revisión: lunes, 14 de marzo de 2005 - Versión: 1.2
La información de este artículo se refiere a:
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Palabras clave: 
kbmt kbbug kbfix kbvs600sp3fix KB194653 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 194653

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com