Resumen Pasarle un recordset al Crystal Report 6

Hola a tod@s:

    Acabo de tener un "orgasmo intelectual" cuando por fin he podido pasarle al Crystal Reports 6 el recordset de una consulta sin usar formulas.

    Era algo que me tenia sacado de quicio los ultimos dos dias, como reflejan mis mensajes anteriores. Y supongo que comprendereis la gran satisfaccion que siento ahora porque seguro que tamb. habreis pasado por algo similar en algun momento.

Así que alla voy a compartirlo con vosotros:


Como sabreis, si lo habeis usado, el "Crystal Reports Designer" añade un form (Form1) al proyecto; el codigo del mismo es:

#*******************************
Option Explicit

Dim Report As New CrystalReport1

Private Sub Form_Load()

    CRViewer1.ReportSource = Report
    CRViewer1.ViewReport
End Sub

Private Sub Form_Resize()

    CRViewer1.Top = 0
    CRViewer1.Left = 0
    CRViewer1.Height = ScaleHeight
    CRViewer1.Width = ScaleWidth
End Sub
#*******************************


Y se queda tan ancho !!
Entoces llegamos nosotros y añadimos el siguiente codigo, que cada uno modificara segun su situacion:


#*******************************
Option Explicit

' Este ya estaba
Dim Report As New CrystalReport1

' Estas definiciones son nuevas
Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim rs As DAO.Recordset

' Si no trabajais con querys esta no hace falta ;-)
Dim query As DAO.QueryDef


Private Sub Form_Load()

    ' Creamos el espacio de trabajo

    Set ws = DBEngine.Workspaces(0)

    ' Abrimos la base de datos

    Set db = ws.OpenDatabase(App.Path & "\Operaciones.mdb")

    ' Y seleccionamos un query. Daros cuenta que usamos
    ' el indice de la coleccion de querys en vez del nombre
    ' del query, como se hacia hasta ahora. (por lo menos yo)

    Set query = db.QueryDefs(3)

    ' Y como es con parametros, definimos el contenido del
    ' parametro

    query![FondoABuscar] = "Bankinter"

    ' Este query lo que hace es sacar todos lo registros cuyo
    ' campo Fondo sea igual a "Bankinter"

    ' Abrimos el recordset del query

    Set rs = query.OpenRecordset

    ' y se lo asignamos al reporte    

    Report.Database.SetDataSource rs


    CRViewer1.ReportSource = Report

    ' ... y ya esta !!

    CRViewer1.ViewReport
End Sub

Private Sub Form_Resize()

    CRViewer1.Top = 0
    CRViewer1.Left = 0
    CRViewer1.Height = ScaleHeight
    CRViewer1.Width = ScaleWidth
End Sub

Private Sub Form_Unload(Cancel As Integer)

  ' Cerramos todo lo que hemos abierto antes.    

    rs.Close
    query.Close
    db.Close
    ws.Close

    Set rs = Nothing
    Set query = Nothing
    Set db = Nothing
    Set ws = Nothing

End Sub
#*******************************

Antes no he dicho que trabajo con DAO y querys. ;-)
Supongo que no tendreis problema en ajustar el ejemplo para recordsets completos o consultas SQL.

En la carpeta Samples del Cr-6 teneis un ejemplo que funciona con ADO:
"Simple Sample Application Proyect"

Si teneis alguna problema, no dudeis en escribir a mi direccion personal

Espero que el ejemplo os sirva.

Bye !!

Un salu2
____________________________
           Jose Julio Ruiz
         josejrp@iname.com
--------------------------------
     (desde Segovia - España)
           ICQ => 8834523
--------------------------------
       [omitidos los acentos]



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com