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

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
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.

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 194653 - Última revisión: 03/14/2005 17:55:00 - Revisión: 1.2

Microsoft Visual Basic Enterprise Edition for Windows 6.0

  • kbmt kbbug kbfix kbvs600sp3fix KB194653 KbMtes
Comentarios