none
Enlazar Store Procedure Myslq Vb.net RRS feed

  • Pregunta

  • Señores... es un gusto saludarlos de nuevo...

    Mi pregunta hoy es con respecto a como obtengo los datos generados en un Store Procedure con parametros creado en MySql y mostrarlos en un reporte de Crystal Reports.... pues resulta que al ejecutar el programa, me presenta mi reporte en blanco... Mi SP funciona perfectamente en el WorkBench de MySql, por lo que estoy seguro que esta bien creado... mi codigo es el siguiente:

    Try
                Dim reporte As New CRHPRep
    
                Using con As New MySqlConnection(MiCadenaConeccion)
    
                    con.Open()
    
                    CRVHojaProduccion.ReportSource = reporte
                    Using cmd As New MySqlCommand("SPHojaProduccion", con)
                        cmd.CommandText = "SPHojaProduccion"
                        cmd.CommandType = CommandType.StoredProcedure
                        cmd.Parameters.Add(New MySqlParameter("@HP", MySqlDbType.VarChar)).Value = HP
                        cmd.Parameters.Add(New MySqlParameter("@MyMn", MySqlDbType.VarChar)).Value = MyMn
                        Using sda As New MySqlDataAdapter(cmd)
                            Dim dt As New DataTable()
                            sda.Fill(dt)
                            reporte.SetDataSource(dt)
                            reporte.SetParameterValue("NomEmpresa", CType(DSEmpresa.Tables("Empresa").Rows(0).Item("NomLargo"), String))
                        End Using
    
                    End Using
    
                End Using

    El Store Procedure recibe dos parametros 

    Gracias por su ayuda...

    Trabajo con VS 2015, MySql y Crystal Reports en Windows 10

    El codigo del Store Procedure es el siguiente...

    CREATE DEFINER=`root`@`localhost` PROCEDURE `SPHojaProduccion`(in HP varchar(13), in MyMn varchar(3))
    BEGIN
    	SELECT pro.NomProducto As NombreProducto, 
    			dhp.IdHojaProduccion As IdHojaProduccion, 
    			dhp.CantidadxBatch As CantidadxBatch,
    			cli.Nombre as NombreCliente,
    			hp.Cliente as IdCliente, 
                hp.Status as StatusHP, 
                hp.NumBatch as NumBatch, 
                hp.DosisxBatch as DosisxBatch,
    			frm.tipo As Tipo,
    			frm.IdFormula As IdFormula,
                esp.NombreEspecie As NombreEspecie,
                etp.NombreEtapa As NombreEtapa
    		from hojasproduccion hp
    			inner join detallehojasproduccion dhp on (hp.IdHojaProduccion = dhp.IdHojaProduccion)
    			inner join clientes cli on (hp.Cliente = cli.IdCliente)
    			inner join formulas frm on (hp.IdFormula = frm.IdFormula)
    			inner join etapaespecies etp on (frm.Etapa = etp.IdEtapa)
    			inner join especies esp on (etp.Especie = esp.IdEspecie) and
    										(frm.Especie = esp.IdEspecie)
    			inner join productos pro on (dhp.IdProducto = pro.IdProducto)
    			
            where hp.IdHojaProduccion = HP and
    			  pro.EnFormula = MyMn;
    END


    • Editado wichortiz martes, 11 de julio de 2017 5:30
    martes, 11 de julio de 2017 5:28

Respuestas

  •      Intenta hacerlo asi :

    Try Dim reporte As New CRHPRep Using con As New MySqlConnection(MiCadenaConeccion) con.Open() CRVHojaProduccion.ReportSource = reporte Using cmd As New MySqlCommand("SPHojaProduccion", con) cmd.CommandText = "SPHojaProduccion" cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add(New MySqlParameter("@HP", MySqlDbType.VarChar)).Value = HP cmd.Parameters.Add(New MySqlParameter("@MyMn", MySqlDbType.VarChar)).Value = MyMn Using sda As New MySqlDataAdapter(cmd) Dim dt As New DataTable() sda.Fill(dt)

    If dt.Rows.Count>0 then reporte.SetDataSource(dt) reporte.SetParameterValue("NomEmpresa", CType(DSEmpresa.Tables("Empresa").Rows(0).Item("NomLargo"), String))

    Me.dt.ReportSource=reporte

            Else
                Me.dt.ReportSource=nothing
                MessageBox.Show("No hay Registros para mostrar", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            End If

    End Using End Using End Using


     
    • Propuesto como respuesta D A M N 1 S e l f martes, 11 de julio de 2017 13:52
    • Marcado como respuesta wichortiz viernes, 14 de julio de 2017 20:24
    martes, 11 de julio de 2017 13:52
  • Ups me equivoque

    Me.dt.ReportSource=reporte

    dt=CrystalReportViewer1 en tu diseño


    Pasa los puntos prro v:

    • Marcado como respuesta wichortiz viernes, 14 de julio de 2017 20:25
    jueves, 13 de julio de 2017 21:17

Todas las respuestas

  • Hola:

    Los pasos para visualizar un Fichero de Crystal Reports son los siguintes.
    1.- Crear 1 Form con 1 ReportDocument (rdInforme) y 1 CrystalReportViewer (crvInforme)
    2.- Cargar el ReportDocument con elfichero RPT con una instruccion como la siguiente
    Me.rdInforme.Load(PATH_FICHERO_RPT)
    3.- Mediante una consulta o procedimiento almacenado cargar 1 DataTable con los campos que tiene el diseño del fichero RPT
    4.- Cargar el ReportDocument con el DataTable con una instruccion como la siguiente
    Me.rdInforme.SetDataSource(DataTable)
    4.- Cargar el CrystalReportViewer con el ReportDocument con una instruccion como la siguiente
    Me.crvInforme.ReportSource = Me.rdInforme

    Un saludo desde Bilbo
    Carlos
    martes, 11 de julio de 2017 10:42
  •      Intenta hacerlo asi :

    Try Dim reporte As New CRHPRep Using con As New MySqlConnection(MiCadenaConeccion) con.Open() CRVHojaProduccion.ReportSource = reporte Using cmd As New MySqlCommand("SPHojaProduccion", con) cmd.CommandText = "SPHojaProduccion" cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add(New MySqlParameter("@HP", MySqlDbType.VarChar)).Value = HP cmd.Parameters.Add(New MySqlParameter("@MyMn", MySqlDbType.VarChar)).Value = MyMn Using sda As New MySqlDataAdapter(cmd) Dim dt As New DataTable() sda.Fill(dt)

    If dt.Rows.Count>0 then reporte.SetDataSource(dt) reporte.SetParameterValue("NomEmpresa", CType(DSEmpresa.Tables("Empresa").Rows(0).Item("NomLargo"), String))

    Me.dt.ReportSource=reporte

            Else
                Me.dt.ReportSource=nothing
                MessageBox.Show("No hay Registros para mostrar", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            End If

    End Using End Using End Using


     
    • Propuesto como respuesta D A M N 1 S e l f martes, 11 de julio de 2017 13:52
    • Marcado como respuesta wichortiz viernes, 14 de julio de 2017 20:24
    martes, 11 de julio de 2017 13:52
  • Hola

    Puedes revisar estos link

    Crystal Reports con DataSet tipado

    Crystal Reports con Store Procedure

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    miércoles, 12 de julio de 2017 9:50
  • Gracias AUTIS... fijate que en tu codigo, me presenta el siguiente error:

    "reportsource" no es un miembro de "Datatable"

    En la siguiente linea que tu me recomendaste: "Me.dt.ReportSource=reporte"

    que podria ser ??

    Gracias....

    • Marcado como respuesta wichortiz viernes, 14 de julio de 2017 20:24
    • Desmarcado como respuesta wichortiz viernes, 14 de julio de 2017 20:25
    jueves, 13 de julio de 2017 2:17
  • Ups me equivoque

    Me.dt.ReportSource=reporte

    dt=CrystalReportViewer1 en tu diseño


    Pasa los puntos prro v:

    • Marcado como respuesta wichortiz viernes, 14 de julio de 2017 20:25
    jueves, 13 de julio de 2017 21:17
  • Muchas gracias a todos.... he logrado resolver el problema como me ha planteado la solucion AUTIS... agradezco a todos por su atenciones....

    Hasta la proxima.

    viernes, 14 de julio de 2017 20:26