manual data report 5921 completo

Upload: alfredo-martinez-santiago

Post on 10-Jul-2015

249 views

Category:

Documents


2 download

TRANSCRIPT

mailxmail - Cursos para compartir lo que sabes

Manual DataReportAutor: miguel garcia

1

mailxmail - Cursos para compartir lo que sabes

Presentacin del cursoEste curso, pretende dar unas nociones generales sobre la creacin de informes con las herramientas que nos proporciona Visual Basic 6.0. Estas herramientas son el Entorno de Datos (Data Environment) y el Diseador de Informes (Data Report). Al igual que con muchas otras herramientas de creacin 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 imaginacin y tiempo que el programador pueda dedicar a esta herramienta, y en gran medida de las restricciones de la misma.

2

mailxmail - Cursos para compartir lo que sabes

1. IntroduccinEl presente documento, pretende dar unas nociones generales sobre la creacin de informes con las herramientas que nos proporciona Visual Basic 6.0. Estas herramientas son el Entorno de Datos (Data Environment) y el Diseador de Informes (Data Report). Al igual que con muchas otras herramientas de creacin 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 imaginacin 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.

3

mailxmail - Cursos para compartir lo que sabes

2. El entorno de datos (Data environment)Lo primero que veremos es cmo agregar el Entorno de Datos a nuestro proyecto. Pues bien, para ello nos iremos al men Proyecto y elegiremos la opcin 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 conexin, y luego definiremos sus propiedades. El nombre que vamos a elegir para nuestra primera conexin va a ser el de Listados.

Porqu este nombre, bueno normalmente solemos darle a nuestros objetos, nombres descriptivos para los mismos, y como esta conexin 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 conexin. Nos situaremos encima de la

4

mailxmail - Cursos para compartir lo que sabesconexin con el ratn, y pulsando el botn derecho del mismo elegimos la opcin Propiedades del men contextual. La figura a la izquierda, muestra las propiedades de nuestra conexin.

En la pestaa Proveedor, deberemos seleccionar el motor que se encargar del manejo de las tablas de la base de datos, que contiene la informacin 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 botn Siguiente y se abre la pestaa Conexin. En ella deberemos seleccionar la base de datos de la cual tomaremos la informacin 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.

5

mailxmail - Cursos para compartir lo que sabes

6

mailxmail - Cursos para compartir lo que sabes

3. Los comandosYa tenemos creada nuestra conexin, ahora slo 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 pudiramos crear nosotros. Crearemos nuestro primer comando, pulsaremos para ello con el botn derecho, sobre la conexin Listados. Aparece un nuevo objeto, llamado Command1. Tendremos que modificar sus propiedades para poder configurarlo a nuestras necesidades. Con el botn derecho del ratn, iremos hasta la opcin de propiedades. Lo primero que haremos ser cambiar el nombre actual por el de acmAutores y seleccionar la conexin 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 slo vamos a trabajar con una tabla as que pulsamos aceptar para cerrar la ventana de propiedades.

Vamos a crear ahora una consulta algo ms compleja, en la que tengamos que relacionar varias tablas. Normalmente es lo que haremos, para sacar los listados lo

7

mailxmail - Cursos para compartir lo que sabesms completos posibles. Veremos dos posibles soluciones, la primera mediante comandos y subcomandos, y la segunda mediante consulta SQL. En el primer mtodo, vamos a crear un comando que contenga los registros de los autores. Una solucin posible sera la mostrada en la siguiente figura. A continuacin vamos a explicar cmo 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 botn derecho, sobre el comando que queremos aadir el comando secundario. Y al igual que hacamos con los comandos, vamos a modificar sus propiedades. La primera de ellas es su nombre acmAux. Por qu este nombre, pues la razn 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 ttulos 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 relacin entre la tabla o el comando secundario, y el de nivel superior (acmTituloAutor). Nos iremos a la pestaa de Relacin y activaremos la opcin de Relacionar con un campo primario, si no estuviera activada. Seguidamente seleccionaramos el comando primario, en nuestro caso acmTituloAutor, y seguidamente definiramos la relacin. Como Campo Primario seleccionaremos Au_ID, que se encuentra en la tabla Authors Authors. El siguiente campo de relacin ser tambin Au_ID de la tabla Title Author, seleccionndolo en la opcin Campos Secundarios y Parmetros, ahora pulsamos Agregar. Ya tenemos el comando secundario intermedio.

8

mailxmail - Cursos para compartir lo que sabes

Nos queda aadir un comando secundario al subcomando acmAux, para relacionar la tabla Titles, que contiene todos los ttulos de libros almacenados en la base de datos. Pues al igual que hiciramos con el comando secundario acmAux, vamos a hacer con el subcomando acmLibros. Recuerda que tendrs que seleccionar los campos apropiados en la pestaa Relacin. Resumiendo, hemos creado tres comandos, uno principal acmAutor y otros dos comandos secundarios, el primero de ellos intermedio que sirve de vnculo de unin entre las tablas de autores y el ltimo subcomando que contiene la tabla de libros. Bueno, antes de pasar a explicar el segundo mtodo de relacionar tablas, vamos a ver el aspecto que podran 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 ttulo (Caption) de la ventana Listado de Listado de Autores. Lo siguiente ser establecer las propiedades DataSource y DataMember. La primera de ellas marca la fuente de datos, en definitiva la direccin 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 continuacin, deberemos establecer la propiedad DataMember, seleccionando aquel comando del entorno de datos, que contenga la informacin de las tablas que queramos mostrar en el informe, en nuestro caso acmAutores.

9

mailxmail - Cursos para compartir lo que sabes

Bien ya tenemos definido lo ms importante en el formulario o DataReport, el siguiente paso es obtener la estructura del informe, para ello pulsamos sobre el formulario con el botn derecho del ratn y seleccionamos la opcin Obtener Estructura, pulsamos S a la pregunta que nos hacen. Ya tenemos la estructura de nuestro informe, slo tenemos que ir incluyendo aquellos campos que queremos que aparezcan en el mismo. Para ello vamos a abrir, adems 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.

10

mailxmail - Cursos para compartir lo que sabes

Ahora, slo 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 seccin Encabezado de Informe, mostrar slo en la primera pgina los datos o campos que contenga esta seccin, no se pueden introducir, sin embargo, los campos de nuestros comandos, pero s por ejemplo el ttulo del informe, el nmero de pgina, la fecha, etc. , esto es vlido tambin para el Pie de Informe. Si abrimos el cuadro de herramientas, veremos que existe una pestaa nueva llamada DataReport que contiene aquellos controles que pueden ser insertados en nuestro informe, veremos que adems se pueden incluir algunos ms especiales, pulsando con el botn derecho del ratn sobre la seccin en la que queremos aadir el control. Estos campos especiales son por ejemplo la Fecha actual o la Hora, el Nmero Total de Pginas, el Ttulo del Informe, etc. Otra seccin, es el Encabezado/Pie de Pgina, normalmente en ella colocaremos la descripcin o nombre de cada campo del informe, en nuestro caso ser Autor y Ao de Nacimiento. Tambin vamos a introducir, en la cabecera de pgina de nuestro informe el Ttulo y la fecha de impresin, para ello seleccionaremos ambos controles del men contextual, antes definido.

11

mailxmail - Cursos para compartir lo que sabes

Para definir nuestro ttulo del informe, tendremos que modificarlo en la propiedad Title Title del DataReport e introducir el texto Listado de Autores. Cambiaremos tambin la apariencia del mismo, llndonos a la propiedad Font del campo que hemos aadido y seleccionando un estilo de fuente Negrita Cursiva y un tamao de 1 2. Otra propiedad importante es Centrar en la seccin, que aparece cuando pulsamos sobre un control con el botn derecho del ratn. El ttulo, lo centraremos horizontalmente. Incluiremos otro control ms, que ser la fecha de impresin. Antes de proseguir, comentaremos las propiedades GridX y GridY. Ambas defines la rejilla de puntos del diseador, su valor por defecto es 1, nosotros vamos a ponerlo a 10 para poder colocar mejor los controles en el formulario. Y la seccin ms importante de todas es la seccin Detalle. En ella aparecen todos los registros de nuestra consulta. Vamos a insertar los campos Author y Year Born a la seccin Detalle, de nuestro informe. Slo bastar con arrastrar el campo hasta la posicin 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 seccin Encabezado de Pgina, situndola 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 descripcin (Caption) e introduciremos los textos Autor y Ao de Nacimiento respectivamente. Modificaremos tambin el

12

mailxmail - Cursos para compartir lo que sabestamao de los controles si es necesario, as como su posicin. Tambin ajustaremos el tamao de cada seccin a nuestro gusto. Por ejemplo, subiremos el Pie de Pgina hasta alcanzar los campos en Detalle. Aadiremos el Nmero de Pgina, en la seccin Pie de Pgina. Adems vamos a modificar la fuente de texto del nombre de los campos del informe a negrita y dibujaremos una lnea debajo de los mismos. Con esto podremos dar por terminado nuestro informe, pero antes vamos a delimitar el tamao 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 1 3 9 5 5 twips. Un centmetro 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 orientacin apropiada, en nuestro caso ser la de papel vertical. El aspecto puede ser parecido a este.

Mejorable, verdad?. Pues claro, la imaginacin y el estilo personal de cada uno juegan un papel importante en el diseo de los informes. En nuestro caso, lo principal es tener claro la estructura de nuestro informe, los distintos niveles (secciones) de agrupacin, 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 ms que el anterior, claro tiene tres tablas relacionadas, con lo cual a cada una de ellas se le asigna un espacio reservado en el

13

mailxmail - Cursos para compartir lo que sabesinforme.

La primera seccin es el nivel superior, que corresponde con el comando acmTituloAutor acmTituloAutor, esta seccin nos va a servir para agrupar los registros por el nombre del autor del libro. La siguiente seccin, 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 Titles, que es la que se engloba dentro de la seccin de detalle, ocupando el ltimo nivel. Cualquier campo perteneciente a un nivel superior, podr ser insertado en uno inferior, pero no al revs. Bueno, pues nuestro siguiente trabajo ser generar un informe que muestre los ttulos de los libros, agrupados por el autor. El resultado ha de ser parecido a algo as.

14

mailxmail - Cursos para compartir lo que sabes

En este informe se han aadido controles como lneas, formas (fondo gris de la descripcin de los campos), etc. T puedes aadir otros, y modificar sus propiedades. Con estos dos ejemplos, se ha intentado explicar ms o menos, el diseo de informes mediante comandos cuyo origen de datos sea una o varias tablas. En el apartado siguiente se explicar cmo hacer esto pero con el Generador SQL.

15

mailxmail - Cursos para compartir lo que sabes

4. Generador SQLVamos a generar un informe relacionando la tabla Publishers y Tltles, agrupando los registros por el nombre de la compaa que lo publica, que se encuentra en la tabla Publishers Publishers. Crearemos para ello un nuevo comando de nombre acmLibroPub, y pulsaremos el botn 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 conexin listados y la carpeta Tablas. Aqu encontramos todas las tablas de nuestra base de datos. Bueno pues ahora slo consiste en arrastras aquellas tablas que van a formar parte de la consulta SQL. En nuestro caso slo las dos tablas antes mencionadas. Si en nuestra base de datos no hemos definido las relaciones entre las tablas, tendramos que definirlas con slo arrastrar el campo de unin de la primera tabla hacia el campo en la segunda tabla. El siguiente paso ser marcar slo 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 diseador, se ha ido generando la consulta SQL que corresponde a la relacin que hemos creado. Puedes crear directamente aqu la consulta, e incluso modificarla.

16

mailxmail - Cursos para compartir lo que sabesTambin es posible realizar ordenacin de campos en la ventana que tienes justo arriba de la anterior, criterios de seleccin, etc. Tambin 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 botn derecho sobre la ventaja principal del diseador, cambiar la consulta de seleccin por una de insercin, eliminacin, etc. Si ya hemos terminado de crear la consulta, la guardaremos y se cerrar automticamente el diseador, volviendo al entorno de datos. Nuestro comando tiene ahora slo tres campos, los que hemos seleccionado en la consulta SQL. An nos queda un paso ms, y es agrupar la consulta. Para ello abriremos las propiedades del comando y nos iremos a la pestaaAgrupar.

Activaremos la casilla Agrupar Comando, dejaremos el nombre por defecto del comando de agrupacin y seleccionaremos el campo para agrupar (Company Name). Una vez seleccionado el campo de agrupacin, aceptamos y observamos como nuestra consulta ha cambiado, conteniendo ahora dos carpetas. La primera contiene el campo de agrupacin y la segunda los campos que se mostrarn en la seccin de detalle. Es hora ya de comenzar a disear nuestro informe, para ello tenemos que aadir a nuestro proyecto un nuevo DataReport, su propiedadDataSource la fijaremos al entorno de datos y la propiedad DataMember tendremos que seleccionar el comando de agrupacin acmLibrosPub_Grouping.

17

mailxmail - Cursos para compartir lo que sabesObtendremos finalmente su estructura, parecida a esta. Pasaremos a colocar los campos en el informe, en el encabezado de grupo colocaremos el nombre de la compaa y en la seccin detalle, los campos ttulo y comentarios del libro.

18

mailxmail - Cursos para compartir lo que sabes

19

mailxmail - Cursos para compartir lo que sabes

20

mailxmail - Cursos para compartir lo que sabes

5. Campos AgregadosUn 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 aadir un campo agregado que muestre el nmero total de libros publicados por la compaa. Para ello, iremos a las propiedades del comando y seleccionaremos la pestaa Agregados Agregados y pulsaremos el botn Agregar. Como nombre de campo elegiremos TotalLibros TotalLibros, la funcin 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 slo nos queda incluir este nuevo campo en el informe. El lugar ms apropiado es en el pie de grupo acmLibrosPub_Grouping_Footer, ya que nos da el total de libros por compaa.

21

mailxmail - Cursos para compartir lo que sabes

22

mailxmail - Cursos para compartir lo que sabes

6. El control rptFuncionAl igual que los campos agregados, el control rptFunction nos permite aadir campos al informe que nos ayudan a realizar clculos sobre campos de una tabla. La diferencia est en que estos campos, no pertenecen al comando, sino nicamente al informe. Aadiremos este control al pie de la seccin acmTituloAutor, ya que lo que se pretende es calcular el total de libros por autor. Daremos un nombre a la funcin 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 funcin a realizar, rptFuncRCnt, en el campo FunctionType.

Tambin podemos realizar un recuento de todos los libros publicados. Bastar slo con copiar el control frmula y pegarlo en el pie de Informe, y ya tenemos el total buscado.

23

mailxmail - Cursos para compartir lo que sabes

24

mailxmail - Cursos para compartir lo que sabes 7. Enlace de los informes con la aplicacinA continuacin, explicaremos cmo enlazar nuestros informes con la aplicacin que estamos desarrollando. Pues bien basta con el siguiente cdigo, por ejemplo en un botn 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 lanzaramos el informe con todos los registros. Pero podemos tambin seleccionar una serie de ellos, que cumplan cierta condicin. Por ejemplo, podemos seleccionar aquellos cuya compaa sea 'A SYSTEM PUBNS'. Para ello, tendremos que obtener la sentencia SQL que define el comando generador. Lo hacemos pulsando con el botn derecho sobre el comando y pulsando la opcin Informacin de jerarqua, Tal como vemos en la figura siguiente. Ahora bastar con copiar el contenido de la ventana y pegarlo en el cdigo siguiente, y modificar la instruccin aadiendo en la clusula 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

25

mailxmail - Cursos para compartir lo que sabesScreen.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 continuacin.

Bueno, ya tenemos ms o menos una idea de cmo funcionan los informes en Visual Basic 6.0. Evidentemente, quedan algunas cosas por tratar y profundizar, pero creo que con paciencia y mucha dedicacin, podremos hacer todo aquello que queremos conseguir, siempre y cuando nos lo permita la herramienta. Tal vez, esta forma que explicamos aqu, sea la ms 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 pgina, etc. Al igual que yo, cuando os enfrentis a estos menesteres, os daris cuenta cun difcil

26

mailxmail - Cursos para compartir lo que sabesresulta modificar un objeto dentro de un DataReport, al menos en la versin 2.0 de ADO que es la que manejo actualmente. Veris, qu complicado es por ejemplo, modificar la propiedad Caption de una etiqueta englobada en la seccin de encabezado, pues no podemos (al menos yo no s) hacer referencia a ella mediante su nombre, slo es posible realizarlo mediante el ndice que ocupa dentro de la seccin, propiedad que tampoco podemos conocer en modo diseo o ejecucin. Resumiendo, disponemos de una herramienta sencilla para informes sencillos, que no representen mucha complejidad. nimo a todos, tal vez alguien descubra una forma ms cmoda de realizar informes con DataReport y puede ser que Microsoft mejore su interfaz y programabilidad.

27