Creación de Reportes con Active Data
Crystal Report 7.0

Fecha: 2003/12/30 (publicado 30/Dic/2003)
Autor: Darwin Loachamin.- darwin_loa@hotmail.com


La creación de reportes con conexión a la base de datos mediante ODBC, me ha dado resultados razonables, pero no efectivos, por la rapidez de presentación de datos para la impresión. No se si les ha pasado que solo para sacar 16 registros tiene que leer 186 registros, esto se debe a las relaciones en SQL en la parte del WHERE y el número de tablas en el FROM.
Para crear un reporte con active data, tienes que hacer lo siguiente:

- En Crystal escoje la opcion File New.- Standard .- Active Data.

- En la pantalla de Select Data Source elije Data Definition, luego New. En esta pantalla tienes que definir los campos que vas a enviar al crystal, es como crear los campos de una tabla. Toma en cuenta que desde Visual vas a enviar un objeto Resultset, y; los campos tienen que concordar en el tipo de datos con este.

- Al final guarda esta plantilla. (Se grabara con .ttx). Este archivo es un archivo plano muy sencillo.

Luego en Visual Basic aumenta esta función:

Public Function ImprimirCryRep(strsql As String, strpathrep As String) As Boolean
Dim rs As New ADODB.Recordset
 
On Error GoTo OcurrioError
Set Cryapp = CreateObject("Crystal.CRPE.Application")
Set CryReport = Cryapp.OpenReport(strpathrep)
rs.Open strsql, ConXAdo, adOpenDynamic, adLockOptimistic
Set reportDb = CryReport.Database
Set reportTables = reportDb.Tables
Set reportTable = reportTables.Item(1)
 
Call reportTable.SetPrivateData(3, rs)
Set repView = CryReport.Preview
ImprimirCryRep = True
Exit Function
OcurrioError:
ImprimirCryRep = False
MsgBox "Ocurrio un error: " & Err.Number & " " & Err.Description
End Function

La conexión a la base de datos se la realiza mediante ADO. Tu puedes conectar mediante ODBC, OLE DB Provider, o lo que te guste mas, pero en el diseño en Crystal no necesita que definas una conexión de base de datos como las anteriores.

En un modulo .bas debes añadir las siguientes variables:

'**********************************
'****OBJETOS PARA MANEJO DE CRYSTAL
'****REPORT 7.0
Public Cryapp As CRPEAuto.Application
Public CryReport As CRPEAuto.Report
Public reportDb As CRPEAuto.Database
Public reportTables As CRPEAuto.DatabaseTables
Public reportTable As CRPEAuto.DatabaseTable
Public repView As View

Se debe verificar que en Visual se haga referencia a: Crystal Report Engine 7 Object Library, que apunta a la librería: c:\windows\system\CPEAUT32.DLL.

No es necesario que se incluya el OCX de crystal.

Listo, esta la función, para que se pueda llamar y ejecutar. Lo que se debe enviar es: en la variable strsql la sentencia SQL de SELECT tomando en cuenta que los elementos del select deben concordar con el diseño del archivo .TTX, en el mismo orden que lo diseñaste. La variable strpath en la dirección donde esta el archivo .rpt del reporte.

Cualquier mejora en la función me la comunican.

Gracias.-


ir al índice