Crystal Report - error en parametro al cargar archivo rpt desde vb

 
Vista:

error en parametro al cargar archivo rpt desde vb

Publicado por Victor Sanchez (1 intervención) el 21/04/2010 20:01:49
Hola q tal,

queria ver si alguien me saca de mi duda, tengo un formulario q tiene el control CrystalReportViewer1 lo configuro como pueden ver para que cargue un rpt hecho en crystal reports x y un stored procedure con dos parametros @Folio y @Empresa, los parametros se agregan bien la ruta tambien todo para ser estar bien, de hecho en el debug reviso el ParameterFieldInfo y tienes los parametros y los valores del los mismos, pero cuando carga el reporte me dice q falta el valor para @Folio, error lo mada el crystal desde el sql server 2000 q podra ser el error.

Este el codigo con el q mando llamar el formulario:

Dim arr(1) As String

arr(0) = "@Folio;" + TxtFolio.Text
arr(1) = "@Empresa;" + Empresa

FrmCrystal.conectar(Servidor, BaseDatos, Usuario, Contraseña)

FrmCrystal.rutaRpt = System.AppDomain.CurrentDomain.BaseDirectory
FrmCrystal.par = arr
FrmCrystal.nombrereporte = "Contrato.rpt"

FrmCrystal.Show()

y este el codigo del form FrmCrystal:


Imports CrystalDecisions.CrystalReports
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.ReportSource
Imports CrystalDecisions.Shared
Imports CrystalDecisions.Windows

Public Class FrmCrystal

Private Shared loginfo As CrystalDecisions.Shared.ConnectionInfo
Public exportar_mail As Boolean
Public rutaRpt As String
Public stillOpen As Boolean
Public custTitle As String

Public nombrereporte As String
Public par() As String

Private Sub FrmCrystal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim rpt As New ReportDocument

With CrystalReportViewer1

If rutaRpt.Trim.Length = 0 Then

rpt.Load(nombrereporte, OpenReportMethod.OpenReportByDefault)

ElseIf Mid(rutaRpt.Trim, rutaRpt.Trim.Length, 1) = "\" Then

rpt.Load(rutaRpt & nombrereporte, OpenReportMethod.OpenReportByDefault)

Else

rpt.Load(rutaRpt & "\" & nombrereporte, OpenReportMethod.OpenReportByDefault)

End If

logonrpt(rpt)

'Configurar aquí cualquier opción de exportación

Dim opt As New ExportOptions

opt = rpt.ExportOptions

'Configurar aquí cualquier opción de impresión

Dim prn As PrintOptions

prn = rpt.PrintOptions

If par.Length > 0 Then
.ParameterFieldInfo = genpar(rpt, par)
End If

If par.Length > 0 Then
genpar2(rpt, par)
End If

.ReportSource = rpt

'Visualizar el reporte en una ventana nueva

Me.Text = "Reporte"

End With
End Sub

Public Shared Sub conectar(ByVal servidor As String, ByVal basedatos As String, ByVal usuario As String, ByVal password As String)
loginfo = New CrystalDecisions.Shared.ConnectionInfo

loginfo.ServerName = servidor
loginfo.DatabaseName = basedatos
loginfo.UserID = usuario
loginfo.Password = password

End Sub

Private Shared Function genpar(ByRef rpt As ReportDocument, ByVal ParamArray matriz() As String) As ParameterFields
Dim c As Long, p1, p2 As String, l As Integer

Dim parametros As New ParameterFields
Dim parametro As New ParameterField

Dim dVal As New ParameterDiscreteValue

For c = 0 To matriz.Length - 1

l = InStr(matriz(c), ";")

If l > 0 Then

p1 = Mid(matriz(c), 1, l - 1)

p2 = Mid(matriz(c), l + 1, Len(matriz(c)) - l)

parametro = New ParameterField()

parametro.ParameterFieldName = p1

dVal = New ParameterDiscreteValue()
If p1 = "@Folio" Then
dVal.IsRange = False
dVal.Value = CInt(p2)
Else
dVal.Value = p2
End If

parametro.CurrentValues.Add(dVal)

parametros.Add(parametro)

End If

Next

Return (parametros)

End Function

Private Shared Sub genpar2(ByRef rpt As ReportDocument, ByVal ParamArray matriz() As String)
Dim c As Long, p1, p2 As String, l As Integer

Dim Valores As New ParameterValues
Dim dVal As New ParameterDiscreteValue

For c = 0 To matriz.Length - 1

l = InStr(matriz(c), ";")

If l > 0 Then

p1 = Mid(matriz(c), 1, l - 1)

p2 = Mid(matriz(c), l + 1, Len(matriz(c)) - l)

dVal = New ParameterDiscreteValue()
If p1 = "@Folio" Then
dVal.IsRange = False
dVal.Value = CInt(p2)
Else
dVal.Value = p2
End If

Valores.Add(dVal)
rpt.DataDefinition.ParameterFields(CInt(c)).ApplyCurrentValues(Valores)
rpt.DataDefinition.ParameterFields(CInt(c)).ApplyDefaultValues(Valores)

End If

Next

End Sub

Private Shared Sub logonrpt(ByRef reporte As ReportDocument)

Dim crtableLogoninfos As New TableLogOnInfos
Dim crtableLogoninfo As New TableLogOnInfo
Dim crConnectionInfo As New ConnectionInfo
Dim CrTables As Tables
Dim CrTable As Table

crConnectionInfo = loginfo

CrTables = reporte.Database.Tables

For Each CrTable In CrTables

crtableLogoninfo = CrTable.LogOnInfo

crtableLogoninfo.ConnectionInfo = crConnectionInfo

CrTable.ApplyLogOnInfo(crtableLogoninfo)

Next

End Sub

End Class
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder