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!

7 comentarios:

Nacho dijo...

Muchas gracias Tony por tu excelente tutorial, me fue de mucha utilidad. Solo una consulta: ¿cómo podría alinear a la derecha el valor numerico de la columna "Sueldo"?

Nuevamente gracias por compartir esta información.

Tony Valderrama dijo...

Revisa la función FORMAT (http://msdn.microsoft.com/es-mx/library/59bz1f0h(v=vs.80).aspx). Ojalá te pueda ayudar porque permite poner un cierto formato a un número... podría ser de moneda.

La otra sería agregar espacios al principio según la longitud del número

Nacho dijo...

Muchas gracias Tony por tu respuesta. Intente con format, le pone los decimales pero la alineacion continua a la izquierda. Intentare agregando espacios como sugieres, pues no encontre ninguna otra solucion en la web. Nuevamente gracias por compartir tus conocimientos!

ENZO dijo...

Hola tony tienes una paciencia extraordinaria para enseñarnos,, muy agradecido con tus post,, espero yo luego tb seguir colaborando con lo poco que se con mis compañeros, un abrazo a la distancia desde BOLIVIA FABIO MEDINA mi correo es klifis64@hotmail.com

Unknown dijo...

el reporte q imprimes lo hiciste desde visual o ya estaba hecho desde access? requiero imprimir un formulario de access te lo agradezco!

Tony Valderrama dijo...

La ventana la hice en Visual Basic.

Anónimo dijo...

Muy bueno el tutorial, una duda, si la consulta requiere mas de una hoja, como haces para que tome otra hoja?

El Tony y sus ondas...

Related Posts Plugin for WordPress, Blogger...