08 noviembre 2012

Generando un reporte con Access y Visual Basic 2010

imprimiendoHace tiempo había descrito cómo generar cosas impresas con Visual Basic 2010 (Impresiones con Visual Basic 2010) y también había mencionado como usar un objeto DataTable para accesar los registros de una tabla hecha en Access (Access y Visual Basic 2005).  En esta ocasión uní las dos ideas discutidas en esos posts para hacer un programa que genera un reporte de lo que tiene una tabla.  Por eso, antes de continuar, te recomiendo que leas ambos artículos antes de continuar.

Básicamente lo que hago es usar los controles PrintDocument, PrintDialog, PageSetupDialog y PrintPreviewDialog para manejar la impresión, y uso un DataAdapter y DataTable para obtener los datos a mostrar en el reporte.

El evento que hace toda la “magia” es PrintDocument1_PrintPage que se ejecuta cuando se ejecuta el método Print de este control.  Creo variables para definir un tipo de letra (fuente), un DataTable para almacenar los registros (dt), una cadena para almacenar la consulta SELECT que devuelve los registros que deseo mostrar (strSQL) y la forma en que se va a conectar a la base de datos (connStr), un DataAdapter para llenar el DataTable (dataAdapter), un entero para controlar el ciclo para mostrar los registros (i) y para controlar la posición vertical donde voy a escribir cada línea de texto (y).  Uso dataAdapter para llenar dt (DataTable).  Después de esto, me deshago de dataAdapter (con Dispose lo envío al país de nunca jamás).

Después de eso, creo un nuevo tipo de letra y lo asigno al objeto fuente (les recomiendo que en sus reportes usen un tipo de letra de espacio fijo como Courier New o algo similar), dibujo una imagen (que está contenida en un control llamado picLogo), escribo los títulos de las columnas (donde dice Nombre y Sueldo), asigno el valor inicial vertical para la primera línea (y=200) y termino haciendo un ciclo que avanza por cada registro y lo escribe en la página en las coordenadas dadas (en son fijas para el eje horizontal y la variable y controla las coordenadas verticales).  Aquí está el código fuente de ese evento:

00_-_PrintDocument1

El otro botón que sufre un poco de cambio en comparación a lo que describí en Impresiones con Visual Basic 2010 es el botón que abre la ventana de propiedades de la impresora, o PrintDialog1.  La diferencia radica en el IF que uso para asignarle un documento.  Si no lo hago, cuando se presiona el botón Imprimir de esa ventana, no hace nada.  Ahora, al  poner PrintDocument1.Print si presiona el botón Ok, estoy enviando el reporte a la impresora cuando presiona el botón Imprimir desde esta ventana.  Aquí está el código:

01_-_PropImpresora

Lo demás permanece más o menos igual que lo descrito en el artículo Impresiones con Visual Basic 2010.  Este es el botón que manda imprimir (conocido como btnImprimir):

03_-_btnImprimir

Y aquí está el código de los botones para ver las propiedades de página y la presentación preeliminar, respectivamente:

04_-_PropPag_y_PReview

Por si se confundieron con los nombres de los controles, les dejo esta imagen de la vista diseño con los nombres de cada control señalados:

05_-_Form1_diseño

La tabla que uso de Access (Personal) está constituido por los siguientes campos:

06__Tabla_Personal

Y el reporte que genera se ve así (esta es la ventana de presentación preeliminar):

07_-_Reporte_Final

Espero que este artículo les haya sido de utilidad.  ¡Saludos!

El Tony y sus ondas...

Related Posts Plugin for WordPress, Blogger...