crystalreport

Cuestiones y dudas acerca de lenguajes de programación diversos.

Moderador: Moderadores

Avatar de Usuario
oky

crystalreport

Mensaje por oky » Lun May 03, 2004 6:12 pm

tengo un problema cuando intento abrir un informe me da un error de que no puede abrir la base de datos y no encuentra su localizacion cuando si que le paso bien la ruta. esto solo pasa en algunos equipos ya que en otros funciona bien. respt. okyloky@hotmail.com

Avatar de Usuario
xareas

respuesta

Mensaje por xareas » Jue Nov 18, 2004 9:21 pm

debe iniciar sesion en la base de datos, usada setdatabaselogon, si estas usando algun lenguaje de .NET.

si esta usando COM(VB6), tendria que ver con que componente estas accediendo. este seria un ejemplo usando el crdesigner
'devuelve verdadero si se logra imprimir el reporte
'en caso contrario devuelve falso
Public Function PrintReport(Optional NameRpt As String, Optional RecordSelect As String, _
Optional Salida As RptOutPut = Pantalla, Optional TitleReport As String, Optional ODBCName As String) As Boolean
Dim AppCr As New CRAXDRT.Application 'Aplicacion de Crystal Report
Dim DataCr As CRAXDRT.DatabaseTable 'Tabla contenida en la base de datos
Dim CRXSections As CRAXDRT.Sections
Dim CRXSubreportObj As CRAXDRT.SubreportObject
Dim CRXReportObjects As CRAXDRT.ReportObjects
Dim CRXSubReport As CRAXDRT.Report
Dim CRXReportObject As Object
Dim CrxTable As CRAXDRT.DatabaseTable
Dim CRXSection As CRAXDDRT.Section
Dim i As Long

On Error GoTo MskPrintReport

'Si el nombre del reporte no fue pasado
If NameRpt = "" Then
mNameReport = mNameReport 'ruta del reporte
NameRpt = mNameReport
Else
Me.NameReport = NameRpt
End If

'verificar que el reporte se encuentra en la ruta especifica
If Dir(NameRpt, vbArchive) = "" Then
Messagebox.Show "No encuentro el reporte en la ruta " & NameRpt & _
" verifique que el reporte existe y que la carpeta de reportes establecida es la correcta" & _
" ,de clic en el menu de herramientas y luego elija la opción configuración", vbOKOnly, vbCritical
PrintReport = False 'no se pudo imprimir
Exit Function
End If

If NameRpt = "" Then
Messagebox.Show "El nombre del reporte no puede ser vacio, error interno del visor simose", vbOKOnly, vbCritical
Exit Function
End If

'Abrir el reporte
Set Rpt = AppCr.OpenReport(NameRpt)
'.ConvertNullFieldToDefault = True

'Inicializa las conexcion al origen de datos del servidor
For i = 1 To Rpt.Database.Tables.Count

Select Case mTypeConnection 'inicia sesion en el servidor de base de datos
Case SQLSERVER2000
Rpt.Database.Tables(i).SetLogOnInfo mServerName, mDatabase, mUser, mPassword
Rpt.Database.Tables(i).TestConnectivity '//establece la conectividad
Case ODBCDATASOURCE
Rpt.Database.Tables(i).SetLogOnInfo mODBCDsnName
Case ORACLESERVER
Rpt.Database.Tables(i).SetLogOnInfo mODBCDsnName
End Select
Next



'Abre los subreportes
Set CRXSections = Rpt.Sections
'Busca en las secciones si existen subreportes y inicia sesion en la tabla
For Each CRXSection In CRXSections
Set CRXReportObjects = CRXSection.ReportObjects
For Each CRXReportObject In CRXReportObjects
If CRXReportObject.Kind = crSubreportObject Then
Set CRXSubreportObj = CRXReportObject
Set CRXSubReport = CRXSubreportObj.OpenSubreport
For i = 1 To CRXSubReport.Database.Tables.Count
Set CrxTable = CRXSubReport.Database.Tables(i)
Select Case mTypeConnection 'inicia sesion en el servidor de base de datos
Case SQLSERVER2000
CrxTable.SetLogOnInfo mServerName, mDatabase, mUser, mPassword
Case ODBCDATASOURCE
CrxTable.SetLogOnInfo mODBCDsnName
Case ORACLESERVER
CrxTable.SetLogOnInfo mODBCDsnName
End Select
Next
End If
Next
Next


'luego se aplica el Filtro al reporte
If Not mRecordSelection = "" Then
Rpt.RecordSelectionFormula = mRecordSelection
Else
If Not mSqlQuery = "" Then
Rpt.SQLQueryString = mSqlQuery
End If
End If

'Titulo del reporte o razon social es buena practica definirle esto antes de
'mandar a llamar el reporte para evitar la sobrecarga que implica consultar el
'registro del sistema operativo
If mAuthor = "" Then
Dim Reg As New ReadSetConfig 'clase para leer la configuracion del simose
Dim Rz As String 'contiene el nombre de la razon social configurada
Rz = Trim(Reg.ReadPropertySIMOSE("Razon", False))
'//si la razon social no pudo ser leeida se deja la predeterminada del reporte
If Not Rz = "" Then
mAuthor = Rz 'razon social configurada al instalar el sistema
Else
mAuthor = Rpt.ReportAuthor 'establecido por defecto en el reporte
Rpt.DisplayProgressDialog = True
End If
End If

Rpt.ReportAuthor = Trim(mAuthor)

mComments = Rpt.ReportComments
If Not Rpt.ReportTitle = "" Then
mTitleReport = Rpt.ReportTitle
End If


'establecer el subtitulo en el caso que sea necesario
If Not mSubTitleReport = "" Then
Rpt.ReportComments = Me.SubTitleReport
End If

'Establecer Formulas Cambio
If IsArray(mFormulas) Then
For i = LBound(mFormulas) To UBound(mFormulas)
For X = 1 To Rpt.FormulaFields.Count
If "{@" & mFormulas(i, 0) & "}" = Rpt.FormulaFields(X).Name Then
Rpt.FormulaFields(X).Text = "'" & mFormulas(i, 1) & "'"
End If
Next X
Next i
'cFormulas = Rpt.FormulaFields(X).Text
End If

mIsInitialize = True
'Dependiendo la salida
Select Case Salida
Case 1 'Salida a la pantalla
With UserControl.Vista
.ReportSource = Rpt 'Asignacion del reporte
.ViewReport
.Zoom ZoomInit
End With
Case 2
Rpt.PrinterSetup UserControl.hWnd
Rpt.PrintOut True 'Imprimir le permite selecionar el rango

Case 3
Rpt.PrintOut False
Case 4
MsgBox "No Implementada Aun", vbCritical
End Select

PrintReport = True
Exit Function
MskPrintReport:
PrintReport = False
RaiseEvent ErrorRpt(Err.Number, Err.Description)
End Function

Responder