crystal report 8 y fuente de datos
Hola queria consultar si alguien esta mas suelto que yo en el manejo del crystal report 8 yo manejaba antes el 7.
El problema es que no puedo especificar cual es la fuente de datos que usa el informe.
Yo hago el informe añdiendo un diseñador, luego he logrado pasarle la clausula where con
m_Report.RecordSelectionFormula = strWhere
y el campo por el que ordenar con
m_Report.RecordSortFields.Add m_Report.Database.Tables(x).Fields.Item(y), IIf(InStr(1, strOrder, "DESC"), crDescendingOrder, crAscendingOrder)
aunque esto ultimo funciona pero no me parece lo mas correcto.
El problema es que siempre coge la base de datos con la que diseñe el informe, es decir, que si yo he movio la base de datos la hemos cagao.
He probao con m_report.database.setdatasource pero na de na.
Acostumbrao al 7 el 8 con esto del diseñador no me mola mucho pero si alguien pudiera enviarme algun ejemplillo o algo se lo agradeceria mucho.
Bueno gracias y hasta luego.
El problema es que no puedo especificar cual es la fuente de datos que usa el informe.
Yo hago el informe añdiendo un diseñador, luego he logrado pasarle la clausula where con
m_Report.RecordSelectionFormula = strWhere
y el campo por el que ordenar con
m_Report.RecordSortFields.Add m_Report.Database.Tables(x).Fields.Item(y), IIf(InStr(1, strOrder, "DESC"), crDescendingOrder, crAscendingOrder)
aunque esto ultimo funciona pero no me parece lo mas correcto.
El problema es que siempre coge la base de datos con la que diseñe el informe, es decir, que si yo he movio la base de datos la hemos cagao.
He probao con m_report.database.setdatasource pero na de na.
Acostumbrao al 7 el 8 con esto del diseñador no me mola mucho pero si alguien pudiera enviarme algun ejemplillo o algo se lo agradeceria mucho.
Bueno gracias y hasta luego.
Yo cuando trabajaba con la 8 y ahora que trabajo con la 9, siempre he utilizado los archivos TTX ( no txt) de definicion de campos.
Que me permite :
1 - Tener el report desconectado de la base de datos.
2 - Poder realizar Selects muy complejas ( con sintaxis Crystal es un coñazo y tiene limitaciones )
3 - Trabajar con cualquier base de datos ya que encapsulo con ADO.
El funcionamiento es que creo el archivo de definicion de campos, donde digo los campos el tipo y la longitud y lo enlazo al report, despues con esta funcion cargo el report en visual basic, esto lo hago con un OCX que implanta CrystalReport que es CRViewer que lo tengo en un formulario, el cual instancio las veces que quiero, en mi empresa utilizamos esto , es lo mas flexible que hay.
Public Function EjecutarReport9(SentSQL As String, PathReport As String, Destino As Informe, Conexion As ADODB.Connection, Parametros() As Variant, ByVal Caption As String, Optional Updatear As Boolean = False)
Dim rs As ADODB.Recordset
Dim MForm As Object
Dim i As Integer
Dim r As Object
Dim OBJAPP As New CRAXDDRT.Application
Dim OBJREPORT As New CRAXDDRT.Report
'-- Variables para los parametros
Dim CrxParam As CRAXDRT.ParameterFieldDefinition
Dim CrxParameters As CRAXDRT.ParameterFieldDefinitions
Set rs = gBD.AbrirRS(SentSQL, RsLectura)
If rs.EOF = False Then
Set OBJREPORT = OBJAPP.OpenReport(PathReport)
Call OBJREPORT.Database.Tables(1).SetDataSource(rs, 3)
'Parametros
'Se asigna los valores a los límites (en el rpt)
Set CrxParameters = OBJREPORT.ParameterFields
For Each CrxParam In CrxParameters
For i = 0 To UBound(Parametros)
If CrxParam.Name = Parametros(i, 0) Then
CrxParam.AddCurrentValue Parametros(i, 1)
Exit For
End If
Next i
Next
OBJREPORT.ReadRecords
rs.Close
Set rs = Nothing
If Destino = Pantalla Then
Set MForm = New frmCRV
MForm.Captio = Caption
MForm.CRV.ReportSource = OBJREPORT
MForm.CRV.ViewReport
MForm.Show
Set MForm = Nothing
Else
Call OBJREPORT.PrintOut(False)
End If
EjecutarReport9 = True
Else
rs.Close
Set rs = Nothing
EjecutarReport9 = False
End If
Set OBJREPORT = Nothing
Set OBJAPP = Nothing
Exit Function
End Function
Que me permite :
1 - Tener el report desconectado de la base de datos.
2 - Poder realizar Selects muy complejas ( con sintaxis Crystal es un coñazo y tiene limitaciones )
3 - Trabajar con cualquier base de datos ya que encapsulo con ADO.
El funcionamiento es que creo el archivo de definicion de campos, donde digo los campos el tipo y la longitud y lo enlazo al report, despues con esta funcion cargo el report en visual basic, esto lo hago con un OCX que implanta CrystalReport que es CRViewer que lo tengo en un formulario, el cual instancio las veces que quiero, en mi empresa utilizamos esto , es lo mas flexible que hay.
Public Function EjecutarReport9(SentSQL As String, PathReport As String, Destino As Informe, Conexion As ADODB.Connection, Parametros() As Variant, ByVal Caption As String, Optional Updatear As Boolean = False)
Dim rs As ADODB.Recordset
Dim MForm As Object
Dim i As Integer
Dim r As Object
Dim OBJAPP As New CRAXDDRT.Application
Dim OBJREPORT As New CRAXDDRT.Report
'-- Variables para los parametros
Dim CrxParam As CRAXDRT.ParameterFieldDefinition
Dim CrxParameters As CRAXDRT.ParameterFieldDefinitions
Set rs = gBD.AbrirRS(SentSQL, RsLectura)
If rs.EOF = False Then
Set OBJREPORT = OBJAPP.OpenReport(PathReport)
Call OBJREPORT.Database.Tables(1).SetDataSource(rs, 3)
'Parametros
'Se asigna los valores a los límites (en el rpt)
Set CrxParameters = OBJREPORT.ParameterFields
For Each CrxParam In CrxParameters
For i = 0 To UBound(Parametros)
If CrxParam.Name = Parametros(i, 0) Then
CrxParam.AddCurrentValue Parametros(i, 1)
Exit For
End If
Next i
Next
OBJREPORT.ReadRecords
rs.Close
Set rs = Nothing
If Destino = Pantalla Then
Set MForm = New frmCRV
MForm.Captio = Caption
MForm.CRV.ReportSource = OBJREPORT
MForm.CRV.ViewReport
MForm.Show
Set MForm = Nothing
Else
Call OBJREPORT.PrintOut(False)
End If
EjecutarReport9 = True
Else
rs.Close
Set rs = Nothing
EjecutarReport9 = False
End If
Set OBJREPORT = Nothing
Set OBJAPP = Nothing
Exit Function
End Function
