Buscar en Google

Busca en Todo Vb-Net

Búsqueda personalizada

miércoles, 21 de julio de 2010

Uso de crystal reports en VB.NET [Via ODBC]

Uso de crystal reports en VB.NET

Bueno... tomando en cuenta todos los problemas que puede llegar a dar el manejo de reportes, es viable apuntar que tanto CrystalRepots Como .Net hacen una gran pareja para el trabajo ordenado y confiable.

Iniciemos

1- Elaboro un reporte fuera de .NET [osea desde el mismo CR] , el cual lleva absolutamente todo lo que necesito osea que si lo ejecuto desde CR este dara los resultados deseados, el reporte puede haber sido creado partiendo de un procedimiento almacenado[SP] o directamente de un grupo de tablas o vistas.

Ahora lo que necesitamos es que .Net deploye el reporte previamente elaborado.

Para el ejemplo elabore un reporte el cual fue hecho a partir de un SP [procedimiento almacenado], el cual solicita tres parametros, por ende dichos parametros tengo que enviarlos desde .Net para que sean a su vez capturados por CR y los pueda procesar.

parametros solicitados por el reporte



OK. OK.

Ahora en VB.Net crearemos un nuevo proyecto y en el formulario de inicio [Form1] agregaremos un control CrystalReportViewer1, en la propiedad Dock le colocamos Fill



Espacios de nombre utilizados:

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared


En el evento load del Fom1 colocaremos el siguiente codigo.
' ---------------------------By CesarL--------------
' SETEANDO CONEXION PARA CR
Dim oConexInfo As ConnectionInfo
Dim oListaTablas As Tables
Dim oTabla As Table
Dim oTablaConexInfo As TableLogOnInfo
' instanciar objeto para guardar datos de conexión
oConexInfo = New ConnectionInfo()
oConexInfo.ServerName = "NombreServidor"
oConexInfo.DatabaseName = "NombreBaseDatosODBC"
oConexInfo.UserID = "Usuario"
oConexInfo.Password = "Password"

Dim rpt_id As New ReportDocument
' Comprobamos la existencia del reporte, si el reporte no existe abortamos si no continuamos
Dim Reporte As String = Application.StartupPath & "Reporte.rpt"
If Not IO.File.Exists(Reporte) Then
MessageBox.Show("No se encontro reporte:" & vbCrLf & _
Reporte, "Report Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.Close()
Exit Sub
End If
'Una vez verificado el reporte procedemos a cargarlo
rpt_id.Load(Reporte)
oListaTablas = rpt_id.Database.Tables
For Each oTabla In oListaTablas
oTablaConexInfo = oTabla.LogOnInfo
oTablaConexInfo.ConnectionInfo = oConexInfo
oTabla.ApplyLogOnInfo(oTablaConexInfo)
'ENVIANDO VARIABLE A CR
rpt_id.SetParameterValue("@FechaInicio", "VariableFechaInicial")
rpt_id.SetParameterValue("@FechaFin", "VariableFechaFinal")
rpt_id.SetParameterValue("@Company", "VariableCompany")
Me.CrystalReportViewer1.ReportSource = rpt_id



Con esto el form1 cuando cargue hara lo siguiente

1- Seteara las variables de conexion
2- Comprobara la existencia del reporte
3- Si el reporte existe este creara una instancia de tipo CR y enviara los parametros de conexion y los parametros del reporte
4- Finalmente cargara el reporte.


Si quieres los fuentes, dudas o comentrios: cesarlopez1909@gmail.com

3 comentarios:

  1. Reciba mis saludos cordiales, ha pasado ya 4 años después de esta publicación, pero resulta que estoy empezando con BV2012 y este no trae Cyrstal Reports integrado como si lo hací el vb2008, pero se puede agregar una cyrstal reports para esta versión, y se pueden realizar los reportes.
    mi consulta es: a un sin tener esta opción en el VB2012 se puede realizar esta conexión?.
    Gracias por tu respuesta

    ResponderEliminar
  2. Buenas Estimados, un gusto compartir con ustedes la solución para Uso de crystal reports en VB.NET 2012

    Imports CrystalDecisions.CrystalReports.Engine
    Imports CrystalDecisions.Shared


    Private Sub imprimir()

    RUTA = "..\..\Rpts\" & "rptutilidad" & ".rpt"
    Dim rpt_id As New ReportDocument
    Dim Reporte As String = RUTA 'Application.StartupPath & "Reporte.rpt"
    If Not IO.File.Exists(Reporte) Then
    MessageBox.Show("No se encontro reporte:" & vbCrLf & _
    Reporte, "Report Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Exit Sub
    End If

    rpt_id.Load(Reporte)

    Dim dsVEN As New DataSet
    Dim sql As String
    sql = "SELECT *from lis_utilidad where idhac = '" & NUMHAC & "' "
    Dim rsVEN As New MySqlDataAdapter(sql, Conexion)
    dsVEN.Tables.Add("ventas")
    rsVEN.Fill(dsVEN.Tables("ventas"))
    rpt_id.SetDataSource(dsVEN.Tables("ventas"))
    Me.crvfactura.ReportSource = rpt_id

    End Sub


    ResponderEliminar