Reportes desde Mysql en Vb.net
Escrito en Julio 16, 2009 por Alex
Les pongo un ejemplo para crear reportes en Crystal reports utilizando una base de datos de Mysql.
Utilizaremos una base de datos llamada “Mibase” con una tabla llamada “alumnos” con tres campos “nombre”, “apellidos” calificacion” .
Para este ejemplo lo primero que necesitamos hacer es crear un archivo XML con la estructura de la tabla. Para esto utilizamos el Dataset con su método WriteXml
'importar espacios de nombres Imports MySql.Data Imports MySql.Data.MySqlClient 'dentro de la clase Dim Ds As New DataSet Dim Con As New MySqlConnection Dim Cmd As New MySqlCommand Dim Da As New MySqlDataAdapter 'Esto puede estar dentro de un botón o dentro del procedimiento Load Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'variable cadena de conexión Con.ConnectionString = "server=localhost;uid=root;password=mipass;database=mibase" cmd.Connection = Con Con.Open() 'Aquí escribimos la query de la tabla que necesitamos con los datos que necesitamos Cmd.CommandText = "select * from alumnos" Da.SelectCommand = cmd Da.Fill(Ds) 'aqui es donde creamos el archivo XML en la unidad C Ds.WriteXml("C:\productos.xml", XmlWriteMode.WriteSchema) End Sub
Ahora ya tenemos un archivo XML en la ruta que escribimos. Lo siguiente que tenemos que hacer es agregar las referencias a crystal Reports.
Para agregar las referencias Crystal reports nos vamos al menu Proyecto-Agregar referencia…
y en la pestaña de .Net seleccionamos las siguientes:
CrystalDecisions.CrystalReports.Engine
CrystalDecisions.ReportSource
CrystalDecisions.Shared
CrystalDecisions.VsDesigner
CrystalDecision.Web
CrystalDesicions.Windows.Forms
Agregamos un segundo formulario llamado form2 donde insertaremos el reporte, despues en el cuadro de herraminetas agregamos el componente CrystalReportViewer. Le ponemos de nombre CRV1
Tambien insertamos un CrystalReportDocument al que llamaremos CR1.
Dentro ya del CrystalReportDocument nos vamos al explorador de campos y damos clic derecho sobre el, dentro del menu que aparece damos clic en el Asistente de Base de datos.
Ya dentro del asistente desplegamos la carpeta “Crear nueva conexión” dentro de esta desplegamos “ADO.Net”. Se abrirá una nueva ventana donde nos pidde la ruta del archivo; es ahi donde le diremos donde se encuentra el archivo que acabamos de crear de tipo XML. Damos clic en finalizar.
Despues seleccionamos la tabla que apareció y la mandamos con el boton “>” a la columna de la derecha para agregarla y damos clic en aceptar.
Como podemos ver ya tenemos agregados los campos a la lista desplegable en el explorador de campos. Solo nos queda arrastrar al contenido del reporte los campos y acomodarlos a nuestro gusto.
Ahora para llamar al reporte escribimos estas lineas en el form2:
mports System.Data Imports MySql.Data.MySqlClient Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.ReportSource Imports CrystalDecisions.Shared Public Class Form2 Dim Ds As New DataSet Dim Con As New MySqlConnection("server=localhost;uid=root;password=mipass;database=alumnos") Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim Cmd As New MySqlCommand(sql, Con) Dim Da As New MySqlDataAdapter(Cmd) Dim myReport As New ReportDocument Da.Fill(Ds) myReport.Load(My.Application.Info.DirectoryPath & "\CR1.rpt") myReport.SetDataSource(Ds) CRV1.ReportSource = myReport End Sub Public Function LeerColumna(ByVal nTabla As String, ByVal nColumna As String, ByVal Valores As ComboBox) As Boolean Dim Sql As String = "SELECT * FROM " & nTabla Dim DR As MySqlDataReader Dim Comando As New MySqlCommand("SELECT " & nColumna & " FROM " & nTabla, Con) Try If Not Con Is Nothing Then Con.Close() Con.Open() DR = Comando.ExecuteReader() If DR.HasRows = False Then Return Nothing Exit Function End If While DR.Read() Valores.Items.Add(DR(nColumna)) End While Return True Catch ex As Exception Return False Finally DR = Nothing Comando = Nothing Con.Close() End Try End Function End Class
Con esto desde el form1 llamamos al form2 con form2.show() y se mostrara el reporte.
Si te gusto este artículo Suscribete a nuestro feed






orales…
te la rifastes, bueno dejame decirte q solo falto unas capturas del programa para ver q tal esta
entendido desde el principio…
eres un genio y no es por alavarte ni dada por el estilo estuve buscando algo similar pero no entendi nada asta en tu post
mil gracias…
De nada…
Hola que tal otra vez teniendo problemasen la linea
myReport.Load(My.Application.Info.DirectoryPath & “\CR1.rpt”)
me dice que no se ha declarado ningun nombre &
esto se repite en todas las lineas que lo contengan
Ese error debe dartelo porque no has declarado la variable myreport.
Tambien checa la importtacion de espacios de nombres a crystal reports.
Hola Alex, fijate que dentro de cristalreportdocument no encuentro donde esta el asistente de base de datos para agregar el archivo xml, solo puedo agregar un archivo .rpt, Gracias
Disculpa, ya lo encontre, Gracias.
Alex disculpa, pero tengo el mismo problema de Manuel, dice que no se ha declarado &, como declaramos la variable myreport?, Gracias
Dice que amp no se ha declarado y el ; dice que es caracter no valido.
Hola que tal alex tengo un problema talvez me puedas ayudar
en un formulario tengo campos texbox, los valores de estos campos los quiero enviar a un reporte ya editado este reporte no tiene ninguna conexion a ninguna BD.
anteriormente tenia un formulario con un crystalreportviewer para cada reporte utilizaba este codigo para cargar los datos de los texbox
Dim importar As CrystalDecisions.CrystalReports.Engine.TextObject
importar = SATFRONT1.Section1.ReportObjects.Item(”txtdescrip1″)
importar.Text = FrmFormatos.TextBox1.Text
y funcionaba por que en el crystalreportviewer ya tenia cargado el reporte(SATFRON.rpt) pero ahora en mi aplicacion tengo un menu donde se seleccione el reporte que quiero ver y este se carguen en un solo formulario con un solo crystalreportviewer claro que para lograrlo tengo que validar que boton del menu se selecciono todo funciona con este codigo
If FrmFormatos.VistaPreviaToolStripMenuItem.Checked = True Then
FrmFormatos.VistaPreviaToolStripMenuItem.Checked = False
CrvVistaPre.ReportSource = “C:\satfront.rpt”
End If
mi problema es que ya no puedo visualizar los datos de los texbox en el el reporte porque el codigo que ocupaba para cargar los datos ya no funciona por que ya no tengo cargado el reporte (SATFRONT.rpt) en el crystalreportviewer sino que la carga del archivo se hace en tiempo de ejecucion y no se como modificar el codigo de carga de los datos de los textbox para que funcione con el reporte que se cargó despues de la seleccion
espero haber explicado bien mi problema y que me puedas ayudar
Rodrigo:
Utiliza parametros
Si necesitas un ejemplo te lo pongo más tarde.
Saludos.
Hugo:
Fijate que la ruta donde esta el archivo RPT sea correcta, generalmente necesitas meterlo en la carpeta Release o Debug.
Saludos.
Te agradeceria un ejemplo me seria de gran ayuda
Alex:
Coloque el archivo RPT en la carpeta Debug y no me funciona, el problema que no puedo correr el programa porque dice que no he declarado el nombre ” amp ” y el simbolo ” ; ” que esta al final de amp me dice que es un caracter no valido, todo lo tengo justo como esta explicado aqui, pero no se si falta agregar alguna referencia o libreria extra.
Saludos.
Hola que tal Hugo
intenta porner la ruta completa del archivo por ejemplo:
myReport.Load(”C:\Documents and Settings\HP_Propietario\Mis documentos\Visual Studio 2008\Projects\reportes\reportes\CR1.rpt”)
Ok Hugo:
El problema es que no tienes que poner ningun amp.
El código es así:
myReport.Load(My.Application.Info.DirectoryPath & “\CR1.rpt”)
Es decir:
Reemplaza & amp ; por solo el signo &
El problema se debe a un error en la manera en quie el fragmento de código se muestra aqui en la pagina web. Pero originalmente no es así. De hecho ya está corregido.
Gracias Alex, ahora si todo funciona muy bien.
–>Dim Cmd As New MySqlCommand(sql, Con)
Dim Da As New MySqlDataAdapter(Cmd)
en esa linea me tira un error, dice que “sql” no esta declarado o algo asi
Porque Sql es una variable de tipo String que debes tener declarada asi:
Dim Sql as string=”aqui va tu sentencia sql”
Muchas Gracias Alex. muy bueno tu blog
seria bueno que lo pongas en C# igual.. saludos! y gracias por compartir
vale muy bien lo felicito
vale enesta linea me sale error Dim Cmd As New MySqlCommand(sql, Con)
ayuda
Hay que importar los espacios de nomres al inicio de la clase o modulo.