manual data report

27
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.

Upload: jfacosta

Post on 01-Jul-2015

1.378 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Manual Data Report

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.

Page 2: Manual Data Report

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.

Page 3: Manual Data Report

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 datosBiblio.mdb, que se encuentra en el directorio VB98 de Visual Basic.

Page 4: Manual Data Report

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.

Page 5: Manual Data Report

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

Page 6: Manual Data Report

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

Page 7: Manual Data Report

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.

Page 8: Manual Data Report

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.

Page 9: Manual Data Report

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

Page 10: Manual Data Report

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.

Page 11: Manual Data Report

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í.

Page 12: Manual Data Report

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

Page 13: Manual Data Report

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.

Page 14: Manual Data Report

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.

Page 15: Manual Data Report
Page 16: Manual Data Report

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.

Page 17: Manual Data Report
Page 18: Manual Data Report

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.

Page 19: Manual Data Report

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.

Page 20: Manual Data Report

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 vbModalEnd 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

Page 21: Manual Data Report

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 comandoDim 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

Page 22: Manual Data Report

    rptLibrosPub.Show vbModalEnd 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

Page 23: Manual Data Report

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.