You are on page 1of 5

Generando un reporte con Access y Visual Basic 2010

Hace tiempo haba descrito cmo generar cosas impresas con Visual Basic 2010 (Impresiones con Visual Basic 2010) y tambin haba mencionado como usar un objeto DataTable para accesar los registros de una tabla hecha en Access (Access y Visual Basic 2005). En esta ocasin 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 artculos antes de continuar. Bsicamente lo que hago es usar los controles PrintDocument, PrintDialog,PageSetupDialog y PrintPreviewDialog para manejar la impresin, y uso un DataAdapter yDataTable 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 mtodo 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 posicin vertical donde voy a escribir cada lnea de texto (y). UsodataAdapter para llenar dt (DataTable). Despus de esto, me deshago de dataAdapter(con Dispose lo envo al pas de nunca jams). Despus 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 ttulos de las columnas (donde dice Nombre y Sueldo), asigno el valor inicial vertical para la primera lnea (y=200) y termino haciendo un ciclo que avanza por cada registro y lo escribe en la pgina en las coordenadas dadas (en son fijas para el eje horizontal y la variable ycontrola las coordenadas verticales). Aqu est el cdigo fuente de ese evento:

El otro botn que sufre un poco de cambio en comparacin a lo que describ en Impresiones con Visual Basic 2010 es el botn que abre la ventana de propiedades de la impresora, oPrintDialog1. La diferencia radica en el IF que uso para asignarle un documento. Si no lo hago, cuando se presiona el botn Imprimir de esa ventana, no hace nada. Ahora, al ponerPrintDocument1.Print si presiona el botn Ok, estoy enviando el reporte a la impresora cuando presiona el botn Imprimir desde esta ventana. Aqu est el cdigo:

Lo dems permanece ms o menos igual que lo descrito en el artculo Impresiones con Visual Basic 2010. Este es el botn que manda imprimir (conocido como btnImprimir):

Y aqu est el cdigo de los botones para ver las propiedades de pgina y la presentacin preeliminar, respectivamente:

Por si se confundieron con los nombres de los controles, les dejo esta imagen de la vista diseo con los nombres de cada control sealados:

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

Y el reporte que genera se ve as (esta es la ventana de presentacin preeliminar):

You might also like