En este ejemplo podemos ver de una manera fácil como se llena un MSHFlexGrid y cómo mostrar un reporte usando DataReport con los datos del registro seleccionado.
El proyecto cuenta con una base de datos MS Access con una tabla Alumnos que contiene 5 campos.
Primero se hace la conexión a la base de datos:
Dim ConexionADO As New ADODB.Connection Sub Conectar() ConexionADO.CursorLocation = adUseClient ConexionADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & App.Path & "/BaseDatos.accdb" _ & ";Jet OLEDB:Database Password=" End Sub
Se llena el MSHFlexGrid haciendo una consulta a la tabla Alumnos:
Sub LlenarGrid() Dim Recor As New ADODB.Recordset Dim SQL As String SQL = "Select * from Alumnos order by nombre_apellidos_al ASC" Set Recor = ConexionADO.Execute(SQL) numcolumnas = 6 With MSHFlexGrid1 .Cols = numcolumnas ' Numero de columnas que contendra el grid 'titulos de las columnas .TextMatrix(0, 1) = "Codigo" .TextMatrix(0, 2) = "Nombre" .TextMatrix(0, 3) = "Identificacion" .TextMatrix(0, 4) = "Teléfono" .TextMatrix(0, 5) = "Dirección" 'anchos de las columnas .ColWidth(0) = 0 .ColWidth(1) = 900 .ColWidth(2) = 3000 .ColWidth(3) = 1500 .ColWidth(4) = 1500 .ColWidth(5) = 2500 .DataMember = Recor.DataMember Set .DataSource = Recor.DataSource numfilas = Recor.RecordCount ' se va a cambiar el color de fondo de las filas pares For fil = 1 To numfilas .Row = fil 'seleccionamos la fia If fil Mod 2 = 0 Then 'si es un numero par For Colum = 1 To numcolumnas - 1 'recorremos las columnas .Col = Colum .CellBackColor = &HFEEEDD 'se cambia el color de la celda Next Colum End If Next fil End With End Sub
Se llama desde el evento Load del Formulario, se llama al procedimiento de Conectar y el de LlenarGrid
Private Sub Form_Load() Call Conectar Call LlenarGrid End Sub
Para hacer el Reporte se Crear un nuevo reporte usando DataReport y se personaliza: Hay que tener en cuenta la propiedad DataFiel de los rptTextBox aqui se debo colocar el nombre del campo de la tabla que se desea mostrar.
El código para mostrar el Reporte de Alumno seleccionado en el Grid es el siguiente:
Private Sub cmdReporte_Click() Dim Recor As New ADODB.Recordset Dim SQL As String Codigoalumno = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 1) 'codiog del alumno seleccionado If Codigoalumno <> "" Then ' si el codigo no esta vacio SQL = "Select * from Alumnos Where codigo_al = " & Codigoalumno 'se consultado el codigo del alumno seleccionado Set Recor = ConexionADO.Execute(SQL) DataReport1.DataMember = Recor.DataMember Set DataReport1.DataSource = Recor.DataSource DataReport1.Show ' se muestra el reporte Else MsgBox "Debe seleccionar un alumno", vbExclamation, "Error" End If End Sub
Código del Proyecto: Descargar