Está en la página 1de 23

1.

Introducción

Capítulo siguiente: 2 - El entorno de datos (Data environment)

El presente documento, pretende dar unas nociones generales sobre la creación de


informes con las herramientas que nos proporciona Visual Basic 6.0.

Estas herramientas son el Entorno de Datos (Data Environment) y el Diseñador de


Informes (Data Report). Al igual que con muchas otras herramientas de creación de
informes (Crystal Reports, Access, etc.) Data Report nos va a permitir crear niveles
dentro del informe, totales, etc.; el grado de complejidad del informe dependerá de la
imaginación y tiempo que el programador pueda dedicar a esta herramienta, y en gran
medida de las restricciones de la misma.

No obstante, diremos a favor de Data Report, que tenemos una herramienta que nos va a
permitir distribuir nuestros informes libremente, sin necesidad de licencias,
autorizaciones, etc.; distintas a las ya conseguidas con Visual Basic.

2El entorno de datos (Data environment)

Capítulo anterior: 1 - Introducción


Capítulo siguiente: 3 - Los comandos

Lo primero que veremos es cómo agregar el Entorno de Datos a nuestro proyecto. Pues
bien, para ello nos iremos al menú Proyecto y elegiremos la opción Agregar Data
Environment.

En nuestro proyecto tendremos algo parecido a lo mostrado en la figura siguiente. Bueno


lo primero que debemos hacer es dar un nombre a nuestro Entorno de Datos. Por
ejemplo, dteEntornoDatos. Para ello nos colocaremos en la propiedad Nombre del
DataEnvironment y escribiremos su nombre.

Como vemos, debajo del Entorno de datos aparece un nuevo objeto, el objeto
Connection.

En un principio vamos a ponerle un nombre a esta conexión, y luego definiremos sus


propiedades. El nombre que vamos a elegir para nuestra primera conexión va a ser el de
Listados.
Porqué este nombre, bueno normalmente solemos darle a nuestros objetos, nombres
descriptivos para los mismos, y como esta conexión va a contener los listados que van a
generar nuestros informes, pues por eso le damos este nombre.

Ahora vamos a definir las propiedades de la conexión. Nos situaremos encima de la


conexión con el ratón, y pulsando el botón derecho del mismo elegimos la opción
Propiedades del menú contextual.

La figura a la izquierda, muestra las propiedades de nuestra conexión.


En la pestaña Proveedor, deberemos seleccionar el motor que se encargará del manejo de
las tablas de la base de datos, que contiene la información que debe generar nuestros
informes. Para nuestro ejemplo, seleccionaremos Microsoft Jet 3.51 OLE DB Provider,
ya que nuestra base de datos está creada con Access 97.

Ahora pulsamos el botón Siguiente y se abre la pestaña Conexión. En ella deberemos


seleccionar la base de datos de la cual tomaremos la información para confeccionar los
informes. En nuestro caso se ha seleccionado la base de datos
Biblio.mdb, que se encuentra en el directorio VB98 de Visual Basic.
3. Los comandos

Capítulo anterior: 2 - El entorno de datos (Data environment)


Capítulo siguiente: 4 - Generador SQL

Ya tenemos creada nuestra conexión, ahora sólo tendremos que crear los comandos, que
digamos, son los que se encargan de obtener las referencias a las tablas de nuestra base de
datos, así como a las consultas almacenadas en ella y a las que pudiéramos crear
nosotros.

Crearemos nuestro primer comando, pulsaremos para ello con el botón derecho, sobre la
conexión Listados. Aparece un nuevo objeto, llamado Command1. Tendremos que
modificar sus propiedades para poder configurarlo a nuestras necesidades. Con el botón
derecho del ratón, iremos hasta la opción de propiedades.

Lo primero que haremos será cambiar el nombre actual por el de acmAutores y


seleccionar la conexión con la que trabajaremos, en nuestro caso será Listados. Para el
Origen de Datos, seleccionaremos Tabla, ya que este comando va a obtener los datos de
una tabla existente en nuestra base de datos llamada Authors.
Este comando es muy sencillo, ya que sólo vamos a trabajar con una tabla así que
pulsamos aceptar para cerrar la ventana de propiedades.

Vamos a crear ahora una consulta algo más compleja, en la que tengamos que relacionar
varias tablas. Normalmente es lo que haremos, para sacar los listados lo más completos
posibles. Veremos dos posibles soluciones, la primera mediante comandos y
subcomandos, y la segunda mediante consulta SQL.

En el primer método, vamos a crear un comando que contenga los registros de los
autores. Una solución posible sería la mostrada en la siguiente figura. A continuación
vamos a explicar cómo se crean los subcomandos. Un subcomando, por así decirlo, es
una tabla relacionada con otra que está en un nivel superior. Para agregar un comando
secundario (subcomando) bastará pulsar con el botón derecho, sobre el comando que
queremos añadir el comando secundario. Y al igual que hacíamos con los comandos,
vamos a modificar sus propiedades. La primera de ellas es su nombre acmAux.

Por qué este nombre, pues la razón es que si nos fijamos en la estructura de nuestra base
de datos, existe una tabla intermedia entre la de autores y la que contiene los títulos
publicados por estos, que es Title Author. Pues bien esta es la tabla a la cual hará
referencia este comando secundario, que acabamos de crear. El siguiente paso será definir
una relación entre la tabla o el comando secundario, y el de nivel superior
(acmTituloAutor).

Nos iremos a la pestaña de Relación y activaremos la opción de Relacionar con un


campo primario, si no estuviera activada. Seguidamente seleccionaríamos el comando
primario, en nuestro caso acmTituloAutor, y seguidamente definiríamos la relación.
Como Campo Primario seleccionaremos Au_ID, que se encuentra en la tabla Authors. El
siguiente campo de relación será también Au_ID de la tabla Title Author, seleccionándolo
en la opción Campos Secundarios y Parámetros, ahora pulsamos Agregar. Ya tenemos el
comando secundario intermedio.

Nos queda añadir un comando secundario al subcomando acmAux, para relacionar la


tabla Titles, que contiene todos los títulos de libros almacenados en la base de datos. Pues
al igual que hiciéramos con el comando secundario acmAux, vamos a hacer con el
subcomando acmLibros. Recuerda que tendrás que seleccionar los campos apropiados en
la pestaña Relación. Resumiendo, hemos creado tres comandos, uno principal acmAutor
y otros dos comandos secundarios, el primero de ellos intermedio que sirve de vínculo de
unión entre las tablas de autores y el último subcomando que contiene la tabla de libros.

Bueno, antes de pasar a explicar el segundo método de relacionar tablas, vamos a ver el
aspecto que podrían tener los informes que se pueden generar con los dos comandos
principales anteriores, para ello nos vamos al menú Proyecto y seleccionamos Agregar
Data Report. Lo primero que haremos será dar un nombre a este nuevo formulario, su
nombre será rptAutores y el título (Caption) de la ventana Listado de Autores. Lo
siguiente será establecer las propiedades DataSource y DataMember. La primera de ellas
marca la fuente de datos, en definitiva la dirección de nuestra base de datos y para ello
debemos seleccionar de la lista desplegable el entorno de datos que hemos creado al
principio de este documento (dteEntornoDatos). A continuación, deberemos establecer la
propiedad DataMember, seleccionando aquel comando del entorno de datos, que
contenga la información de las tablas que queramos mostrar en el informe, en nuestro
caso acmAutores.

Bien ya tenemos definido lo más importante en el formulario o DataReport, el siguiente


paso es obtener la estructura del informe, para ello pulsamos sobre el formulario con el
botón derecho del ratón y seleccionamos la opción Obtener Estructura, pulsamos Sí a la
pregunta que nos hacen. Ya tenemos la estructura de nuestro informe, sólo tenemos que ir
incluyendo aquellos campos que queremos que aparezcan en el mismo. Para ello vamos a
abrir, además del DataReport el entorno de datos.

Seleccionamos en el menú Ventana, Mosaico Vertical. La idea es tener en pantalla,


abiertos a la vez, el informe y el entorno de datos, quedando algo así como lo mostrado
en la figura superior.
Ahora, sólo tendremos que ir arrastrando los campos de la consulta hasta el informe.
Vamos a incluir los campos Author y Year Born. Antes vamos a explicar un poco la
estructura de nuestro informe. La sección Encabezado de Informe, mostrará sólo en la
primera página los datos o campos que contenga esta sección, no se pueden introducir,
sin embargo, los campos de nuestros comandos, pero sí por ejemplo el título del informe,
el número de página, la fecha, etc. , esto es válido también para el Pie de Informe. Si
abrimos el cuadro de herramientas, veremos que existe una pestaña nueva llamada
DataReport que contiene aquellos controles que pueden ser insertados en nuestro
informe, veremos que además se pueden incluir algunos más especiales, pulsando con el
botón derecho del ratón sobre la sección en la que queremos añadir el control. Estos
campos especiales son por ejemplo la Fecha actual o la Hora, el Número Total de
Páginas, el Título del Informe, etc.

Otra sección, es el Encabezado/Pie de Página, normalmente en ella colocaremos la


descripción o nombre de cada campo del informe, en nuestro caso será Autor y Año de
Nacimiento. También vamos a introducir, en la cabecera de página de nuestro informe el
Título y la fecha de impresión, para ello seleccionaremos ambos controles del menú
contextual, antes definido.
Para definir nuestro título del informe, tendremos que modificarlo en la propiedad Title
del DataReport e introducir el texto Listado de Autores. Cambiaremos también la
apariencia del mismo, lléndonos a la propiedad Font del campo que hemos añadido y
seleccionando un estilo de fuente Negrita Cursiva y un tamaño de 12. Otra propiedad
importante es Centrar en la sección, que aparece cuando pulsamos sobre un control con
el botón derecho del ratón. El título, lo centraremos horizontalmente. Incluiremos otro
control más, que será la fecha de impresión.

Antes de proseguir, comentaremos las propiedades GridX y GridY. Ambas defines la


rejilla de puntos del diseñador, su valor por defecto es 1, nosotros vamos a ponerlo a 10
para poder colocar mejor los controles en el formulario.

Y la sección más importante de todas es la sección Detalle. En ella aparecen todos los
registros de nuestra consulta.

Vamos a insertar los campos Author y Year Born a la sección Detalle, de nuestro
informe. Sólo bastará con arrastrar el campo hasta la posición del informe donde
queramos que valla. Si nos fijamos aparecen dos controles, uno es una etiqueta,
normalmente el primero. Y el segundo, un control texto que apunta al campo en la
consulta. La etiqueta la llevaremos hacia la sección Encabezado de Página, situándola en
el punto que nos interese y justamente debajo, pero en Detalle colocaremos el control
texto del campo. Modificaremos un poco estos controles, por ejemplo las etiquetas
cambiaremos su descripción (Caption) e introduciremos los textos Autor y Año de
Nacimiento respectivamente. Modificaremos también el tamaño de los controles si es
necesario, así como su posición. También ajustaremos el tamaño de cada sección a
nuestro gusto. Por ejemplo, subiremos el Pie de Página hasta alcanzar los campos en
Detalle.

Añadiremos el Número de Página, en la sección Pie de Página. Además vamos a


modificar la fuente de texto del nombre de los campos del informe a negrita y
dibujaremos una línea debajo de los mismos. Con esto podremos dar por terminado
nuestro informe, pero antes vamos a delimitar el tamaño del informe. La propiedad
ReportWidth se encarga de esto. Un valor de 9026 twips equivale aproximadamente, a un
folio A4 en vertical. Un formato A4 en horizontal equivale a unos 13955 twips. Un
centímetro equivale a 567 Twips. Una vez delimitado nuestro informe (Verticalmente),
para que se vea correctamente, tendremos que ajustar las propiedades de nuestra
impresora a una orientación apropiada, en nuestro caso será la de papel vertical. El
aspecto puede ser parecido a este.
Mejorable, ¿verdad?. Pues claro, la imaginación y el estilo personal de cada uno juegan
un papel importante en el diseño de los informes. En nuestro caso, lo principal es tener
claro la estructura de nuestro informe, los distintos niveles (secciones) de agrupación, etc.

El siguiente informe, será el que corresponde al comando principal acmTituloAutor. Has


de seguir los mismos pasos que en el informe anterior, coloca en DataSource el entorno
de datos y en DataMember en comando acmTituloAutor. Si te fijas, ahora nuestro
informe tiene algunas secciones más que el anterior, claro tiene tres tablas relacionadas,
con lo cual a cada una de ellas se le asigna un espacio reservado en el informe.

La primera sección es el nivel superior, que corresponde con el comando acmTituloAutor,


esta sección nos va a servir para agrupar los registros por el nombre del autor del libro.
La siguiente sección, en nuestro caso, no la vamos a usar ya que pertenece al comando o
tabla auxiliar que une la tabla Authors con la de Titles, que es la que se engloba dentro de
la sección de detalle, ocupando el último nivel. Cualquier campo perteneciente a un nivel
superior, podrá ser insertado en uno inferior, pero no al revés.

Bueno, pues nuestro siguiente trabajo será generar un informe que muestre los títulos de
los libros, agrupados por el autor. El resultado ha de ser parecido a algo así.
En este informe se han añadido controles como líneas, formas (fondo gris de la
descripción de los campos), etc. Tú puedes añadir otros, y modificar sus propiedades.

Con estos dos ejemplos, se ha intentado explicar más o menos, el diseño de informes
mediante comandos cuyo origen de datos sea una o varias tablas. En el apartado siguiente
se explicará cómo hacer esto pero con el Generador SQL.

4. Generador SQL

Capítulo anterior: 3 - Los comandos


Capítulo siguiente: 5 - Campos Agregados

Vamos a generar un informe relacionando la tabla Publishers y Tltles, agrupando los


registros por el nombre de la compañía que lo publica, que se encuentra en la tabla
Publishers.

Crearemos para ello un nuevo comando de nombre acmLibroPub, y pulsaremos el botón


Generador SQL. Nos aparece una nueva pantalla y una nueva vista llamada Vista Datos.
En esta vista tenemos agrupado nuestras conexiones y listados como si fuera un
explorador. Abrimos la conexión listados y la carpeta Tablas. Aquí encontramos todas las
tablas de nuestra base de datos.

Bueno pues ahora sólo consiste en arrastras aquellas tablas que van a formar parte de la
consulta SQL. En nuestro caso sólo las dos tablas antes mencionadas. Si en nuestra base
de datos no hemos definido las relaciones entre las tablas, tendríamos que definirlas con
sólo arrastrar el campo de unión de la primera tabla hacia el campo en la segunda tabla.
El siguiente paso será marcar sólo los campos que vamos a mostrar en el informe, en la
tabla Publishers el campo Company Name, y en Titles los campos Title y Comment.

Si te has dado cuenta, en la ventana que, normalmente, está en el centro del diseñador, se
ha ido generando la consulta SQL que corresponde a la relación que hemos creado.
Puedes crear directamente aquí la consulta, e incluso modificarla. También es posible
realizar ordenación de campos en la ventana que tienes justo arriba de la anterior,
criterios de selección, etc.

También es posible con el menú contextual que se abre al pulsar sobre cualquier campo
de la tabla. Incluso podemos ejecutar la consulta, si pulsamos con el botón derecho sobre
la ventaja principal del diseñador, cambiar la consulta de selección por una de inserción,
eliminación, etc.
Si ya hemos terminado de crear la consulta, la guardaremos y se cerrará automáticamente
el diseñador, volviendo al entorno de datos.

Nuestro comando tiene ahora sólo tres campos, los que hemos seleccionado en la
consulta SQL. Aún nos queda un paso más, y es agrupar la consulta. Para ello abriremos
las propiedades del comando y nos iremos a la pestaña Agrupar.

Activaremos la casilla Agrupar Comando, dejaremos el nombre por defecto del comando
de agrupación y seleccionaremos el campo para agrupar (Company Name).

Una vez seleccionado el campo de agrupación, aceptamos y observamos como nuestra


consulta ha cambiado, conteniendo ahora dos carpetas. La primera contiene el campo de
agrupación y la segunda los campos que se mostrarán en la sección de detalle. Es hora ya
de comenzar a diseñar nuestro informe, para ello tenemos que añadir a nuestro proyecto
un nuevo DataReport, su propiedad DataSource la fijaremos al entorno de datos y la
propiedad DataMember tendremos que seleccionar el comando de agrupación
acmLibrosPub_Grouping.

Obtendremos finalmente su estructura, parecida a esta. Pasaremos a colocar los campos


en el informe, en el encabezado de grupo colocaremos el nombre de la compañía y en la
sección detalle, los campos título y comentarios del libro.
5. Campos Agregados

Capítulo anterior: 4 - Generador SQL


Capítulo siguiente: 6 - El control rptFuncion

Un campo agregado, es aquel que nos permite realizar sumas, medias, etc.; sobre campos
de una tabla. En nuestro ejemplo vamos a modificar el informe rptLibrosPub y su
comando asociado acmLibrosPub, para añadir un campo agregado que muestre el número
total de libros publicados por la compañía.

Para ello, iremos a las propiedades del comando y seleccionaremos la pestaña Agregados
y pulsaremos el botón Agregar. Como nombre de campo elegiremos TotalLibros, la
función que utilizaremos será Cuenta, que nos permitirá realizar un recuento de todos los
libros, ya que el campo que elegiremos será Title. Lo agregaremos en Grouping, para
que esté disponible en todas las secciones.

Ya tan sólo nos queda incluir este nuevo campo en el informe. El lugar más apropiado es
en el pie de grupo acmLibrosPub_Grouping_Footer, ya que nos da el total de libros por
compañía.
6. El control rptFuncion

Capítulo anterior: 5 - Campos Agregados


Capítulo siguiente: 7 - Enlace de los informes con la aplicación

Al igual que los campos agregados, el control rptFunction nos permite añadir campos al
informe que nos ayudan a realizar cálculos sobre campos de una tabla. La diferencia está
en que estos campos, no pertenecen al comando, sino únicamente al informe. Añadiremos
este control al pie de la sección acmTituloAutor, ya que lo que se pretende es calcular el
total de libros por autor. Daremos un nombre a la función y como DataMember
seleccionaremos acmLibros.

Ahora nos queda seleccionar el campo que queremos contar, en nuestro caso el campo
ISBN, que nos da el total de libros (DataField). Y por último debemos elegir el tipo de
función a realizar, rptFuncRCnt, en el campo FunctionType.
También podemos realizar un recuento de todos los libros publicados. Bastará sólo con
copiar el control fórmula y pegarlo en el pie de Informe, y ya tenemos el total buscado.
7. Enlace de los informes con la aplicación

Capítulo anterior: 6 - El control rptFuncion

A continuación, explicaremos cómo enlazar nuestros informes con la aplicación que


estamos desarrollando. Pues bien basta con el siguiente código, por ejemplo en un botón
de comando, para llamar a un informe generado:

Private Sub Command1_Click()


Screen.MousePointer = vbHourglass
Load rptLibrosPub
Screen.MousePointer = vbDefault
rptLibrosPub.Show vbModal
End Sub

De esta forma lanzaríamos el informe con todos los registros. Pero podemos también
seleccionar una serie de ellos, que cumplan cierta condición. Por ejemplo, podemos
seleccionar aquellos cuya compañía sea 'A SYSTEM PUBNS'.

Para ello, tendremos que obtener la sentencia SQL que define el comando generador. Lo
hacemos pulsando con el botón derecho sobre el comando y pulsando la opción
Información de jerarquía, Tal como vemos en la figura siguiente. Ahora bastará con
copiar el contenido de la ventana y pegarlo en el código siguiente, y modificar la
instrucción añadiendo en la cláusula Where el criterio que nos interesa.

Private Sub Command1_Click()


Dim Listado As ADODB.Command `Objeto de tipo comando
Dim Entorno As dteEntornoDatos `Nuestro entorno de datos
Screen.MousePointer = vbHourglass
'Iniciamos el entorno de datos.
Set Entorno = New dteEntornoDatos
Entorno.Listados.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51; Data
Source= directorio donde se encuentra biblio.mdb"
Set Listado = Entorno.Commands("acmLibrosPub_Grouping")
Listado.CommandType = adCmdText
Listado.CommandText = " SHAPE {SELECT Publishers.`Company Name`,
Titles.Title, Titles.Comments FROM Titles, Publishers WHERE Titles.PubID =
Publishers.PubID AND Publishers.`Company Name`='A SYSTEM PUBNS' ORDER BY
Publishers.`Company Name`, Titles.Title} AS acmLibrosPub COMPUTE
acmLibrosPub, COUNT(acmLibrosPub.'Title') AS TotalLibros BY 'Company Name'"
Load rptLibrosPub
Screen.MousePointer = vbDefault
rptLibrosPub.Show vbModal
End Sub

El resultado lo podemos ver a continuación

Bueno, ya tenemos más o menos una idea de cómo funcionan los informes en Visual
Basic 6.0.

Evidentemente, quedan algunas cosas por tratar y profundizar, pero creo que con
paciencia y mucha dedicación, podremos hacer todo aquello que queremos conseguir,
siempre y cuando nos lo permita la herramienta. Tal vez, esta forma que explicamos aquí,
sea la más complicada para elaborar informes con DataReport, pero hasta ahora es la que
conozco y con la que me he enfrentado, pero bueno para cosas sencillas no está nada mal.

Dejo a los lectores, el crear membretes en la cabecera de los informes, así como
comentarios a pie de página, etc. Al igual que yo, cuando os enfrentéis a estos
menesteres, os daréis cuenta cuán difícil resulta modificar un objeto dentro de un
DataReport, al menos en la versión 2.0 de ADO que es la que manejo actualmente.

Veréis, qué complicado es por ejemplo, modificar la propiedad Caption de una etiqueta
englobada en la sección de encabezado, pues no podemos (al menos yo no sé) hacer
referencia a ella mediante su nombre, sólo es posible realizarlo mediante el índice que
ocupa dentro de la sección, propiedad que tampoco podemos conocer en modo diseño o
ejecución. Resumiendo, disponemos de una herramienta sencilla para informes sencillos,
que no representen mucha complejidad. Ánimo a todos, tal vez alguien descubra una
forma más cómoda de realizar informes con DataReport y puede ser que Microsoft
mejore su interfaz y programabilidad.