miércoles, 26 de noviembre de 2014

ReportViewer con base de datos Access


Hoy nos encontramos en un nuevo post, esta vez vamos a realizar un reporte(Report Viewer) para  un ejemplo en particular, cuya idea general surgió de  Jaime Escobar un seguidor de mis publicaciones, Bueno se trata del ingreso de datos personales de un individuo y que ahora lo vamos a presentar listo para la impresión:

NOTA: Para que el componente ReporViewer  aparezca en tu barra de objetos(controles)  debes usar Net Framework 3.5 en tu proyecto.

La captura del programa es esta:


El código:



Imports System.IO
Imports Microsoft.Reporting.WinForms

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            cmd.CommandType = CommandType.Text
            cmd.Connection = conn
            conectarse()
            sql = "INSERT INTO PROFESOR (IDPROFESOR, NOMBRES , APELLIDOS , DIRECCION , TELEFONO, CORREO, AREA , ASIGNATURA , IMAGEN , OBSERVACION) "
            sql += "values(@idprofesor,@nombres,@apellidos,@direccion,@telefono,@correo,@area,@asignatura,@imagen,@observacion)"
            MsgBox(sql)
            cmd.CommandText = sql
            cmd.Connection = conn
            cmd.Parameters.AddWithValue("@idprofesor", txtid.Text)
            cmd.Parameters.AddWithValue("@nombres", txtnombres.Text)
            cmd.Parameters.AddWithValue("@apellidos", txtapellidos.Text)
            cmd.Parameters.AddWithValue("@direccion", txtdir.Text)
            cmd.Parameters.AddWithValue("@telefono", txtelefono.Text)
            cmd.Parameters.AddWithValue("@correo", txtelefono.Text)
            cmd.Parameters.AddWithValue("@area", txtarea.Text)
            cmd.Parameters.AddWithValue("@asignatura", txtasignatura.Text)
            '  cmd.Parameters.AddWithValue("@imagen", PictureBox1.ImageLocation)
            cmd.Parameters.AddWithValue("@observacion", txtobservacion.Text)
            cmd.ExecuteNonQuery()
            cmd.Dispose()
            MsgBox("Registro Correctamente Insertado")
            limpiarcajas()
        Catch ex As Exception
            If ex.ToString.Contains("valores duplicados") Then
                MsgBox("El Registro Ya existe en la Base de Datos")
            Else
                MsgBox(ex.ToString)
            End If
        End Try
        conn.Close()
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs)
        With OpenFileDialog1
            .Title = "Seleccionar imagen"
            .Filter = "Archivos de imagen (*.jpg)|*.jpg"
            If .ShowDialog = DialogResult.OK Then
                '    PictureBox1.ImageLocation = .FileName
            End If
        End With
    End Sub
    Sub limpiarcajas()
        txtid.Clear()
        txtnombres.Clear()
        txtapellidos.Clear()
        txtdir.Clear()
        txtelefono.Clear()
        txtcorreo.Clear()
        txtarea.Clear()
        txtobservacion.Clear()
        txtasignatura.Clear()
        '     PictureBox1.ImageLocation = ""
    End Sub
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Try
            Try
                If txtid.Text = "" Then
                    MsgBox("Ingrese codigo para buscar", vbInformation)
                Else
                    Dim ds As New DataSet
                    Dim dt As New DataTable
                    Dim strSql As String = "SELECT * FROM profesor WHERE idprofesor = " & txtid.Text & ""
                    Dim adp As New OleDb.OleDbDataAdapter(strSql, conn)
                    ds.Tables.Add("tabla")
                    adp.Fill(ds.Tables("tabla"))
                    adp.Fill(dt)
                    '      grid.DataSource = dt
                    If dt.Rows.Count = 0 Then
                        MsgBox("Registro no existe")
                        limpiarcajas()
                    Else
                        Dim dtw As DataRow = dt.Rows(0)
                        txtnombres.Text = dtw("NOMBRES").ToString
                        txtapellidos.Text = dtw("APELLIDOS").ToString
                        txtdir.Text = dtw("DIRECCION").ToString
                        txtelefono.Text = dtw("TELEFONO").ToString
                        txtcorreo.Text = dtw("CORREO").ToString
                        txtarea.Text = dtw("AREA").ToString
                        txtasignatura.Text = dtw("ASIGNATURA").ToString
                        '      PictureBox1.ImageLocation = dtw("IMAGEN")
                        txtobservacion.Text = dtw("OBSERVACION").ToString
                        '     img.Text = PictureBox1.ImageLocation
                        '---------------------PREPARAR REPORTE--------------------
                        fuente.Name = "DataRprofesor" ' Nombre identico al que le di al dataset del report en tiempo de diseño
                        fuente.Value = ds.Tables(0)
                     
                        '---------------------PREPARAR REPORTE------------------
                    End If
                End If


            Catch ex As Exception
                ex.ToString()
            End Try
            conn.Close()
        Catch ex As Exception
        End Try
    End Sub
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Try
            If MessageBox.Show("¿Esta seguro eliminar el registro?", Me.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = DialogResult.Yes Then
                conectarse()
                cmd.CommandType = CommandType.Text
                cmd.Connection = conn
                sql = "DELETE FROM PROFESOR WHERE IDPROFESOR = " & CDbl(txtid.Text)
                cmd.CommandText = sql
                MsgBox("Rregistro eliminado satisfactoriamente", vbExclamation)
                cmd.ExecuteNonQuery()
            End If
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
        limpiarcajas()
        conn.Close()
    End Sub
    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        Try
            conectarse()
            cmd.CommandType = CommandType.Text
            cmd.Connection = conn
            sql = "UPDATE PROFESOR SET "
            sql += "NOMBRES ='" & txtnombres.Text & "',"
            sql += "APELLIDOS = '" & txtapellidos.Text & "',"
            sql += "DIRECCION = '" & txtdir.Text & "',"
            sql += "TELEFONO = '" & txtelefono.Text & "',"
            sql += "CORREO = '" & txtcorreo.Text & "',"
            sql += "AREA = '" & txtarea.Text & "',"
            sql += "ASIGNATURA= '" & txtasignatura.Text & "',"
            '  sql += "IMAGEN= '" & PictureBox1.ImageLocation & "',"
            sql += "OBSERVACION ='" & txtobservacion.Text & "'"
            sql += "WHERE IDPROFESOR =" & txtid.Text
            cmd.CommandText = sql
            cmd.ExecuteNonQuery()
            MsgBox("Socio actualizado satisfactoriamente", vbExclamation)
            limpiarcajas()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
        conn.Close()
    End Sub
    Private Sub txtid_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtobservacion.KeyPress, txtnombres.KeyPress, txtid.KeyPress, txtelefono.KeyPress, txtdir.KeyPress, txtcorreo.KeyPress, txtasignatura.KeyPress, txtarea.KeyPress, txtapellidos.KeyPress
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")
        End If
    End Sub
    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        Try
            limpiarcajas()
        Catch ex As Exception
        End Try
    End Sub

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


    End Sub

    Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click


        '------------------------EJECUTA EL REPORTE-----------

     
        '    ReportV.ReportViewer1.RefreshReport()

        ReportV.ReportViewer1.LocalReport.DataSources.Clear()

        ReportV.ReportViewer1.LocalReport.DataSources.Add(fuente)
        ReportV.ReportViewer1.LocalReport.ReportEmbeddedResource = "PROF.Profe.rdlc" 'exactamente como se llaman el proyecto y reporte

        'agrega la imagen
        '   ReportV.ReportViewer1.LocalReport.EnableExternalImages = True
        '  Dim Path As ReportParameter
        '    Path = New ReportParameter("Pimage", img.Text, True)
        '   ReportV.ReportViewer1.LocalReport.SetParameters(New ReportParameter() {Path})
        'Dim params(0) As ReportParameter
        'params(0) = New ReportParameter("Pimagen", PictureBox1.ImageLocation)
        'ReportV.ReportViewer1.LocalReport.SetParameters(params)
        'agrega la imagen
        ReportV.Show()
        '--------------------MUESTRA EL REPORTE--------------
    End Sub
-------------------------------------------------------------------------------------------------------
La conexion a la BD Access

Module Module1
    Public conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\JoseLuis\Documents\Visual Studio 2013\Projects\PROF\prueba.accdb")
    Public cmd As New OleDb.OleDbCommand
    Public dr As OleDb.OleDbDataReader
    Public sql As String = ""
    Public fuente As New ReportDataSource

          Public Sub conectarse()
        Try
            conn.Open()
            '    MsgBox("Conexion Exitosa")
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

End Module

Disculparan que este ejemplo no haya sido estructurado debidamente, pero bueno era para fines demostrativos... Con todo vamos a realizar el reporte para esto agregamos el mismo:



Ahora vamos a crear la data  miremos la captura: Con clic derecho sobre el Proyecto vamos  a Agregar --->Datos y agregamos  conjunto de datos el nombre que voy a poner es "DataP"

y listo, ahora nos falta agregar la tabla de datos y los campos, recordar que los campos deben ser idénticos a los realizado en la base de datos Access



Creamos la tabla " DataProfesor" los campos todo esto que realizas debes tenerlo muy en cuenta ya que mas adelante lo necesitaras!..

los campos todos




Ahora vamos a enlazar tipando los datos del reporte con esta data. Hacemos clic en el reporte, que por cierto debe venir quedándonos  asi o parecido...


 tu lo puedes crear. Creamos la conexión de datos... haciendo clic en los texbox del report con uno basta.

Seguimos..

El nombre de la Data puedes ponerle el que vez en la captura o puedes nombrarle el que tu quieras pero recuerda llevarlo presente, ahora asignemos campos a los textos del reporte.



Llegando a las ultimas tareas hacemos
dentro del boton" buscar por ID"  al final de la consulta colocamos

 '---------------------PREPARAR REPORTE--------------------
                        fuente.Name = "DataRprofesor"
 ' Nombre identico al que le di al dataset del report en tiempo de diseño
                        fuente.Value = ds.Tables(0)
 '---------------------PREPARAR REPORTE------------------


 y en el boton "Reporte" colocamos


Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
        '------------------------EJECUTA EL REPORTE-----------

        ReportV.ReportViewer1.LocalReport.DataSources.Clear()
        ReportV.ReportViewer1.LocalReport.DataSources.Add(fuente)
        ReportV.ReportViewer1.LocalReport.ReportEmbeddedResource = "PROF.Profe.rdlc" 'exactamente como se llaman el proyecto y reporte
        ReportV.Show()
        '--------------------MUESTRA EL REPORTE--------------
    End Sub

Por ultimo creamos un nuevo formulario llamado ReporV para alojar el reporte



Al final en el Form  ReporV

Imports Microsoft.Reporting.WinForms

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

        Me.ReportViewer1.RefreshReport()
        Me.ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout)
        Me.ReportViewer1.ZoomMode = ZoomMode.Percent
        Me.ReportViewer1.ZoomPercent = 100
    End Sub

Al final la salida de nuestro reporte



Y eso es todo cualquier pregunta y/o comentario del proyecto  a mi correo, y una vez mas gracias a
los que se suscribieron a mi pag. y reciben estos post.

Mi proyecto:

 https://mega.co.nz/#!NINnUYTZ!2CB6CjSYWIm3mxCRZ4XuOvFLZFSLEGnL6CtBMDDIrqE

Mi proyecto modificado(Agregado con parámetros)

https://mega.co.nz/#!4JVRBZRY!YGk3qGtWQbsVvg9CNeEysm1JOJv3_M2O2NgkW5dQrKo