none
Crystal Report Pide Parametro RRS feed

  • Pregunta

  • Hola Amigos,

    Tengo un problema medio raro.

    Estoy usando Crystal Report para diseños de informes, OC y etc. Pero cuando cargo el informe me pide parámetros por mas que ya los envío le adjunto el código. 

    Ahora si cancelo la ventana carga el reporte y selecciono "Establecer en nulo" también carga el reporte.

    Lo molestia es que aparece esta ventana y al usuario le crea dudas.

    Ventana que aparece

    Versión y driver

    Código

     Dim BEDocumentoCab As New BEDocumentoCab

        Public Sub New()

            InitializeComponent()

        End Sub

        Public Sub New(ByVal _BEDocumentoCab As BEDocumentoCab)

            Me.New()

            BEDocumentoCab.ParDocumentoCabID = _BEDocumentoCab.ParDocumentoCabID
            BEDocumentoCab.ParFormatosNombre = _BEDocumentoCab.ParFormatosNombre

        End Sub

        Private Sub Formulario_Load(sender As Object, e As EventArgs) Handles MyBase.Load

           Me.KeyPreview = True

            MostrarReporte()

        End Sub

        Public Sub Loguearse(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument)

            Try
                Dim myTables As Tables = myReportDocument.Database.Tables
                For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables
                    Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
                    myTableLogonInfo.ConnectionInfo = myConnectionInfo
                    myTable.ApplyLogOnInfo(myTableLogonInfo)
                Next
            Catch ex As Exception
                MsgBox(ex.Message.ToString & vbNewLine _
                       & myConnectionInfo.ServerName & vbNewLine _
                       & myConnectionInfo.DatabaseName & vbNewLine _
                       & myConnectionInfo.UserID & vbNewLine _
                       & myConnectionInfo.Password & vbNewLine _
                       & myReportDocument.FileName, MsgBoxStyle.Information, Me.Text & " Error Loguearse")
            End Try

        End Sub

        Private Sub setDBLOGONforREPORT(ByVal myconnectioninfo As ConnectionInfo)

            Try

                Dim mytableloginfos As New TableLogOnInfos()
                mytableloginfos = CrystalReportViewer1.LogOnInfo
                For Each myTableLogOnInfo As TableLogOnInfo In mytableloginfos
                    myTableLogOnInfo.ConnectionInfo = myconnectioninfo
                Next

            Catch ex As Exception
                MsgBox(ex.Message.ToString & vbNewLine _
                       & myconnectioninfo.ServerName & vbNewLine _
                       & myconnectioninfo.DatabaseName & vbNewLine _
                       & myconnectioninfo.UserID & vbNewLine _
                       & myconnectioninfo.Password, MsgBoxStyle.Information, Me.Text & " Error de conexión")
            End Try

        End Sub

    Private Sub MostrarReporte()

            Try

                Dim NombreReporte As String = ""
                Dim informe As New ReportDocument
                Dim Parametros As New ParameterFields()
                Dim PrimerParametro As New ParameterField()
                Dim myDiscreteValue As New ParameterDiscreteValue()

                If System.IO.Directory.Exists(My.Settings.Reportes) = False Then

                    MsgBox("La ruta de los reportes no existe o no tiene permisos: " & vbNewLine & My.Settings.Reportes, MsgBoxStyle.Critical, "Ruta no existe")
                    Me.Close()
                    Exit Sub

                End If

                NombreReporte = My.Settings.Reportes & BEDocumentoCab.ParFormatosNombre.Trim & ".rpt"

                If Not File.Exists(NombreReporte) Then
                    MsgBox("La ruta de los reportes no existe o no tiene permisos: " & vbNewLine & NombreReporte, MsgBoxStyle.Critical, "Ruta no existe")
                    Me.Close()
                    Exit Sub
                End If

                Dim miConexionInfo As ConnectionInfo = New ConnectionInfo()
                miConexionInfo.ServerName = My.Settings.server
                miConexionInfo.DatabaseName = My.Settings.bd
                miConexionInfo.UserID = My.Settings.user
                miConexionInfo.Password = My.Settings.pass
                miConexionInfo.Type = ConnectionInfoType.Query
                miConexionInfo.IntegratedSecurity = False

                setDBLOGONforREPORT(miConexionInfo)

                If informe.IsLoaded Then
                    informe.Close()
                    informe.Dispose()
                End If

                informe = New ReportDocument()

                Dim reportPath As String = NombreReporte
                informe.Load(reportPath)

                Loguearse(miConexionInfo, informe)

                PrimerParametro.ParameterValueType = ParameterValueKind.NumberParameter
                PrimerParametro.Name = "@ParDocumentoCabID"
                myDiscreteValue.Value = BEDocumentoCab.ParDocumentoCabID
                PrimerParametro.CurrentValues.Add(myDiscreteValue)
                Parametros.Add(PrimerParametro)

                CrystalReportViewer1.ParameterFieldInfo = Parametros
                Me.CrystalReportViewer1.Refresh()
                Me.CrystalReportViewer1.ReportSource = informe

            Catch ex As Exception

                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

            End Try

        End Sub


    Conocuica

    martes, 6 de noviembre de 2018 10:55

Respuestas

  • Hola mi estimado,

    El código estaba correcto el problema es que había comentado una linea al inicio del llamado del formulario como hijo nuevo.

    Lo descomente y funciono sin problemas fueron cosas de tipeo en mis pruebas. Muchas gracias.

           Try

                If Me.DGVDocumento.RowCount > 0 Then

                    Dim BEDocumentoCab As New BEDocumentoCab
                    BEDocumentoCab.ParDocumentoCabID = CInt(DGVDocumento.Rows(Me.DGVDocumento.CurrentRow.Index).Cells("ColumnID").Value)
                    BEDocumentoCab.ParFormatosNombre = DGVDocumento.Rows(Me.DGVDocumento.CurrentRow.Index).Cells("ColumnFormatos").Value
                    Dim OICotizacion As New OICotizacion(BEDocumentoCab)
                    OICotizacion.MdiParent = Me.MdiParent
                    OICotizacion.Show()

                End If

            Catch ex As Exception

                MsgBox(ex.Message.ToString, MsgBoxStyle.Critical, "Error al querer iniciar")

            End Try


    Conocuica

    • Marcado como respuesta Pablo Rubio lunes, 12 de noviembre de 2018 17:21
    jueves, 8 de noviembre de 2018 20:22

Todas las respuestas

  • Hola:

    Vamos a ver un par de cosillas.

    1) El valor del parámetro no veo donde se lo asignas, lo declaras pero no lo asignas un valor, mira de hacerlo así:

    CrReport.SetParameterValue("ParDocumentoCabID", "Valor del mismo")

    2) Vas a tener problemas cuando instales tu programa en otro ordenador o servidor, deberías acostúmbrate a trabajar con datasets tipados, los cuales no dependen de ninguna conexión, siendo el origen de datos que aplicar a el rpt el propio dataset.

    3) entiendo que si declaras el parámetro tal como te he puesto, no necesitas nada de esto.

    PrimerParametro.ParameterValueType = ParameterValueKind.NumberParameter
                PrimerParametro.Name = "@ParDocumentoCabID"
                myDiscreteValue.Value = BEDocumentoCab.ParDocumentoCabID
                PrimerParametro.CurrentValues.Add(myDiscreteValue)
                Parametros.Add(PrimerParametro)

    Todo esto sobraría, ya que si has declarado el parámetro en el rpt lo único que falta es asignarle por código un valor, tal como te lo he puesto.

    Venga, a ver si te funciona.

    Un saludo.

    Gemma

    • Propuesto como respuesta gemma_campillo domingo, 11 de noviembre de 2018 6:48
    martes, 6 de noviembre de 2018 11:45
  • Lo recepciono desde otro winform de una tabla donde el usuario selecciona el registro que necesita vizualizar

    Dim BEDocumentoCab As New BEDocumentoCab

     Public Sub New(ByVal _BEDocumentoCab As BEDocumentoCab)

            Me.New()

            BEDocumentoCab.ParDocumentoCabID = _BEDocumentoCab.ParDocumentoCabID
            BEDocumentoCab.ParFormatosNombre = _BEDocumentoCab.ParFormatosNombre

        End Sub

    y en esta parte del código lo asigno

                PrimerParametro.ParameterValueType = ParameterValueKind.NumberParameter
                PrimerParametro.Name = "@ParDocumentoCabID"
                myDiscreteValue.Value = BEDocumentoCab.ParDocumentoCabID
                PrimerParametro.CurrentValues.Add(myDiscreteValue)
                Parametros.Add(PrimerParametro)

                CrystalReportViewer1.ParameterFieldInfo = Parametros
                Me.CrystalReportViewer1.Refresh()
                Me.CrystalReportViewer1.ReportSource = informe

    Algún ejemplo que tengas o puede ser driver del SQLServer?


    Conocuica

    martes, 6 de noviembre de 2018 16:03
  • Hola  conocuica

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te recomiendo declarar o añadir el parámetro así:

    CrReport.SetParameterValue("imagen", string path)

    Gracias por usar los foros de MSDN.

    Juan Mondragón
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    martes, 6 de noviembre de 2018 17:41
    Moderador
  • Estimado Juan:

    La respuesta por ti aplicada ya consta en mi respuesta anterior.

    Un cordial saludo.

    Gemma

    • Propuesto como respuesta gemma_campillo domingo, 11 de noviembre de 2018 6:47
    jueves, 8 de noviembre de 2018 18:15
  • Hola mi estimado,

    El código estaba correcto el problema es que había comentado una linea al inicio del llamado del formulario como hijo nuevo.

    Lo descomente y funciono sin problemas fueron cosas de tipeo en mis pruebas. Muchas gracias.

           Try

                If Me.DGVDocumento.RowCount > 0 Then

                    Dim BEDocumentoCab As New BEDocumentoCab
                    BEDocumentoCab.ParDocumentoCabID = CInt(DGVDocumento.Rows(Me.DGVDocumento.CurrentRow.Index).Cells("ColumnID").Value)
                    BEDocumentoCab.ParFormatosNombre = DGVDocumento.Rows(Me.DGVDocumento.CurrentRow.Index).Cells("ColumnFormatos").Value
                    Dim OICotizacion As New OICotizacion(BEDocumentoCab)
                    OICotizacion.MdiParent = Me.MdiParent
                    OICotizacion.Show()

                End If

            Catch ex As Exception

                MsgBox(ex.Message.ToString, MsgBoxStyle.Critical, "Error al querer iniciar")

            End Try


    Conocuica

    • Marcado como respuesta Pablo Rubio lunes, 12 de noviembre de 2018 17:21
    jueves, 8 de noviembre de 2018 20:22