Crystal Report 9

Espero que ahora entiendas lo que quiero preguntarte:
Estoy intentando mostrar informes que he hecho con Crystal desde el Visual de Access.
A continuación te mando parte del código que utilizo para abrir el informe de crystal.
Set rAdoRs = ObtenerAdoRs(sQuery)
'Abrir el reporte
Screen.MousePointer = 11 'vbhourglass
mflgContinuar = True
Set crReport = crApp.OpenReport("C:\doxa\rptValoracionCurso.rpt", 1)
crReport.Database.SetDataSource AdoRs
'CRViewer.ReportSource = crReport
'CRViewer.ViewReport
Screen.MousePointer = 0 'vbDefault
El problema me ha surgido porque el método o propiedad reportSource y ViewReport en el Visual de Access no lo reconoce mientras que en Visual Basic 6.0 si.
Espero que ahora me entiendas lo que quiero preguntarte.
Es muy urgente te agradecería me contestases cuanto antes Muchas Gracias

1 respuesta

Respuesta
1
Lo primero que se me plantea es ¿cuándo cierras la conexión que abres con ObtenerAdoRs?. Si quieres utilizar rAdoRs su conexión deberá estar abierta. Por otro lado, comprueba que esta conexión que abres no es en modo exclusivo.
Si lo que quieres es modificar el criterio de selección de registros en el informe, deberías utilizar el método crReport. RecordSelectionFormula.
Insisto en que mientras tengas cualquier objeto en modo edición en el entorno Access (tabla, consulta, formulario,...) la base de datos se considera abierta en modo exclusivo.
A que te refieres con lo de modo edición.
Yo abro una conexión independiente porque necesito modificar la select que tengo predefinida en el CR. Te envío todo el código que utilizo para ver si así entiendes lo que pretendo hacer.
Option Compare Database
Public lidConcepto, lidConcepto2, lidConcepto3, lidConcepto4, _
lidConcepto5, lidConcepto6, lidConcepto7, Curso As Long
Private crApp As New CRAXDRT.Application
Private crReport As New CRAXDRT.Report
Private mflgContinuar As Boolean
Private Sub Form_Resize()
CRViewer.Top = 0
CRViewer.Left = 0
CRViewer.Height = 4695
CRViewer.Width = 8295
End Sub
Private Sub Form_Activate()
If Not mflgContinuar Then Close
End Sub
Private Sub Form_Load()
Dim sQuery As String
Dim rAdoRs As ADODB.Recordset
On Error GoTo ErrHandler
sQuery = " exec urpEvalGeneralCurso @IdCursoImparticion = " & Form_frmCursosImparVisualizarEvaluaciones.IdCurso & ", @IdConcepto = " & Form_frmCursosImparVisualizarEvaluaciones.lidConcepto & ","
sQuery = sQuery & "@IdConcepto2 = " & Form_frmCursosImparVisualizarEvaluaciones.lidConcepto2 & ", "
sQuery = sQuery & "@IdConcepto3 = " & Form_frmCursosImparVisualizarEvaluaciones.lidConcepto3 & ", "
sQuery = sQuery & "@IdConcepto4 = " & Form_frmCursosImparVisualizarEvaluaciones.lidConcepto4 & ", "
sQuery = sQuery & "@IdConcepto5 = " & Form_frmCursosImparVisualizarEvaluaciones.lidConcepto5 & ", "
sQuery = sQuery & "@IdConcepto6 = " & Form_frmCursosImparVisualizarEvaluaciones.lidConcepto6 & ", "
sQuery = sQuery & "@IdConcepto7 = " & Form_frmCursosImparVisualizarEvaluaciones.lidConcepto7 & ", "
If Right(sQuery, 2) = ", " Then
sQuery = Left(sQuery, Len(sQuery) - 2)
End If
Set rAdoRs = ObtenerAdoRs(sQuery)
'obteneradors es una funcion que lo que hace es abrir una conexion y ejecutar la sentencia sql para almacenar los resultados en un recordset que luego utilizo para pasarselo como fuente al CR.
'Abrir el reporte
Screen.MousePointer = 11 'vbhourglass
mflgContinuar = True
Set crReport = crApp.OpenReport("C:\doxa\rptValoracionCurso.rpt", 1)
crReport.Database.SetDataSource rAdoRs
CRViewer.ReportSource = crReport
CRViewer.ViewReport
Screen.MousePointer = 0 'vbDefault
Exit Sub
ErrHandler:
If Err.Number = -2147206461 Then
MsgBox "El archivo de reporte no se encuentra, restáurelo de los discos de instalación", _
vbCritical + vbOKOnly
Else
MsgBox Err.Description, vbCritical + vbOKOnly
End If
mflgContinuar = False
Screen.MousePointer = 0 'vbDefault
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set crReport = Nothing
Set crApp = Nothing
End Sub
Necesito que me respondas urgentemente gracias por tu ayuda.
He probado el siguiente código y funciona:
Private Sub Comando1_Click()
Dim crReport As CRAXDRT.Report
Dim crApp As New CRAXDRT.Application
Set crReport = crApp.OpenReport("C:\ruta\fichero.rpt", 1)
CRViewer.ReportSource = crReport
CRViewer.ViewReport
End Sub
Es cierto que en el editor VBA no se nos sugiere la propiedad ReportSource al escribir el código, pero la acepta y es válida.
Otra cosa que he notado es que no podrás visualizar el informe si tienes algo en modo edición, puesto que CR intenta abrir una conexión independiente para el informe, y cuando editas algo desde Access la base de datos se queda en modo exclusivo, con lo cual falla la visualización del informe. Cierra todas las ventanas en edición en Access y entonces si funciona.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas