El control Hierarchical FlexGrid muestra siempre un máximo de filas 2048 independientemente del número de registros en el origen de datos.
Volver al principio
Aunque el registro de recuento de la mshflexgrid es correcto, se muestran sólo el primer 2048 registros. Si se 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 en el evento Comando1_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
Volver al principio
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 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/)
Volver al principio
Este comportamiento de la MSHFlexGrid puede se muestran con respecto a diversos servicios de extremos incluidos SQL Server, tener acceso A, etc..
Volver al principio
Pasos para reproducir este comportamiento
Volver al principio
Tabla de prueba
| 1. | Crear una tabla sencilla con los siguientes campos:
Name Data Type (SQL Server) Data Type(Access)
------------------------------------------------------------------
PartID Integer Integer
PartName VarChar (10) Text (10)
|
| 2. | Insertar sobre filas 3000-10000 en la tabla. Por motivos de simplicidad, puede crear un bucle y insertar el mismo registro en un contador de 3000 a 10000. |
| 3. | Guarde la tabla como "Prueba".
NOTA: Puede elegir cualquier otros servicios de fondo para realizar la prueba. |
Volver al principio
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 siguientes componentes:| ? | Microsoft ADO Data Control 6.0 (OLE DB). | | ? | Microsoft Hierarchical FlexGrid Control 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 (OrigenDelRegistro), escriba: seleccionar * de prueba. |
| 6. | Coloque el código siguiente en la sección de declaraciones general 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 observe que sólo 2048 registros se muestran en el MSHFlexGrid.
NOTA: Conectar al origen de datos mediante el proveedor OLEDB para ODBC o mediante el proveedor OLEDB nativo no tiene ningún efecto en el comportamiento Hierarchical FlexGrid. |
Volver al principio