error en parametro al cargar archivo rpt desde vb
Publicado por Victor Sanchez (1 intervención) el 21/04/2010 20:06:57
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
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


0