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:
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 AccessModule 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.
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
Comentarios
Publicar un comentario