crystal report 8 y fuente de datos

Juashan
02 de Diciembre del 2003
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.

KayKay
02 de Diciembre del 2003
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