El control Hierarchical FlexGrid siempre muestra un máximo de filas de 2048 independientemente del número de registros del origen de datos.
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
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
(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/
)
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
- Crear una tabla simple con los siguientes campos:
Name Data Type (SQL Server) Data Type(Access)
------------------------------------------------------------------
PartID Integer Integer
PartName VarChar (10) Text (10)
- 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.
- Guarde la tabla como "Prueba".
Nota: Puede elegir cualquier otro back-end para realizar la prueba.
Cliente de Visual Basic
- Inicie un nuevo proyecto EXE estándar en Visual Basic. Se creará Form1 de manera predeterminada.
- 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.
- Seleccione referencias en el menú proyecto y haga clic en "Microsoft ActiveX Data Objects 2.0 Library."
- 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
- Enlazar ADODC mediante el DSN o mediante el proveedor OLEDB nativo (si existe). En la propiedad RecordSource, escriba: seleccionar * de prueba.
- 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
- 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.
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
| kbmt kbbug kbfix kbvs600sp3fix KB194653 KbMtes |
Traducción automáticaIMPORTANTE: 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
(http://support.microsoft.com/kb/194653/en-us/
)