Hola:
Para crear un reporte por codigo que realize una agrupación o un agregado (calculo) en ADO con VB6 tienes que usar ADO Shape que es un Provedor que viene con OLEDB.
A continuación explico como crear un Reporte de Productos agrupados por Categorias y que totalice el Precio Promedio x Categoria de la BD Northwind de SQL Server:
1. Declarar en un Modulo lo siguiente:
Public con As ADODB.Connection Public rst As ADODB.Recordset
Public Sub Conectar() Set con = New ADODB.Connection con.Provider = "MSDataShape" con.ConnectionString = "Data Provider=SQLOLEDB;uid=sa;data source=(local);initial catalog=Northwind" con.Open End Sub
Public Sub CrearShape() Set rst = New ADODB.Recordset rst.CursorLocation = adUseClient rst.Open "SHAPE {Select ProductID,ProductName,UnitPrice,CategoryID From Products} As rstProductos Compute rstProductos, Avg(rstProductos.UnitPrice) As PrecioProm By CategoryID", con End Sub
2. En un Formulario para mostrar el Recordset creado añadir un Control MS Hierarquical FlexGrid (dgdProducto) y un boton de comando que muestre el reporte (cmdReporte), escribir el sguiente codigo:
Private Sub Form_Load() Conectar CrearShape Set dgdProducto.DataSource = rst End Sub
Private Sub cmdReporte_Click() drtProducto.Show End Sub
3. Crear un Reporte con el DataReport añadiendo una Cabecera y un Pie de Grupo:
- En la Cabecera del Grupo (Section6) añadir un RptTextBox (txtCategoria) y 3 RptLabel (lblCodigo, lblNombre y lblPrecio)
- En la seccion de Detalles (Section1) añadir 3 RptTextBox (txtCodigo, txtNombre y txtPrecio)
- En el Pie del Grupo (Section7) añadir un RptTextBox (txtPrecioProm)
4. En el Evento Initialize del Reporte programar lo siguiente:
Private Sub DataReport_Initialize() Set Me.DataSource = rst Me.Sections("Section6").Controls("txtCategoria").DataField = "CategoryID" Me.Sections("Section1").Controls("txtCodigo").DataMember = "rstProductos" Me.Sections("Section1").Controls("txtCodigo").DataField = "ProductID" Me.Sections("Section1").Controls("txtNombre").DataMember = "rstProductos" Me.Sections("Section1").Controls("txtNombre").DataField = "ProductName" Me.Sections("Section1").Controls("txtPrecio").DataMember = "rstProductos" Me.Sections("Section1").Controls("txtPrecio&uot;).DataField = "UnitPrice" Me.Sections("Section7").Controls("txtPrecioProm").DataField = "PrecioProm" End Sub
Espero haber sido lo mas claro posible, si quieren encontrar mas informacion de como crear Recordset Jerarquicos busquen ADO Shape.
Saludos:
MCP, MOUS, MCAD, MCSD NET, MCT
Luis Dueñas |