Visual Basic con Bases de Datos Manual de Referencia para el Alumno Incluye:
Objetos de Datos ActiveX (ADO) Generación de Informes de datos
BD
Indice BASES DE DATOS Y VISUAL BASIC
.........................................................................................................................................4
FUNDAMENTOS SOBRE BASE DE DATOS: ....................................................................................................................................4 IMPLEMENTAR EL DISEÑO DE UNA BASE DE DATOS DESDE VISUAL BASIC ..............................................................................4 EL CONTROL ADODC Y SUS CONTROLES ENLAZADOS ................................................................................................................5 HABITUARSE A LOS CONTROLES ENLAZADOS ..............................................................................................................................7 ESTABLECIMIENTO DE LAS PROPIEDADES DE ENLACE: ..............................................................................................................7 CREACIÓN DE UNA APLICACIÓN SENCILLA...................................................................................................................................8 AGREGAR Y ELIMINAR REGISTROS : .............................................................................................................................................9 CAMBIAR EL ORIGEN DE DATOS A TRAVÉS DE CÓDIGO: ..........................................................................................................10 MÉTODO FIND (ADO) ................................................................................................................................................................11 USO DEL CONTROL DATAGRID ..................................................................................................................................................12 Configurar el Control: .....................................................................................................................................................13
ADO Y EL MODELO DE OBJETOS DE ADO
...........................................................................................................................13
REALIZAR UNA CONEXIÓN CON ADO.........................................................................................................................................14 Abrir y cerrar cerrar una conexión conexión ..........................................................................................................................................14 Uso del método Execute ................................................................................................................................................14 Conexión sin DSN .............................................................................................................................................................16 Trabajando con Recordsets ...........................................................................................................................................16 Creación de un recordset ...............................................................................................................................................17 Mostrar valores de un campo .......................................................................................................................................18 Navegación por el Recordset ........................................................................................................................................19 Navegación y la propiedad CursorType ....................................................................................................................20 Uso de métodos de navegación ..................................................................................................................................21 Actualizar Datos Datos ................................................................................................................................................................22 Establecer la propiedad LockType (Tipo de Bloqueo) ..........................................................................................22 Agregar nuevos nuevos datos .....................................................................................................................................................23 El Objeto Command .........................................................................................................................................................24 Recordsets desconectados ............................................................................................................................................25 Creación de un Recordset Desconectado .................................................................................................................25 Reconectar un Recordset ...............................................................................................................................................25
ACERCA DEL DISEÑADOR DE ENTORNO DE DATOS (DATAENVIRONMENT) ..........................................................27 DISEÑAR UN OBJETO DATAENVIRONMENT ................................................................................................................................27 CREAR UN OBJETO CONNECTION ...............................................................................................................................................29 CREAR UN OBJETO COMMAND ....................................................................................................................................................30 USAR UN ENTORNO DE DATOS CON LA APLICACIÓN .................................................................................................................33 SITUACIONES PARA USAR EL DISEÑADOR DE ENTORNO DE DATOS ........................................................................................34 Crear una jerarquía de relaciones entre un Cliente y una tabla Pedidos .....................................................34 Incluir un campo agregado en el objeto Command "Cliente" ..........................................................................35 Agrupar el objeto objeto Command Command "Cliente" "Cliente" por estado ...............................................................................................36 Incluir un campo agregado para contar el número de clientes por cada estado ......................................36 Incluir un agregado total general para contar el número de estados en que hay clientes ...................37 Enlazar el entorno de da tos a un control Hierarchical FlexGrid FlexGrid .......................................................................38
REPORTES EN VISUAL BASIC
..................................................................................................................................................39
CREACIÓN DE REPORTES CON DATA REPORT (DISEÑADOR DE INFORMES DE DATOS) .......................................................39 Caracteristicas del Diseñador de Informes de Datos ...........................................................................................39 Crear un Informe de Datos Sencillo ..........................................................................................................................41 Crear el informe de datos ..............................................................................................................................................42 Vista Preliminar del Informe de Datos con el Método Show .............................................................................44 Imprimir un informe de datos ......................................................................................................................................44
Decidir si se muestra un cuadro de diálogo Imprimir ...................................................................................44 Imprimir sin un cuadro de diálogo .......................................................................................................................45
Controles del informe de datos ...................................................................................................................................45
DISEÑANDO INFORMES CON CRYSTAL REPORTS
......................................................................................................................46
Creación de un nuevo Informe: ..................................................................................................................................46 Creación de un informe desde cero ...........................................................................................................................47 Creación de un Informe usando el Asistente ..........................................................................................................49 Personalizar el Informe ..................................................................................................................................................50 Agregar una fórmula de selección ..............................................................................................................................50 Uso del Control Crystal Report ....................................................................................................................................51 Modificando propiedades del Control Crystal Report ...........................................................................................51 Establecer propiedades opcionales: ...........................................................................................................................52 Mostrar el Informe ...........................................................................................................................................................52
Pág. 2 de 65
Indice BASES DE DATOS Y VISUAL BASIC
.........................................................................................................................................4
FUNDAMENTOS SOBRE BASE DE DATOS: ....................................................................................................................................4 IMPLEMENTAR EL DISEÑO DE UNA BASE DE DATOS DESDE VISUAL BASIC ..............................................................................4 EL CONTROL ADODC Y SUS CONTROLES ENLAZADOS ................................................................................................................5 HABITUARSE A LOS CONTROLES ENLAZADOS ..............................................................................................................................7 ESTABLECIMIENTO DE LAS PROPIEDADES DE ENLACE: ..............................................................................................................7 CREACIÓN DE UNA APLICACIÓN SENCILLA...................................................................................................................................8 AGREGAR Y ELIMINAR REGISTROS : .............................................................................................................................................9 CAMBIAR EL ORIGEN DE DATOS A TRAVÉS DE CÓDIGO: ..........................................................................................................10 MÉTODO FIND (ADO) ................................................................................................................................................................11 USO DEL CONTROL DATAGRID ..................................................................................................................................................12 Configurar el Control: .....................................................................................................................................................13
ADO Y EL MODELO DE OBJETOS DE ADO
...........................................................................................................................13
REALIZAR UNA CONEXIÓN CON ADO.........................................................................................................................................14 Abrir y cerrar cerrar una conexión conexión ..........................................................................................................................................14 Uso del método Execute ................................................................................................................................................14 Conexión sin DSN .............................................................................................................................................................16 Trabajando con Recordsets ...........................................................................................................................................16 Creación de un recordset ...............................................................................................................................................17 Mostrar valores de un campo .......................................................................................................................................18 Navegación por el Recordset ........................................................................................................................................19 Navegación y la propiedad CursorType ....................................................................................................................20 Uso de métodos de navegación ..................................................................................................................................21 Actualizar Datos Datos ................................................................................................................................................................22 Establecer la propiedad LockType (Tipo de Bloqueo) ..........................................................................................22 Agregar nuevos nuevos datos .....................................................................................................................................................23 El Objeto Command .........................................................................................................................................................24 Recordsets desconectados ............................................................................................................................................25 Creación de un Recordset Desconectado .................................................................................................................25 Reconectar un Recordset ...............................................................................................................................................25
ACERCA DEL DISEÑADOR DE ENTORNO DE DATOS (DATAENVIRONMENT) ..........................................................27 DISEÑAR UN OBJETO DATAENVIRONMENT ................................................................................................................................27 CREAR UN OBJETO CONNECTION ...............................................................................................................................................29 CREAR UN OBJETO COMMAND ....................................................................................................................................................30 USAR UN ENTORNO DE DATOS CON LA APLICACIÓN .................................................................................................................33 SITUACIONES PARA USAR EL DISEÑADOR DE ENTORNO DE DATOS ........................................................................................34 Crear una jerarquía de relaciones entre un Cliente y una tabla Pedidos .....................................................34 Incluir un campo agregado en el objeto Command "Cliente" ..........................................................................35 Agrupar el objeto objeto Command Command "Cliente" "Cliente" por estado ...............................................................................................36 Incluir un campo agregado para contar el número de clientes por cada estado ......................................36 Incluir un agregado total general para contar el número de estados en que hay clientes ...................37 Enlazar el entorno de da tos a un control Hierarchical FlexGrid FlexGrid .......................................................................38
REPORTES EN VISUAL BASIC
..................................................................................................................................................39
CREACIÓN DE REPORTES CON DATA REPORT (DISEÑADOR DE INFORMES DE DATOS) .......................................................39 Caracteristicas del Diseñador de Informes de Datos ...........................................................................................39 Crear un Informe de Datos Sencillo ..........................................................................................................................41 Crear el informe de datos ..............................................................................................................................................42 Vista Preliminar del Informe de Datos con el Método Show .............................................................................44 Imprimir un informe de datos ......................................................................................................................................44
Decidir si se muestra un cuadro de diálogo Imprimir ...................................................................................44 Imprimir sin un cuadro de diálogo .......................................................................................................................45
Controles del informe de datos ...................................................................................................................................45
DISEÑANDO INFORMES CON CRYSTAL REPORTS
......................................................................................................................46
Creación de un nuevo Informe: ..................................................................................................................................46 Creación de un informe desde cero ...........................................................................................................................47 Creación de un Informe usando el Asistente ..........................................................................................................49 Personalizar el Informe ..................................................................................................................................................50 Agregar una fórmula de selección ..............................................................................................................................50 Uso del Control Crystal Report ....................................................................................................................................51 Modificando propiedades del Control Crystal Report ...........................................................................................51 Establecer propiedades opcionales: ...........................................................................................................................52 Mostrar el Informe ...........................................................................................................................................................52
Pág. 2 de 65
LABORATORIOS
............................................................................................................................................................................54
CONTROL ADODC Y CONTROLES ENLAZADOS
.............................................................................................................54
Lab 01: Agregando y Configurando un Control ADODC .....................................................................................54 Lab 02: Agregando y Configurando Controles Enlazados Enlazados a Datos .................................................................54 Lab 03: Agregando, Actualizando y Eliminando Datos a través de Código .................................................55 Lab 04: Agregando, Configurando y Usando el Control DataGrid ..................................................................56
ADO Y EL MODELO DE OBJETOS DE ADO
.......................................................................................................................57
Lab 01: Realizando una Conexión con ADO utilizando DSN .............................................................................57 Lab 02: Estableciendo una Conexión sin DSN .......................................................................................................59 Lab03: Laboratorio de Desarrollo 1. Trabajando con Recordsets ...................................................................59 Lab 04: Laboratorio de Desarrollo 2. Creando una aplicación para mantenimiento basado en una base de datos creada por el alumno. ........................................................................................................................60
ACERCA DEL DISEÑADOR DE ENTORNO DE DATOS (DATA ENVIRONMENT) ....................................................61
Lab 01: Creando un Proyecto de Datos y Configurando un DataEnvironment ..........................................61 Lab 02: Usar el Entorno de Datos con la Aplicación ............................................................................................62 Lab 03: Labotarorio de Desarrollo 1. Creando una aplicación de mantenimiento usando DataEnvironment ..............................................................................................................................................................63
REPORTES EN VISUAL BASIC
.............................................................................................................................................64
Lab 01: Laboratorio de Desarrollo 1. Añadiendo un Informe de Datos al Proyecto pjtTest ............. .....64 Lab 02: Laboratorio de Desarrollo 2. Añadiendo un Informe diseñado con Crystal Reports al proyecto pjtTest ................................................................................................................................................................64
Pág. 3 de 65
Bases de Datos y Visual Basic Fundamentos sobre Base de Datos: Muchas de las aplicaciones que se crean mediante Visual Basic utilizan directamente acceso a Datos los cuales son almacenados en Bases de datos de diferente tipo de diseño. La creación de una estructura organizada de Base de datos exige que aprenda sobre dos tareas separadas. En primer lugar deberá aprender a diseñar una base de datos. En el diseño tiene que decidir que datos van a la base de datos y como se van a organizar estos. En segundo lugar deberá aprender a traducir el diseño a una verdadera base de datos. Esto se puede hacer de varias maneras, en Visual Basic existen algunos métodos bastante evolucionados, además existen programas gestores de bases de Datos afines a Visual Basic como Microsoft Access
Implementar el diseño de una Base de datos desde Visual Basic Desde Visual Basic existen varias formas de implementar el diseño de una Base de Datos: Usando los Objetos de Datos ActiveX (ADO) Usando el Microsoft Access. Usando programas de Administración de Bases de Datos de terceros. En este documento se utilizan los Objetos de Datos ActiveX (ADO), dado que es la mas actual forma de Acceso a Datos proporcionada desde la aparicion de Visual Basic 6.0
Pág. 4 de 65
El Control Adodc y sus Controles enlazados El control Data es la principal herramienta de desarrollo al momento de crear aplicaciones sencillas con Bases de Datos. Este control es bastante flexible y fácil de programar y configurar. Veamos a grandes rasgos lo que el usuario debe hacer para aprender a utilizar este control:
Moverse al primer Moverse al anterior Moverse al ultimo Moverse al siguiente
Insertar el control Adodc en un formulario Configurar el control especificando Fuente de Datos Cabe mencionar que para insertar el Control Data en el formulario simplemente hay que dibujarlo como lo haría con otro control, asignando tamaño y posición dentro del formulario. Propiedades importantes:
En esta pantalla Ud. Debe especificar como conectarse con una fuente de datos local o remota
Pág. 5 de 65
Para establecer una conexión con el control Adodc, debe especificar cualquiera de las opciones de Origen de Conexión, siendo la mas comun la opcion Usar nombre de origen de datos ODBC. Debe comprender que el control Adodc es mucho mas avanzado y completo que el control Data Estándar, el motivo es que este control permite configurar facilmente conexiones a fuentes de datos locales como Microsoft Access o fuentes empresariales como Microsoft SQL Server Vamos a crear una conexión utilizando el control Adodc, primero utilizando un origen ODBC y luego sin ODBC, para el primer caso suponemos lo siguiente: 1.
Existe una fuente ODBC llamada BIBLIO que se conecta a la base de datos de ejemplo Biblio que viene con Visual Basic, esta fuente de datos fue creada utilizando el Panel de Control del Sistema Operativo Windows
Veamos como empezar esta configuracion... 1. En la Página de Propiedades del control Adodc, haga click en la opcion Usar nombre de origen de datos ODBC. 2. Elija de la lista el origen de datos BIBLIO (ver figura...)
3. Como no estamos conectandonos con una fuente de datos remota, no entramos a la ficha Autenticacion y para elegir el conjunto de registros, haga click en la ficha Origen de Registros. 4. Una vez en esta pantalla, en Tipo de Comando, elija: 2-adCmdTable , esto para especificar que vamos autilizar un Tabla de esta Base de datos Pág. 6 de 65
5. Luego en Tabla o Nombre de Procedimiento Almacenado Publishers, y despues haga click en Aplicar y Aceptar.
elija la Tabla
Listo, ya tenemos configurado en Control Adodc, ahora tenemos que enlazarlo a controles que permitan la visualizacion de los registros de la tabla Publishers
Habituarse a los controles enlazados Ahora que ya conocemos como configurar el control Adodc, no todo culmina configurándolo, pues ahora debemos centrar la atención a la forma como visualizaremos los campos, puesto que la función del control Adodc básicamente es unir una base de Datos con una aplicación de Visual Basic, ahora visualizar los datos en el formulario es una tarea que los controles enlazados a datos nos ayudan a completar. Algunos de los controles enlazados a datos le son familiares: TextBox Label CheckBox PictureBox Image En términos generales estos controles permiten unir un campo de la tabla con nuestra aplicación, obviamente en el formulario. Ahora bien, estos controles muestran correspondencia con cierto tipo de datos. Veamos una tabla que nos explica con detalle esto: Nombre del Control Label TextBox CheckBox PictureBox Image
Tipo de Datos Texto, Numérico, Fecha Texto, Memo, Numérico, Fecha Lógico (True/False) Binario Largo Binario Largo
Propiedad del control Caption Text Value Picture Picture
Establecimiento de las propiedades de enlace: Cada control enlazado, posee 2 propiedades fundamentales que permiten unirlos con campos de un Recordset (Recordset = Conjunto de Registros )
Pág. 7 de 65
Para este caso, como estamos utilizando el control Adodc, sera suficiente que se modifiquen las propiedades DataSource y DataField, es ese estricto orden, en DataSource especificamos el nombre del control, (Adodc1 en este caso) y en DataField el nombre del campo vinculado al control enlazado, (PubID en este caso)
Para esta ilustracion se considera un TextBox como control enlazado Especificando estas dos propiedades se logra los siguiente: DataSource : permite especificar el control Adodc que se enlaza con los controles enlazados a datos. DataField : permite especificar el campo que se enlaza con el control
Creación de una aplicación sencilla Bien, hasta ahora ya sabemos configurar el control Adodc y establecer algunas propiedades básicas para los controles enlazados a Datos, ahora concentraremos nuestra atención en una aplicación sencilla. Realice los siguientes pasos: 1. Cree un proyecto Nuevo .EXE Estándar. 2. Agregue un Control Adodc al formulario y ubíquelo en la parte inferior del mismo. 3. Configure el control data para que este enlazado con la Base de Datos de ejemplo BILBIO.mdb 4. Escoja la tabla Publishers 5. Inserte 3 Cuadros de Texto en el formulario (ya que esta tabla tiene 3 campos)
Pág. 8 de 65
6. También inserte 3 Label acompañando a los cuadros de texto 7. Configure las siguientes propiedades para los controles, (ver página siguiente):
Nombre del cuadro de texto Text1 Text2 Text3
DataField PubID Name Company Name
Titulo de los Label Pub ID: Nombre: Nombre de Compañía:
Recuerde que para los tres cuadros de texto la propiedad que primero debe configurar antes de DataField es DataSource especificando en ella el nombre del Control Adodc insertado en el formulario. El formulario debe tener esta apariencia:
Listo ahora es muy fácil “Navegar” dentro del RecordSet , para ello simplemente haga click
en los botones de navegación explicados anteriormente. Debe tener en cuenta algo, el Control Adodc no permite controlar de manera eficaz las operaciones de modificar registros y no permite eliminar registros de manera directa, esto significa que estas operaciones deben controlarse mediante Código.
Agregar y Eliminar registros: Como habíamos mencionado líneas arriba, el control Data adolece de formas para agregar y/o eliminar registros, así que tendremos que hacerlo nosotros. Agregue dos botones de comando al formulario llamados cmdAgregar y cmdEliminar posteriormente agregue los siguientes segmentos de código:
respectivamente,
Private Sub cmdAgregar_Click() Adodc1.Recordset.AddNew End Sub
Pág. 9 de 65
Private Sub cmdEliminar_Click() Adodc1.Recordset.Delete If Not Adodc1.Recordset.EOF Then Adodc1.Recordset.MoveNext Else Adodc1.Recordset.MoveLast End If End Sub
El modo de Edición de registro es automático, es decir si el usuario esta modificando los cuadros de texto que corresponden a los campos entonces estamos editando el registro. Sin embargo, si Ud. desea controlar eficazmente la acción de Guardar Cambios puede utilizar lo siguiente:
1. Para Guardar los Cambios (en otro boton de comando) Adodc1.Recordset.UpDate
2. Existen también métodos para moverse entre los registros: MoveFirst => Moverse al primer registro MovePrevious => Moverse al registro anterior MoveNext => Moverse al registro siguiente MoveLast => Moverse al Ultimo Registro
Cambiar el origen de datos a través de código: Como se ha visto, es muy facil configurar el Control Adodc en tiempo de diseño. Sin embargo, incluso en el proyecto mas sencillo, por lo general es necesario utilizar ese control de un modo mas dinámico. Afortunadamente, es posible configurarlo mediante codigo si se siguen estos pasos: 1. Establezca la propiedad ConnectionString. 2. Establezca las propiedades CommandType y RecordSource 3. Ejecute el método Refresh del control Adodc para recuperar los datos. Así, el control de datos ADO de la aplicación de muestra recupera todos los registros que haya en la tabla Publishers. No obstante, resulta muy facil agregar codigo para cambiar la propiedad RecordSource , de forma que aparezca un nuevo recordset. Supongamos que deseamos mostrar informacion unicamente de los editores cuya dirección esté en un estado determinado. Puede escribir una consulta SQL sencilla para mostrar estas direcciones, como en este ejemplo:
Pág. 10 de 65
Select * from Publishers where State=‟NY‟
En lugar de configurar la consulta en tiempo de diseño, agregue codigo al proyecto de muestra, con el fin de que esta pueda tener lugar durante la ejecucion del programa. Agregue un boton titulado “Buscar Estado” y con el nombre cmdState.
Coloque estas lineas de codigo en el evento Click de cmdState: Dim sState As String Dim sSQL As String „CONSTRUIR CONSULTA SQL sSQL=”Select * From PUBLISHERS” sState=InputBox$(“Introducir abreviatura del estado:”) If sState<>”” then sSQL=sSQL & “ WHERE State=‟“ & sState & “‟” „ACTUALIZA EL CONTROL DE DATOS ADODC
Adodc1.CommandType=adCmdText Adodc1.RecordSource=sSQL Adodc1.Refresh Ejecute el programa y haga Click en “Buscar Estado”
Método Find (ADO) Busca el registro que satisfaga los criterios especificados en el Recordset. Si se cumplen los criterios, la posición del recordset se establece en el registro encontrado; si no, la posición se establece al final del recordset. Sintaxis Find (criteria, SkipRows, searchDirection, start) Parámetros
Un String que contiene una instrucción que especifica el nombre de la columna, el operador de comparación y el valor utilizado en la búsqueda. criteria
Un valor Long opcional, cuyo valor predeterminado es cero, que especifica el desplazamiento desde la fila actual o marcador de inicio en el que comenzar la búsqueda. SkipRows
searchDirection
Un valor SearchDirectionEnum opcional que especifica si la búsqueda
tiene que comenzar en la fila actual o en la siguiente fila disponible de la dirección de la búsqueda. Su valor puede ser adSearchForward o adSearchBackward. La búsqueda termina al principio o el final del recordset, dependiendo del valor de searchDirection. start Un marcador Variant opcional que se utiliza como posición inicial de la búsqueda.
Pág. 11 de 65
El operador de comparación de criteria puede ser ">" (mayor que), "<" (menor que), "=" (igual a) o "like" (coincidencia parcial de cadenas). El valor de criteria puede ser una cadena, un número en coma flotante o una fecha. Los valores de cadena están delimitados con comillas sencillas (por ejemplo, "estado = 'WA'"). Los valores de fecha están delimitados con signos "#" (por ejemplo, "fecha_inicial > #7/22/97#"). Si el operador de comparación es "like", el valor de la cadena puede contener "*" (una o varias ocurrencias de cualquier carácter) o "_" (una ocurrencia de cualquier carácter). (Por ejemplo, "estado like F_*" encuentra Maine y Massachusetts).
Uso del Control DataGrid Este control permite visualizar la informacion procedente de conjuntos de registros en forma de tabla compuesta de filas y columnas, similar a una hoja de cálculo. Veamos como usarlo:
Para usar este control haga los siguientes pasos: 1. Haga click en el menu Proyecto y elija la opcion Componentes 2. En el cuadro de dialogo, marque la casilla “Microsoft DataGrid Control 6.0” 3. Inserte el control en su formulario
Pág. 12 de 65
Configurar el Control: Para realizar el ejemplo que observa en la figura, haga lo siguiente: 1. Agregue un control de Datos ADODC a su proyecto 2. Configure el control Adodc de tal manera que este conectado con la tabla “Titles” de la base de datos Biblio. 3. Agregue un control DataGrid al formulario: a. Para crear una division en el DataGrid, haga click con el boton derecho del Mouse sobre el DataGrid y elija “Modificar”, luego vuelva a hacer click con el boton derecho y elija la opcion “Dividir”
b. Puede cambiar multiples propiedades de diseño en la pagina de propiedades del Control 4. Para enlazar a Datos el Control, establezca la propiedad DataSource con el valor Adodc1 5. Para dibujar rapidamente las cabeceras del DataGrid, haga click con el boton derecho y elija la opcion recuperar campos , contesta que Sí al mensaje de confirmacion. 6. Listo puede usar el control.
ADO y el Modelo de Objetos de ADO Es util trabajar con los Objetos de Datos ActiveX a niveles del control de Datos Adodc, pero la real potencia de este Modelo de Objetos entra en juego cuando se usan los Objetos de ADO en el codigo de Visual Basic. Los objetos que conforman el Modelo de Objetos de ADO vienen enumerados en la siguiente tabla: Objeto
Descripcion
Recordset
Contiene los registros que conforman los resultados de una consulta
Connection
Permite un control sobre la conexión del origen de datos
Command
Ejecuta ordenes y consultas de bases de datos parametrizadas
Error
Recupera Errores de ADO
Field
Representa una porcion de datos de un recordset
Parameter
Funciona con el objeto Command para configurar un parámetro de una consulta o procedimiento almacenado
Property
Le permite acceder a las propiedades del objeto ADO
Modelo de Objetos de ADO
Pág. 13 de 65
Para utilizar los objetos de datos ActiveX (ADO), deberá agregar la librería a su proyecto: 1. En el Menú Proyecto, elija la opcion Referencias 2. Coloque una marca de verificacion junto a Microsoft ActiveX Data Objects 2.5 Library (o la versión que Ud. tenga) 3. Haga Click en Aceptar
Realizar una conexión con ADO El Objeto Connection se utiliza para establecer una conexión con un origen de Datos. Su propiedad mas importante es la propiedad ConnectionString que contiene la informacion que se emplea para conectarse con un origen de datos. El estado de la conexión de la base de datos se controla por medio de los metodos Open y Close
Abrir y cerrar una conexión El primer paso a la hora de abrir una conexión consiste en crear una nueva instancia del objeto ADODB.Connection, como sigue: Dim
cn
As
ADODB.Connection
„En
la
seccion
de
declaraciones
de
un
formulario o modulo Set cn=New ADODB.Connection
„En algun evento de usuario, por ej. Load
del Form
Despues de crear la instancia del Objeto, lo unico que tendra que hacer es proporcionar la cadena de conexión y llamar al método Open. Puede establecer esta cadena de conexión de 2 formas. La primera consiste en asignarla a la porpiedad ConnectionString: Cn.ConnectionString = “DSN=BIBLIO”
Cn.Open
Tambien puede pasar la cadena de conexión como parte de la llamada al metodo Open: Cn.Open “DSN=BIBLIO”
Para cerrar una conexión, llame al metodo Close y establezca la variable Cn en Nothing para liberar recursos utilizados por esta variable Cn.Close Set Cn = Nothing
Uso del método Execute En ADO puede cumplir los mismos objetivos de forma diferente. La accion de recuperar informacion, constituye un ejemplo perfecto. Puede tomarla de los objetos Recordset, Command o Connection: todos ellos tienen un método que se usa para llevar los datos a un Recordset. El método Execute del objeto Connection le permite ejecutar una instrucción SQL contra un origen de datos. Si la instrucción SQL devuelve registros, podra acceder a
Pág. 14 de 65
ellos sencillamente asignando el valor de retorno del método Execute a un objeto ADO Recordset. Veamos: 1. Cree un proyecto Nuevo EXE Estándar y agregue una referencia a ADO 2. Agregue un Control ListBox al formulario y llámelo lstAuthors 3. Por último, agregue las siguientes lineas de Codigo:
Option Explicit Dim Cn As ADODB.Connection Dim Rs As ADODB.Recordset Private Sub Form_Load() Set Cn = New ADODB.Connection Cn.Open "DSN=BIBLIO" Set Rs = Cn.Execute("Select * from Authors Where [Year Born]>1943") While Not Rs.EOF lstAuthors.AddItem "Year Born: & "Name: " & Rs.Fields("Author") Rs.MoveNext Wend
" & Rs.Fields("Year Born") & vbTab
Rs.Close Cn.Close Set Rs = Nothing Set Cn = Nothing End Sub
Este es el resultado:
Pág. 15 de 65
El método Execute del Objeto Connection devuelve un objeto Recordset, que esta almacenado en la variable Rs. A continuacion, se utiliza un bucle para desplazarse por el recordset, agregando el nombre de cada Autor y el año de nacimiento al cuadro de lista.
Conexión sin DSN Hasta ahora hemos utilizado una cadena de conexión sencilla que especifica el nombre del origen de datos “BIBLIO”, que se habia configurado previamente en el Administrador de
Origenes de datos ODBC. Si no desea depender de la configuracion de un DSN, podrá establecer una conexión sin DSN proporcionando a ADO mas informacion de la propiedad ConnectionString , como ocurre en los siguientes ejemplos de una base de datos de
Microsoft Access: Cn.ConnectionString = _ “Provider=Microsoft.Jet.OLEDB.3.51;DataSource=d: \vb6\biblio.mdb”
Cn.ConnectionString = _ “Driver=Microsoft Access Driver (*.mdb);DBQ=D: \VB6\biblio.mdb”
Nota: Aunque se use una conexión sin DSN, l os controladores y archivos de soporte apropiados deberan instalarse en el PC del usuario.
La Cadena de consexion Anterior nombra el controlador en lugar del DSN. Para el controlador Access, el parámetro DBQ señala al nombre de la Base de Datos. Tambien puede especificar otros proveedores de bases de datos OLE, como la siguiente cadena que se use para conectarse con Microsoft SQL Server: “Provider=SQLOLEDB.1;Password=groovy;UserID=apowers;Location=SQLSRV1;database=pubs”
Trabajando con Recordsets Los recordset representan Datos reales de ua base de datos. Un Recordset contiene campos (como Nombre y Numero de telefono) y valores para estos campos (como Angel Santos y 555-1212). Cada conjunto de valores de campo que van juntos conforman un registro individual, mientras que todos estos registros juntos conforman un Recordset En ADO, un Recordset se almacena en un objeto Recordset. Una vez que se puebla el objeto Recordset con datos, se podrán ejecutar las siguientes operaciones en los datos: Agregar nuevos registros Modificar Registros existentes Eliminar Registros Navegar por el recordset (cambiar el registro activo)
Pág. 16 de 65
Creación de un recordset Ya hemos aprendido a crear y poblar un recordset por Medio del método Execute del Objeto Connection. Sin embargo, un objeto Recordset posee sus propios métodos y propiedades, que pueden ser utilizados para recuperar datos. Al igual que otros objetos, es necesario crear una nueva instancia del Objeto Recordset: Dim Rs As ADODB.Recordset Set Rs = New ADODB.Recordset
A continuacion, pueden usarse las propiedades del objeto para especificar la conexión, el origen del registro y el tipo de recordset. Para especificar un origen de datos para el objeto Recordset , establezca la propiedad ActiveConnection igual a un objeto ADO Connection Rs.ActiveConnection = Cn
La línea de codigo asume que Cn representa una conexión abierta que señala el origen de datos, como veiamos anteriormente. Otra forma de seleccionar una conexión consiste en establecer la propiedad ActiveConnection a la cadena de conexión: Rs.ActiveConnection = “DSN=BIBLIO”
Si utiliza un valor de cadena en lugar de un objeto Connection, el objeto Recordset abrira su propia conexión con la base de datos. Un método Open del Recordset hace que se pueble el recordset con datos. Para utilizar el método Open , deberá en primer lugar, establecer la propiedad Source , que se corresponde con la propiedad RecordSource del control de datos ADO. Veamos como funciona esto en la practica: Option Explicit Const sSQL = "SELECT * FROM Authors WHERE [Author] Like 'Q%'" Dim Cn As ADODB.Connection Dim Rs As ADODB.Recordset Private Sub Form_Load() 'ABRIR UNA CONEXION Set Cn = New ADODB.Connection Cn.Open "dsn=BIBLIO" 'ABRIR UN RECORDSET Set Rs = New ADODB.Recordset Rs.ActiveConnection = Cn Rs.Source = sSQL Rs.Open
Pág. 17 de 65
'IMPRIMIR LOS NOMBRES DE LOS AUTORES Rs.MoveFirst While Not Rs.EOF Debug.Print "Author = "; Rs.Fields("Author") Rs.MoveNext Wend 'CERRAR TODO Rs.Close Set Rs = Nothing Cn.Close Set Cn = Nothing
End Sub
Y este es el resultado en la ventana inmediato (Debug.Print):
El codigo mostrado, como puede verse, ejecuta una consulta SQL que selecciona todos los authores cuyos apellidos comienzan por la letra Q
Mostrar valores de un campo Para acceder a datos del objeto Recordset , utilice la colección Fields . La siguiente table enumera las opciones que se pueden utilizar para hacer referencia a un campo individual Sintaxis
Ejemplo
Recordset .Fields(nombre campo) Recordset.Fields(indice) Recordset ! Nombre campo
RsPeople.Fields(2) RsPeople!Apellidos
RsPeople.Fields(“Apellidos”)
Veamos un segmento de codigo apropiado como para mostrar valores de campos
Pág. 18 de 65
„IMPRIMIR NOMBRES DE UN CAMPO
For I=0 To Rs.Fields.Count-1 Debug.Print Rs.Fields(I).Name, Next I Debug.Print „IMPRIMIR EL CONTENIDO DE TODOS LOS CAMPOS DE CADA REGISTRO
Rs.MoveFirst While Not Rs.EOF For I=0 To Rs.Fields.Count-1 Debug.Print Rs.Fields(i), Next I Debug.Print Rs.MoveNext Wend
Este codigo muestra dos propiedades del Objeto Field: las propiedades Name y Value. Observe que no tiene por que especificar explícitamente la propiedad value, puesto que es la propiedad predeterminada.
Navegación por el Recordset Una vez que se hayan recuperado los datos de un objeto Recordset, se podrá acceder y actualizar los valores de los campos del registro activo. Imagine el recordset como un archivo secuencial largo. En un momento determinado, el registro activo es un señalizador a una ubicación dentro de ese archivo. Para trabajar con diferentes registros, se usan los siguientes metodos de navegacion para cambiar el registro activo: Se mueve al primer registro, justo despues del principio del marcador de comienzo de archivo(BOF). MoveFirst
MoveLast
Se mueve al ultimo registro, justo antes del marcador de final de
archivo (EOF). MoveNext
Se mueve al registro siguiente despues del registro activo (hacia
EOF) MovePrevious
Se mueve al registro que esta antes del registro activo (hacia
BOF) Move
Mueve hacia delante o hacia atrás un numero especificado de
registros. BOF y EOF son propiedades que indican el comienzo y en final de los puntos finales de un recordset, respectivamente.
Pág. 19 de 65
Navegación y la propiedad CursorType Siempre es bueno considerar el tipo de cursor que uno va a utilizar, esto debido al tipo de cursor empleado, los cursores son señalizadores de posiciones activas de registro y son de diferentes tipos, la diferenciacion de sus tipos determina el uso de los métodos Move al momento de navegar en un Recordset Para modificar el tipo de cursor que se va a emplear, primero es bueno conocer que tipos de cursores nosotros podemos utilizar en nuestras aplicaciones: Tipo de Cursor
Constante
Descripcion
Cursor de sólo avance
adOpenForwardOnly Predeterminado para las conexiones en el lado sel servidor, idéntico a un cursor estatico, excepto que solo es posible desplazarse hacia delante por los registros
Cursor Estático
adOpenStatic
Una copia estática de un conjunto de registros que puede utilizar para localizar datos o generar informes. Las adiciones, cambios o eliminaciones realizados por otros usuarios no serán visibles
Cursor de Conjunto de claves
adOpenKeyset
Igual
que
un
cursor
dinámico,
excepto porque no es posible ver los registros que añadan otros usuarios; los registros que otros usuarios eliminen no estaran accesibles desde su recordset. Los cambios en los datos realizados por otros usuarios si serán visibles. Este es el cursor basico de lectura y escritura completamente desplazable Cursor Dinámico
adOpenDynamic
Las adiciones, los cambios y eliminaciones realizadas por otros usuarios serán visibles y están permitidos todos los tipos de desplazamiento por el Recordset , excepto las marcas si el proveedor no las admite.
Pág. 20 de 65
Uso de métodos de navegación Como ejemplo de navegacion de recordset, crearemos un proyecto que utiliza los metodos de navegacion. Para empezar, cree un nuevo proyecto EXE Estándar e inserta en el formulario un ListBox al que llamará lstData , cuatro botones de comando (cmdPrevious, cmdNext , cmdJump y cmdExit) y un cuadro de texto llamado txtJump. El programa de muestra ejecuta un consulta a la base de datos BIBLIO y permite al usuario ejecutar los metodos de navegacion para examinar el recordset, como lo hicimos con el control Data. El código del proyecto de muestra, se presenta a continuación: Option Explicit Dim Rs As ADODB.Recordset Private Sub cmdExit_Click() Rs.Close Set Rs = Nothing Unload Me End Sub Private Sub cmdJump_Click() Rs.Move Val(txtJump.Text) DisplayCurrentRecord End Sub Private Sub cmdNext_Click() Rs.MoveNext DisplayCurrentRecord End Sub Private Sub cmdPrevious_Click() Rs.MovePrevious DisplayCurrentRecord End Sub Private Sub Form_Load() 'RELLENAR EL OBJETO RECORDSET RS Set Rs = New ADODB.Recordset Rs.CursorType = adOpenStatic Rs.Source = "Publishers" Rs.Open , "DSN=BIBLIO" Registros.Caption = Rs.RecordCount DisplayCurrentRecord End Sub Sub DisplayCurrentRecord() Dim i As Integer Dim s As String If Rs.BOF Then Rs.MoveFirst If Rs.EOF Then Rs.MoveLast lstData.Clear For i = 0 To Rs.Fields.Count - 1 s = Rs.Fields(i).Name & ": " & Rs.Fields(i).Value lstData.AddItem s Next i End Sub
Pág. 21 de 65
Imagen del Formulario funcionando:
Actualizar Datos Ahora que sabemos como obtener informacion de ub objeto Recordset y mostrarla, puede proseguir y cambiar (o actualizar) la informacion de la base de datos. Si su recrodset se ha configurado apropiadamente, podrá cambiar la informacion de la base de datos facilmente. Sencillamente, navegue hasta el registro apropiado, asigne un nuevo valor a cada campo que desee cambiar y, por ultimo, llame al metodo UpDate, como sigue: Rs.Fields(“Author”)=”Simpson, Bart”
Rs.Update
Establecer la propiedad LockType (Tipo de Bloqueo) Por defecto, los recordsets de ADO son de solo lectura. Intentar cambiar un valor de campo en un recordset de solo lectura origina un error. Para agregar, cambiar o eliminar registros de un Recordset de ADO, deberá establecer la propiedad LockType a un valor diferente al predeterminado que es de sólo lectura. Por ejemplo, la accion de establecer las propiedades CursorType y LockType como sigue, crea un recordset actualizable en Access: Rs.CursorType = adOpenKeyset Rs.LockType = adLockOptimistic
Por que la propiedad LockType es tan importante?. La respuesta es que si esta editando registros en una base de datos multiusuario, tendrá que preocuparse del bloqueo de registros. El bloqueo de registros viene controlado por la propiedad LockType , que tiene los
valores siguientes:
Pág. 22 de 65
adLockReadOnly: Establece los datos del Recordset como de sólo lectura. adLockPessimistic: Proporciona un bloqueo de registros pesimista, es decir, que el
registro esta bloqueado mientras lo esta editando. adLockOptimistic: Proporciona un bloqueo de registros optimista, lo cual implica
que los registros sólo estarán bloqueados cuando llame al método Update . adLockBatchOptimistic: Actualiza múltiples registros a la vez con el método UpdateBatch. Por qué se llaman los parámetros en base a las actitudes (optimista y pesimista)?. Porque intentar actualizar un registro bloqueado origina un error en el programa. Puede ser optimista y esperar que un registro esté disponible cuando intente actualizarlo, o pesimista y bloquearlo en tanto y cuanto no lo necesite.
Agregar nuevos datos La acción de agregar nuevos registros a un objeto Recordset es similar a la de cambiar el contenido de los registros existentes, pero con un paso adicional: 1. Llamar al método AddNew
2. Asignar valores a los campos 3. Llamar al método Update Veamos un ejemplo: Option Explicit Dim Cn As ADODB.Connection Dim Rs As ADODB.Recordset Private Sub Form_Load() Set Cn = New ADODB.Connection Cn.Open "DSN=BIBLIO" 'ABRIR UN RECORDSET Set Rs = New ADODB.Recordset With Rs .CursorType = adOpenKeyset .LockType = adLockOptimistic .Source = "Authors" .ActiveConnection = Cn .Open End With 'AGREGAR UN NUEVO REGISTRO Rs.AddNew Rs.Fields("Author") = "King, Stevie" Rs.Fields("Year Born") = 1945 Rs.Update 'NOTA: El campo Au-ID es un campo autonumérico, 'se creará automaticamente
Pág. 23 de 65
'DESTRUIR LOS OBJETOS Rs.Close Cn.Close Set Rs = Nothing Set Cn = Nothing
End Sub
El Objeto Command Cuando este trabajando con un conjunto de datos, la mayor parte del tiempo estara trabajando con propiedades y metodos del objeto Recordset . No obstante, para recuperar esos datos, verá que el objeto ADO Command es indispensable. Este objeto le permite encapsular una consulta o procedimiento almacenado SQL en un objeto reutilizable, lo cual es especialmente adecuado si necesita ejecutar una operación múltiples veces. Puede incluso almacenar los parámetros de la consulta o procedimiento almacenado en la colección Parameters del objeto, lo cual supone que no se tiene que preocupar por la construccion de una cadena SQL apropiada mediante codigo. Una vez que configure un objeto Command , podrá cambiar los parámetros del mismo y llamarlo repetidamente. Por ejemplo, teniendo como base la aplicación de la página 15, utilizando Microsoft Access se podria diseñar la siguiente consulta genérica llamándola LetterLookup: PARAMETERS Letter Text; SELECT * FROM Authors WHERE Author LIKE Letter+‟*‟;
La acción de ejecutar esta consulta en Access le pide el parámetro Letter y luego muestra los registros coincidentes. Para ejecutar esta consulta de Access desde código de Visual Basic puede usar un objeto Command , de esta forma: Dim cmd As New ADODB.Command Dim parmTemp As ADODB.Parameter Set cmd.ActiveConnection=Cn cmd.CommandText=”LetterLookup”
cmd.CommandType=adCmdStoredProc Set parmTemp=cmd.CreateParameter(“Letter”, adChar, adParamInput, 1) cmd(“Letter”)=”Q”
Set Rs=cmd.Execute
Pág. 24 de 65
Recordsets desconectados Esta caracteristica se refiere a la posibilidad de crear recordsets desconectados .Este termino significa que Ud. tiene un recordset en memoria que es independiente de una conexión de bases de datos. Mientras esta desconectado, el recordset actua como un objeto autónomo, con todos los métodos y propiedades usuales. Lo que es incluso mas asombroso es el hecho de que posteriormente se puede reconectar al recordset y efectuar todos los cambios que se hicieron mientras el recordset estaba desconectado. Los recordsets desconectados son mas utiles en Internet, ya que no siempre se tiene una conexión continua con la base de datos.
Creación de un Recordset Desconectado La clave para la creación de un recordset desconectado consiste en establecer la propiedad CursorLocation . Posee 2 ajustes: adUseClient y adUseServer . Para crear un recordset desconectado (o cursor del lado del cliente), siga estos pasos 1. Establezca la propiedad CursorLocation a adUseClient 2. Pueble un objeto Recordset 3. Establezca la propiedad ActiveConnection a Nothing Cambiando un poco el codigo de la aplicación de la página 15: Private sub Form_Load() Set Rs=New ADODB.Recordset Rs.CursorLocation = adUseClient Rs.CursorType = adOpenStatic Rs.Source = “SELECT * FROM Publishers” Rs.Open , “DSN=BIBLIO” Set Rs.ActiveConnection = Nothing
DisplayCurrentRecord End Sub
Reconectar un Recordset Una vez que se recupera un recordset desconectado, como en la seccion anterior, cambie uno o mas registros estableciendo un nuevo valor de campo: Rs.Fields(0) = “Valor de campo editado”
Rs.MoveNext Rs.Fields(0) = “Otro valor de campo editado”
A continuación, restablezca la conexión estableciendo la propiedad ActiveConnection del recordset a un nuevo objeto Connection como se ve aquí: Set cn = New ADODB.Connection Cn.ConnectionString = “DSN=BIBLIO”
Pág. 25 de 65
Cn.Open Set Rs.ActiveConnection = Cn
Por último, ejecute el codigo que efectua la actualizacion de la base de datos: Rs.MarshalOptions = adMarshalModifiedOnly Rs.UpdateBatch
La propiedad MarshalOptions permite especificar si se devuelve el recordset completo o solo los registros modificados , para el uso mas eficaz de los recursos. La segunda linea ejecuta la actualizacion por medio del método UpdateBatch
Pág. 26 de 65
Acerca del Diseñador de entorno de datos (DataEnvironment) El Diseñador de entorno de datos proporciona un entorno interactivo en iempo de diseño para crear por programa accesos a datos en tiempo de ejecución. En tiempo de diseño se establecen los valores de las propiedades de los objetos Connection y Command, se escribe código para responder a los eventos de la interfaz de objetos de datos de ActiveX® (ADO), se ejecutan comandos y se crean campos agregados y jerarquías. También es posible arrastrar y colocar objetos Data_Environment en formularios o informes para crear controles enlazados a datos. Con el Diseñador de entorno de datos puede llevar a cabo las tareas siguientes: Agregar un Diseñador de entorno de datos a un proyecto de Visual Basic. Crear objetos Connection. Crear objetos Command basados en procedimientos almacenados, tablas, vistas, sinónimos e instrucciones SQL. Crear jerarquías de objetos Command basadas en una agrupación de objetos Command , o asociar entre sí uno o varios objetos Command.
Escribir y ejecutar código para los objetos Connection y Recordset. Arrastrar y colocar campos de un objeto Command del Diseñador de entorno de datos a un formulario de Visual Basic o al Diseñador de informe de datos.
Diseñar un objeto DataEnvironment En tiempo de diseño, es posible usar el Diseñador de entorno de datos para crear un objeto DataEnvironment. El objeto DataEnvironment puede incluir objetos Connection y Command , jerarquías (relaciones entre objetos Command), agrupaciones y campos agregados. Antes de diseñar el objeto DataEnvironment debe determinar la información que desea presentar, identificar las bases de datos que contienen la información y determinar el objetivo detiempo de ejecución (por ejemplo, crear uninforme de datos o un control Hierarchical FlexGrid). Antes de obtener acceso al Diseñador de entorno de datos debe hacer referencia al mismo en Visual Basic. Para hacer referencia al Diseñador de entorno de datos
En el menú Proyecto, haga clic en Referencias.
Pág. 27 de 65
En el cuadro de diálogo Referencias, seleccione Data Environment 1.0 y, a continuación, haga clic en Aceptar. Para agregar un objeto del Diseñador de entorno de datos a un nuevo proyecto de Visual Basic
En la ficha Nuevo del cuadro de diálogo Nuevo proyecto, elija proyecto EXE estándar y, a continuación, haga clic en Abrir. En el menú Proyecto, elija Agregar entorno de datos. Visual Basic agrega el Diseñador de entorno de datos al proyecto, muestra la ventana del Diseñador de entorno de datos, y agrega un objeto Connection al entorno de datos. Después de haber agregado un Diseñador de entorno de datos al proyecto, puede crear un objeto Connection; vea el procedimiento en Objetos Connection. Después de crear un objeto Connection, puede agregar objetos Command al mismo; vea el procedimiento en Objetos Command.
Pág. 28 de 65
Crear un objeto Connection La función Agregar conexión está disponible en todo momento, independientemente de si existen otros objetos. Para crear una conexión a una base de datos
Haga clic en Agregar conexión en la barra de herramientas del Diseñador de entorno de datos. O bien, Haga clic con el botón secundario del mouse (ratón) en el Diseñador de entorno de datos y seleccione Agregar conexión en el menú emergente. Cuando ha agregado un objeto Connection, se actualiza el entorno de datos para mostrar el nuevo objeto Connection. El nombre predeterminado de este objeto es "Connection" seguido de un número, como Connection1. Utilice el procedimiento siguiente para especificar las propiedades del objeto Connection.
Boton Agregar Conexión
Para establecer el nombre de conexión y el origen de datos
1. En la ventana de Propiedades, cambie el nombre predeterminado por un nombre más descriptivo de la base de datos de origen. Por ejemplo, puede cambiar el nombre Connection1 por "Northwind" si el origen de datos es la base de datos Northwind. 2. Haga clic en el objeto Connection y elija Propiedades para tener acceso al cuadro de diálogo Propiedades de vínculos de datos. 3. En el cuadro de diálogo Propiedades de vínculos de datos, especifique la información de conexión en las fichas Conexión y Proveedor. Suele ser una base de datos que contiene datos o procedimientos almacenados. Sólo puede seleccionar un origen para cada objeto Connection.
Pág. 29 de 65
4. Nota Independientemente del tipo de origen de datos seleccionado, el entorno de datos permite recuperar todos los datos mediante las interfaces ADO y OLE DB. 5. Haga clic en Aceptar para aplicar las propiedades y cerrar el cuadro de diálogo Propiedades de Connection.
Ficha Proveedor
Ficha Conexión
Crear un objeto Command La función Agregar comando está disponible en todo momento y es independiente de la existencia de otros objetos. Sin embargo, un objeto Command que no esté asociado con un objeto Connection no es válido. La propiedad ActiveConnection del objeto Command está establecida en el objeto Connection si la conexión puede identificarse mediante el enfoque actual durante el procedimiento de agregar. Si no se identifica un objeto Connection, el objeto Command no es válido mientras no lo asocie con una conexión. Para agregar un objeto Command
Haga clic en Agregar comando en la barra de herramientas del Diseñador de entorno de datos.
Pág. 30 de 65
O bien, Haga clic con el botón secundario del mouse en un objeto Connection o en el Diseñador de entorno de datos, y elija la opción Agregar comando del menú emergente. Después de agregar un objeto Command, la vista esquema del entorno de datos presenta el nuevo objeto Command. El nombre predeterminado del objeto es "Command", seguido de un número, como Command1. Utilice el procedimiento siguiente para especificar las propiedades del objeto Command.
Boton A re ar Comando
Para especificar las propiedades del objeto Command
1. Haga clic con el botón secundario del mouse en el objeto Connection y elija Propiedades para tener acceso al cuadro de diálogo Propiedades de Command. 2. Haga clic en la ficha General, y establezca los valores siguientes: Elemento
Proposito
Nombre de comando
Cambie el valor predeterminado de Nombre de comando por un nombre más descriptivo del objeto de base de datos. Por ejemplo, podría modificar el título Command1 por "Clientes" si el objeto Command se basa en una tabla llamada "Clientes". Si creó el objeto Command a partir del menú contextual del objeto Connection, se establece automáticamente el nombre del objeto Connection. No obstante, es posible cambiar esta
Conexión
conexión. Nota Para que sea válido, cada objeto Command debe estar asociado con un objeto Connection. Objeto datos
de
base
de Seleccione el tipo de base de datos en la lista desplegable.
Puede tratarse de un procedimiento almacenado, un sinónimo, una tabla o una vista.
Pág. 31 de 65
Nombre del objeto Seleccione un nombre de objeto en la lista desplegable. Los objetos mostrados provienen de la conexión y coinciden con el tipo del Objeto de base de datos seleccionado. O bien Instrucción SQL
Si selecciona esta opción como el origen de datos, escriba una consulta SQL válida para la base de datos en el cuadro Instrucción SQL. O bien, Para generar la consulta, haga clic en SQL Builder para iniciar eldiseñador de consultas.
3. Si el objeto Command se basa en una consulta con parámetros o en un procedimiento almacenado, puede tener una colección de parámetros. Para establecer laspropiedades de parámetro, haga clic en la ficha Parámetros del cuadro de diálogo Propiedades de Command. 4. Utilice las fichas Relación, Agrupación y Campos agregados para definir relaciones y modelar los datos incluidos en el recordset. Para obtener más información, vea Jerarquías de objetos Command. 5. Haga clic en la ficha Avanzadas del cuadro de diálogo Propiedades de Command para establecer las propiedades que cambian la forma en que se obtienen o manipulan los datos entiempo de ejecución. En esta ficha, establezca laspropiedades avanzadas que el control de entorno de datos proporciona sobre las propiedades del objeto Command y el objeto Recordset resultante. 6. Haga clic en Aceptar para aplicar las propiedades al nuevo objeto Command y cerrar el cuadro de diálogo. Si se creó correctamente el objeto Command de devolución de conjunto de registros y la opción Mostrar campos está activada en el cuadro de diálogo Opciones, puede hacer clic en el mecanismo de expansión (+)bitmap de la vista esquema del diseñador de entorno de datos para mostrar una lista de campos. Si no se ven campos, puede deberse a un objeto Recordset vacío, un objeto Command no válido o una conexión no válida.
Pág. 32 de 65
Usar un entorno de datos con la aplicación En tiempo de ejecución, el entorno de datos crea objetos Command y Connection de ADO por cada uno de los objetos Command y Connection definidos en el Diseñador de entorno de datos. También crea un objeto Recordset de ADO si el objeto Command está marcado como Devolver RecordSet (en la ficha Avanzadas del cuadro de diálogo Propiedades de Command). El objeto Command de ADO se agrega como un método del objeto de entorno de datos en tiempo de ejecución, y los objetos Connection y Recordset de ADO se agregan como propiedades. Existen dos formas de usar un entorno de datos en su aplicación en tiempo de ejecución: Como un origen de datos para un enlace directo a los controles de unformulario. Para crear por programa una instancia del entorno de datos y ejecutar sus objetos Command. Además, el entorno de datos en tiempo de ejecución contiene las colecciones Commands , Connections y Recordsets. Estas colecciones con base 1 ofrecen otro medio para el acceso por programa a los objetos de ADO, lo que permite enumerar los diversos objetos. Nota
El índice del primer miembro de la colección empieza con el número uno en las
colecciones con base 1. Los objetos de ADO tienen base 0; por tanto, las colecciones Fields y Parameters tienen base 0 y empiezan con el índice cero.
Pág. 33 de 65
El entorno de datos agrega el prefijo "rs" a los nombres de los objetos Recordset de ADO para diferenciarlos de los objetos Command correspondientes. Por ejemplo, un objeto Command denominado "Clientes" crea un objeto Recordset denominado rsClientes. De forma predeterminada, los objetos Recordset están cerrados. El objeto Recordset se abre cuando se ejecuta el método del objeto Command correspondiente. Por ejemplo, si ejecuta el método Clientes, se abre el objeto Recordset "rsClientes". Además, puede abrir un objeto Recordset directamente mediante el método Open de ADO. Con este método es posible manipular un objeto Recordset antes de abrirlo.
Situaciones para usar el Diseñador de entorno de datos Esta sección presenta situaciones que ilustran cómo puede usar el Diseñador de entorno de datos. Entre las características resaltadas están: crear una jerarquía, incluir campos agregados, agrupar y enlazar a un control Hierarchical FlexGrid.
Crear una jerarquía de relaciones entre un Cliente y una tabla Pedidos Para crear una jerarquía de relaciones entre un Cliente y una tabla Pedidos
1. Cree un objeto Command conectado a la base de datos de Northwind. 2. Seleccione la tabla "Clientes" como el origen del objeto Command. Cambie el nombre del objeto Command a "Clientes". 3. Cree un objeto Command secundario a partir del objeto Command "Cliente". Seleccione la tabla "Pedidos" como el origen del objeto secundario. Cambie el nombre del objeto Command secundario a "Pedidos". 4. Haga clic en la ficha Relación y, a continuación, vincule los objetos Command primario y secundario mediante sus campos "IdCliente".
Pág. 34 de 65
Para conocer los resultados, vea "Enlazar el entorno de datos a un control Hierarchical FlexGrid", más adelante en este mismo tema.
Incluir un campo agregado en el objeto Command "Cliente" Para incluir un campo agregado en el objeto Command "Cliente" de forma que se obtenga la suma de los importes de pedidos por cliente
1. Modifique las propiedades del objeto Command "Cliente". 2. Haga clic en la ficha Campo agregado y, a continuación, en Agregar. 3. Asigne al campo agregado el nombre "TotalPedidos". 4. Seleccione la función Sum. 5. Seleccione el comando Campo agregado de aplicado al elemento "Pedidos". 6. Seleccione "IdPedido" como el objeto Field de la función Sum. El campo agregado "TotalPedidos" se agrega al objeto DataEnvironment como un nuevo objeto Field. Entiempo de ejecución, el campo agregado "TotalPedidos" contendrá un valor calculado por cada cliente. Para conocer los resultados, vea "Enlazar el entorno de datos a un control Hierarchical FlexGrid", más adelante en este mismo tema.
Pág. 35 de 65
Agrupar el objeto Command "Cliente" por estado Para agrupar el objeto Command "Cliente" por estado
1. Modifique las propiedades del objeto Command "Cliente". 2. Haga clic en la ficha Agrupar y seleccione Agrupar comando. 3. Asigne el nombre "PorPaís" al objeto Command de agrupación. 4. Seleccione "País" en la lista Campos del comando y, a continuación, haga clic en > para mover el campo a la lista Campos utilizados para agrupar. Un objeto Recordset adicional, "PorPaís", se expone en el nivel superior del objeto Command "Clientes". Cuando enlace con control Hierarchical FlexGrid, debe usar el objeto Recordset "PorPaís" en vez del objeto Command "Clientes". Para conocer los resultados, vea "Enlazar el entorno de datos a un control Hierarchical
FlexGrid", más adelante en este mismo tema.
Incluir un campo agregado para contar el número de clientes por cada estado Para incluir un campo agregado para contar el número de clientes por cada estado
1. Modifique las propiedades del objeto Command "Cliente". 2. Haga clic en la ficha Agregados y, después, en Agregar. 3. Asigne al campo agregado el nombre "ContClientes". 4. Seleccione la función Count.
Configuracion del Command Cliente para crear agrupaciones
Pág. 36 de 65
5. Seleccione el elemento Agregar en aplicado al elemento "Agrupar". 6. Seleccione "IdCliente" como el objeto Field para Count.
Se agrega otro campo al objeto Command de resumen (agrupación). Ese objeto Field tiene un valor calculado que contiene el número de clientes por estado. Para conocer los resultados, vea "Enlazar el entorno de datos a un control Hierarchical FlexGrid", más adelante en este mismo tema.
Incluir un agregado total general para contar el número de estados en que hay clientes Para incluir un agregado total general para contar el número de los estados en que hay clientes
1. Modifique las propiedades del objeto Command "Cliente". 2. Haga clic en la ficha Agregados y, a continuación, haga clic en Agregar. 3. Asigne al campo agregado el nombre "EstadosConClientes". 4. Seleccione la función Cuenta. 5. Seleccione GrandTotal como el elemento Agregar en. 6. Seleccione "Pais" como el objeto Field. 7. Asigne a Total general el nombre "TotalGeneralClientes". Un objeto Recordset adicional, "EstadosConClientes", se expone en el nivel superior del objeto Command "Clientes". El nuevo objeto contiene el número de estados que tienen clientes.
Pág. 37 de 65
Estructura del Entorno de Datos luego de configurar las situaciones anteriores
Enlazar el entorno de datos a un control Hierarchical FlexGrid
Pág. 38 de 65
La situación siguiente se proporciona para que pueda ver los resultados de los ejemplos anteriores. Para enlazar el entorno de datos a un control Hierarchical FlexGrid
1. Después de haber completado las anteriores situaciones de entorno de datos, arrastre un control MSHFlexGrid a un formulario de Visual Basic. 2. En la hoja de propiedades de Visual Basic, establezca la propiedad DataSource con el objeto DataEnvironment que contiene el objeto Command que desea enlazar al control Hierarchical FlexGrid. Por ejemplo, especifique DataEnvironment1. 3. En la ventana Propiedades de Visual Basic, establezca la propiedad DataMember en un objeto Command primario del entorno de datos. Los datos están ahora enlazados a un control Hierarchical FlexGrid. 4. Para mostrar los datos en el control Hierarchical FlexGrid, seleccione la opción Iniciar del menú Ejecutar o presione F5. El control Hierarchical FlexGrid obtiene y muestra la estructura
Reportes en Visual Basic En esta sección veremos como generar Informes en Visual Basic a través de dos Herramientas: Data Report (Diseñador de Informes de Datos) Crystal Reports for Visual Basic
Creación de Reportes con Data Report (Diseñador de Informes de Datos) El Diseñador de informe de datos de Microsoft es un generador de informes de datos versátil con capacidad integrada de creación de informes jerárquicos por capas. Puede usarse con un origen de datos como el Diseñador de entorno de datos para crear informes con datos procedentes de muchas tablas relacionales diferentes. Permite imprimir los informes y exportarlos a archivos con formato HTML o de texto.
Caracteristicas del Diseñador de Informes de Datos El Diseñador de informe de datos tiene varias características: 1. Funcionalidad arrastrar y colocar aplicada a campos . Esta funcionalidad permite arrastrar campos del Diseñador de entorno de datos de Microsoft al
Pág. 39 de 65
Diseñador de informe de datos. Cuando utiliza esta técnica, Visual Basic crea automáticamente un control TextBox en el informe de datos y establece las propiedades DataMember y DataField del campo que ha colocado. También puede arrastrar un objeto Command del Diseñador de entorno de datos al Diseñador de informe de datos. En este caso, se creará en el informe de datos un control cuadro de texto por cada uno de los campos del objeto Command y se asignarán valores apropiados a las propiedades DataMember y DataField de cada cuadro de texto. 2. Controles del Cuadro de herramientas . El Diseñador de informe de datos posee un conjunto de controles propios. Cuando agrega un Diseñador de informe de datos al proyecto, los controles se crean automáticamente en una ficha llamada DataReport del Cuadro de herramientas. Muchos de estos controles tienen un funcionamiento idéntico a los controles intrínsecos de Visual Basic e incluyen un control Label, Shape, Image, TextBox, y Line. El sexto control (el control Function) genera automáticamente información de uno de los cuatro tipos siguientes: Sum (suma), Average (promedio), Minimum (mínimo) o Maximum (máximo). Para obtener más información acerca del control Function, vea "Agregar un control Function al informe de datos". 3. Vista preliminar. El método Show permite mostrar una vista preliminar del informe. El informe de datos se genera y se muestra en su propia ventana. Nota
Es necesario tener una impresora instalada en el equipo para poder usar el
modo de vista preliminar. 4. Impresión de informes. Es posible llamar al método PrintReport desde un programa para imprimir un informe. Cuando el informe de datos está en el modo de vista preliminar, los usuarios también pueden imprimirlo si hacen clic en el icono de impresora de la barra de herramientas. Es necesario tener una impresora instalada en el equipo para poder imprimir un informe. Nota
5. Exportación de archivos. El método ExportReport permite exportar la información del informe de datos. Los formatos de exportación incluyen HTML y texto. 6. Exportación de plantillas. Es posible crear una colección de archivos de plantilla para usarlos con el método ExportReport. Esto es conveniente para exportar informes a varios formatos, cada uno ajustado al tipo de informe. 7. Operación asíncrona. Los métodos PrintReport y ExportReports del objeto DataReport son operaciones asíncronas. El evento ProcessingTimeout permite supervisar el estado de cada una de estas operaciones y cancelarlas si llevan demasiado tiempo.
Pág. 40 de 65
Crear un Informe de Datos Sencillo Este tema muestra cómo puede crear un informe de datos sencillo mediante un Diseñador de entorno de datos utilizado como un origen de datos. El Diseñador de entorno de datos emplea la base de datos NorthWind incluida con Visual Basic para crear un sencillo cursor jerárquico. El cursor contiene dos tablas, Clientes y Pedidos, y ambas están vinculadas mediante el campo IdCliente. El informe terminado es similar a la siguiente figura.
Para insertar un cursor jerárquico sencillo en el Diseñador de entorno de datos
1. Cree un nuevo proyecto Standard EXE. 2. En el menú Proyecto, haga clic en Agregar entorno de datos para agregar un diseñador al proyecto. Si el diseñador no aparece entre las opciones del menú Proyecto, haga clic en Componentes. Haga clic en la ficha Diseñadores y en Entorno de datos para agregar el diseñador al menú. 3. En el cuadro de diálogo Propiedades de Vínculo de Datos , haga clic en Microsoft Jet 3.51 OLE DB Provider. Esta selección del cuadro de dialogo corrige el proveedor OLE DB para tener acceso a la base de datos Jet. 4. Haga clic en el botón Siguiente para llegar a la ficha Conexión. 5. Haga clic en el botón Examinar texto.
(…) que
se encuentra junto al primer cuadro de
6. Utilice el cuadro de diálogo Seleccionar base de datos de Access para desplazarse por el archivo nwind.mdb , que está instalado en el directorio Archivos de programa\Microsoft Visual Studio\Vb98. 7. Haga clic en Aceptar para cerrar este cuadro de diálogo. 8. Haga clic con el botón secundario de mouse (ratón) en el icono Connection1, y elija Cambiar nombre. Cambie el nombre del icono a Northwind.
Pág. 41 de 65
9. Haga clic con el botón secundario del mouse en el elemento Norhwind y, después, haga clic en Agregar comando para mostrar el cuadro de diálogo Command1 . En el cuadro de diálogo, establezca las propiedades como se indica a continuación: Propiedad Nombre de Comando Conexión Objeto de Base de Datos Nombre de Objeto
Valor Clientes Northwind Tabla Clientes
10. Haga clic en Aceptar para cerrar el cuadro de diálogo. 11. Haga clic con el botón secundario del mouse (ratón) en el comando Clientes y haga clic en Agregar comando secundario para mostrar el cuadro de diálogo Command2 . En el cuadro de diálogo, establezca las propiedades como se indica a
continuación: Propiedad Nombre de Comando Conexión Objeto de Base de Datos Nombre de Objeto
Valor Pedidos Northwind Tabla Pedidos
12. Haga clic en la ficha Relación. La casilla de verificación Relacionar con un comando primario debería estar activada. El cuadro Primario debería contener Clientes; los cuadros Campos primarios y Campos secundarios y parámetros deberían mostrar IdCliente. 13. Haga clic en Agregar. Haga clic en Aceptar para cerrar el cuadro de diálogo. 14. Establezca las propiedades del proyecto y del diseñador según los valores indicados a continuación y, después, guarde el proyecto: Objeto Project DataEnvironment Form
Propiedad Name Name Name
Valor prjNwind deNwind frmShow
Crear el informe de datos Después de haber creado el Diseñador de entorno de datos, puede crear un informe de datos. Debido a que no todos los campos del entorno de datos son siempre útiles en un informe, los siguientes temas muestran cómo puede crear un informe limitado que muestra sólo unos pocos campos. Para crear un nuevo informe de datos :
1. En el menú Proyecto, haga clic en Agregar informe de datos; Visual Basic agregará el informe de datos al proyecto. Si el diseñador no aparece en el menú Proyecto, haga clic en Componentes. Haga clic en la ficha Diseñadores y en Informe de datos para agregar el diseñador al menú.
Pág. 42 de 65
El menú Proyecto proporciona la lista de los cuatro primeros tipos de diseñadores ActiveX cargados. Si se cargan más de cuatro diseñadores, los siguientes aparecerán en el submenú Más diseñadores ActiveX del menú Proyecto. Nota
2. Establezca las propiedades del objeto DataReport según la tabla siguiente: Propiedad Name Caption
Valor rptNwind Informe de Datos NORTHWIND
3. En la ventana Propiedades, haga clic en DataSource y, después, en deNwind. A continuación, haga clic en DataMember y en Clientes. 4. Haga clic con el botón secundario del mouse (ratón) en el Diseñador de informe de datos y en Obtener estructura. 5. Arrastre el campo NombreCompañía (bajo el comando Clientes) del Diseñador de entorno de datos a la sección Encabezado de grupo (Clientes_Encabezado). 6. Elimine el control Label (rptLabel) denominado Etiqueta1. 7. Arrastre el campo FechaPedido (bajo el comando Pedidos) del Diseñador de entorno de datos a la sección Detalles de pedidos. Elimine el control Label. 8. Cambie el tamaño de las secciones del Diseñador de informe de datos para que sea similar a la figura siguiente:
Es importante que cambie el alto de la sección Detalles de pedidos para que sea lo más corta posible, ya que el alto se multiplicará por cada uno de los objetos FechaPedido devueltos por NombreCompañía. Cualquier espacio innecesario por encima o por debajo del cuadro de texto FechaPedido aumentará la cantidad de espacio sin usar en el informe final. 9.
Guarde el Proyecto.
Pág. 43 de 65
Vista Preliminar del Informe de Datos con el Método Show Ahora que se han creado los objetos del entorno de datos y del informe de datos, casi ha llegado el momento de ejecutar el proyecto. Solamente queda un paso: escribir código para mostrar el informe de datos. Para mostrar el informe de datos en tiempo de ejecución:
1. En la ventana Explorador de proyectos, haga doble clic en el icono frmShow para mostrar el Diseñador de formularios. 2. En Cuadro de herramientas, haga clic en la ficha General. 3. Cuando agrega un Diseñador de informe de datos al proyecto, sus controles se agregan a la ficha denominada DataReport. Para usar los controles estándar de Visual Basic, debe cambiar a la ficha General. 4. Haga clic en el icono CommandButton y dibuje un botón de comando en el formulario. 5. Establezca las propiedades del control Command1 como se indica en la tabla siguiente: Propiedad Name Caption
Valor cmdShow Mostrar Informe
6. En el evento Click del botón, pegue el código siguiente: Private Sub cmdShow_Click() rptNwind.Show End Sub
7. Guarde y ejecute el proyecto. 8. Haga clic en Mostrar informe para mostrar el informe en el modo de vista preliminar.
Imprimir un informe de datos Existen dos maneras de imprimir un informe de datos. En modo Vista preliminar (mediante el método Show), el usuario puede hacer clic en el botón Imprimir del informe de datos o bien el propio programa puede usar el método PrintReport para habilitar la impresión. Si se produce un error durante la impresión, puede interceptarlo con el evento Error.
Decidir si se muestra un cuadro de diálogo Imprimir Cuando imprima un informe por programa, tiene dos opciones: mostrar en pantalla el cuadro de diálogo Imprimir o imprimir directamente sin presentar el cuadro de diálogo.
Pág. 44 de 65
Para mostrar el cuadro de diálogo Imprimir:
1. Agregue un control CommandButton a un formulario. 2. En el evento Click del botón, escriba el código siguiente: DataReport1.PrintReport True
El cuadro de diálogo Imprimir permite al usuario seleccionar una impresora, imprimir a un archivo, seleccionar un intervalo de páginas o especificar el número de copias para imprimir. Nota Es necesario tener varias impresoras instaladas en el equipo para poder elegir una de ellas.
Imprimir sin un cuadro de diálogo En algunos casos es preferible imprimir el informe sin la intervención del usuario. El método PrintReport ofrece también la posibilidad de imprimir todas las páginas o sólo un intervalo de páginas seleccionado. Para imprimir sin mostrar el cuadro de diálogo:
1. Agregue un control CommandButton a un formulario.
2. En el evento Click del botón, escriba el código siguiente: DataReport1.PrintReport False
O bien, utilice el código siguiente para especificar un intervalo de páginas para imprimir: DataReport1.PrintReport False, rptRangeFromTo, 1, 2
Controles del informe de datos Cuando agrega un nuevo Diseñador de informe de datos a un proyecto, los controles siguientes se insertan automáticamente en la ficha DataReport del Cuadro de herramientas: Control TextBox (RptTextBox): permite dar formato al texto o asignar un objeto DataFormat. Control Label (RptLabel): permite colocar etiquetas para identificar los campos o las secciones del informe. Control Image (RptImage): permite insertar gráficos en el informe. Observe que no es posible enlazar este control con un campo de datos. Control Line (RptLine): permite dibujar reglas en el informe para distinguir mejor las secciones. Control Shape (RptShape): permite insertar rectángulos, triángulos o círculos (y óvalos) en un informe. Control Function (RptFunction): un cuadro de texto especial que calcula valores a medida que se genera el informe.
Pág. 45 de 65
rptTextBox
rptLabel
rptLine
rptImage rptShape
rptFunction
Cuadro de Herramientas del Diseñador de Informes de Datos
Diseñando Informes con Crystal Reports Crystal Reports es un paquete sobre informes que se incluye en Visual Basic, le permite crear informes a partir de muchos tipos de origenes de datos. Es posible probar y diseñar y probar informes graficamente por medio del diseñador Crystal Reports . El diseño del informe y otra informacion estan almacenados en un
archivo personalizado Crystal Reports, provisto de la extensión .rpt . Tras haber creado el archivo, podra usar cualquiera de los siguientes metodos para mostrar el informe al usuario: El control Crystal Reports proporciona una manera sencilla de integrar los informes terminados en su programa de Visual Basic. La API Crystal Reports le permite acceder al motor Crystal Reports sin tener que usar el control. Todas las llamadas de la API a los Crystal Reports estan ubicadas en un archivo llamado GLOBAL32.BAS que debe estar instalado en el directorio de programas Crystal Reports.
Creación de un nuevo Informe: En el menu Archivo, elija la opcion Nuevo, aparecerá el cuadro de dialogo Crear Informe Nuevo, como se ve en la siguiente figura:
Pág. 46 de 65
Como podemos ver, es posible elegir entre varios tipos diferentes de informes. Si se selecciona uno de los tipos preferidos, se podra usar el asistente para crear el informe.
Creación de un informe desde cero Para continuar con el proyecto de muestra de la base de datos BIBLIO, haga click en el boton Personalizado (Custom) para acceder al cuadro de dialogo Elija un tipo de Informe y un tipo de dato (Choose Report Type and Data Type) .
Asegúrese que el boton Informe Personalizado este seleccionado, y haga click en el boton Archivo (Data File)
Seleccione la base de datos BIBLIO que viene con Visual Basic
Pág. 47 de 65
Una vez que haya seleccionado el archivo de bases de datos, deberá aparecer automaticamente el cuadro de dialogo Insertar campo de base de datos (Insert Database Field), que se muestra en la figura. Este cuadro de dialogo le permite especificar que campos se incluiran en el informe.
Como ejemplo, seleccione el campo Author de la tabla Authors y el campo Title de la tabla Titles. Para realizar este proceso, debera hacerlo cuidadosamente: 1. Haga click en el campo Authors 2. Haga click en Insertar (Insert) 3. Lleve el puntero del Mouse sobre el area de Detalle (Detail) y luego haga click donde desee que este el campo 4. El campo queda insertado Repita estos pasos para el campo Titles de la tabla Titles, de tal manera que la pantalla principal del Crystal reports tenga la apariencia que se muestra en la figura de la pagina siguiente:
Pág. 48 de 65
Pruebe el informe haciendo click en el boton de la barra de herramientas que posee el icono de un rayo. La accion de pulsar este boton activa el modo de vista previa, lo cual le permite ver el aspecto que tendra el informe con los registros de la base de datos. Para guardar el informe, pulse el boton Guardar (Save) o menú Archivo, Guardar (File, Save) .
Creación de un Informe usando el Asistente El uso del asistente para la creacion de informes es otra forma de crear el informe. Desde el cuadro de dialogo Crear un informe nuevo, pulse el tipo de informe que desee. Las elecciones disponibles son: Estandar Listado Referencia Correo Resumen Gráfico N Primeros Detallado La figura siguiente muestra la primera pantalla del asistente, en la que hay que especificar un origen de datos.
Pág. 49 de 65
Cuando termine de crear el informe, aun podrá modificarlo usando las caracteristicas de diseño.
Personalizar el Informe Tipos de campo Desde el menú Insertar (Insert) , se puede elegir entre varios tipos de campo distintos: Campo de bases de datos Campo de texto Campo de formula Campo de parámetro Campo Especial
Agregar una fórmula de selección Desde el menú Informe, se puede cambiar la fórmula de selección del informe. Una fórmula de selección le permite filtrar los registros desplegados desde dentro del Crystal. Fuciona de forma muy parecida a la cláusula WHERE de una instrucción SQL, pero se presenta en un formato algo diferente. El cuadro de diálogo Fórmula de selección de registros le permite filtrar registros mediante la selección de
campos aplicables y sus respectivos criterios de selección. La instrucción de
Pág. 50 de 65
criterios la genera automaticamente el cuadro de dialogo de la figura siguiente, que muestra como filtro a los autores nacidos durante o despues de 1950
Uso del Control Crystal Report Una vez que se termina el diseño del reporte, deberá guardar un archivo . rpt en el disco duro. Puede usar este archivo en conjuncion con el Control Crystal Reports, con el fin de mostrar el informe desde una aplicación de Visual Basic Una vez estando en Visual Basic, realice los siguientes pasos: 1. En el Menú Proyecto, elija Componentes 2. Marque la casilla de verificacion Crystal Report Control 4.6 (o la version que Ud. tenga) 3. Inserte el control en el formulario
Modificando propiedades del Control Crystal Report La propiedad que debe especificarse de manera obligatoria es la propiedad ReportFileName, para especificar la ruta de acceso al archivo .RPT que se creara con el diseñador de Informes. Esta propiedad puede modificarse en tiempo de diseño o en tiempo de ejecución. CrystalReport1.ReportFileName = “c:\reporte.rpt”
En tiempo de diseño sería con la pagina de propiedades del control, para completar el ejemplo, configure la propiedad ReportFileName en tiempo de diseño, y sera suficiente:
Pág. 51 de 65
(ver página siguiente.....)
Establecer propiedades opcionales: Es posible, como si se tratara de cualquier otro control, modificar algunas propiedades, por ejemplo, la propiedad SelectionFormula: CrystalReport1.SelectionFormula = “{Authors.Year Born} >= 1955”
Tambien se pueden usar expresiones con los operadores And y Or
Mostrar el Informe Para mostrar el informe desde un formulario, coloque un boton de comando en el formulario y escriba la siguiente linea de codigo Private sub Command1_Click() CrystalReport1.PrintReport End Sub
Pág. 52 de 65
Resultado de la impresión
Pág. 53 de 65
Laboratorios CONTROL ADODC Y CONTROLES ENLAZADOS Lab 01: Agregando y Configurando un Control ADODC Duración: 10 Min. Tareas: 1. Inicie Microsoft Visual Basic 6.0 y cree un Proyecto .EXE Estándar 2. En el cuadro de Diálogo Componentes del Menú Proyecto, marque la casilla de verificación Microsoft ADO Data Control 6.0 3. Dibuje el control en la parte Inferior del Formulario 4. Haga click con el botón derecho sobre el control Adodc1 y elija la opción Propiedades de ADODC:
a. Haga Click en la opción Usar Cadena de Conexión , luego haga click en el botón Generar... b. Elija el Proveedor de datos Microsoft OLE DB Provider for ODBC Drivers c. Configure el control de tal manera que se conecte con la base de datos Biblio que viene con Visual Basic ya sea con o sin cadena de conexión d. Escoja como tabla: Authors en la Ficha Origen de Registros del Cuadro de dialogo Propiedades de ADODC. 5. Cual cree Ud. que es mejor método para crear una conexión: Con DSN o sin DSN ____________________________________________________________________ ____________________________________________________________________ _____________________________________________________________ 6. Guarde el Proyecto con el Nombre: pjtADODC
Lab 02: Agregando y Configurando Controles Enlazados a Datos Duración: 10 Minutos Tareas: 1. Si no esta iniciado Visual Basic, hágalo ahora 2. En el cuadro de dialogo Nuevo Proyecto haga uso de la Ficha Existente o Resiente para abrir el Proyecto pjtADODC 3. Agregue 3 Cuadros de Texto al formulario a. Seleccione el primer Cuadro de Texto
Pág. 54 de 65
i. En la ventana Propiedades ubique la propiedad DataSource y elija la opción Adodc1 ii. Ahora ubique la propiedad DataField y escoja el campo Au_ID iii. Repita los pasos i y ii con los dos cuadros de texto sobrantes escogiendo los campos Author y Year Born respectivamente b. Una vez concluida la configuración de Cada Cuadro de texto, Guarde los cambios al Proyecto y luego ejecute la aplicación, pulsando F5 o escogiendo la opcion Iniciar del Menú Ejecutar. 4. El formulario muestra los datos del Primer registro?:__________________________ 5. Use los botones de Navegación que estan en el control Adodc1 y vea como los datos de la tabla Authors se refrescan en el formulario Nota: No todos los registros cuentan con el campo Year Born lleno
Lab 03: Agregando, Actualizando y Eliminando Datos a través de Código Duración: 25 Minutos Tareas: 1. Si no ha iniciado Visual Basic, hágalo ahora... 2. Abra el Proyecto pjtADODC 3. Agregue 03 Botones de comando al formulario: a. Asígneles el Título Nuevo, Guardar y Eliminar a cada uno b. En el evento Click de cada Boton de comando use los métodos AddNew , Update y Eliminar para Agregar, Guardar y Eliminar respectivamente. 4. Ejecute el formulario. 5. Agregue un Nuevo Registro e Ingrese estos datos: a. Juan Pérez b. 1975 6. NO ESCRIBA NADA EL EL PRIMER CUADRO DE TEXTO, es Autonumérico! 7. Use el boton para Ir al Primer Registro y luego para Ir Al Ultimo 8. Verifique que los datos esten ya almacenados 9. Agregue otro Registro mas, usando datos Inventados por Ud. 10. Asegurese de estar en el ultimo registro de la tabla y elimine el ultimo registro añadido. 11. Ahora elimine el anterior 12. Pudieron eliminarse ambos registros?:________________________________ 13. Se actualizan los datos una vez eliminados estos registros?:_______________ 14. Cierre el formulario 15. Guarde los cambios a su proyecto Nota: El campo autonumerico se actualiza la siguiente vez que ejecute su proyecto
Pág. 55 de 65
Lab 04: Agregando, Configurando y Usando el Control DataGrid Duración: 10 Minutos Tareas: 1. Si no ha iniciado Visual Basic, hágalo ahora 2. Abra el Proyecto pjtADODC 3. Acomode los controles dejando un espacio considerable en la segunda mitad del formulario, (si es necesatio ajuste el tamaño del form) 4. En el Menú Proyecto, haga Click en Componentes 5. En el cuadro de dialogo de Componentes, marque la casilla de verificacion: Microsoft DataGrid Control 6.0, luego haga Click en Aceptar
6. Dibuje el Control en el formulario de tal manera que cubra la mitad restante del formulario descrita en el paso 3. 7. En la ventana de Propiedades ubique la propiedad DataSource y especifique el valor Adodc1 8. Sobre el Control DataGrid, haga Click con el Botón Derecho y en el menú contextual que se despliega, haga click en la opción Recuperar Campos , (aparece un mensaje de advertencia, haga click en Sí) 9. Ejecute el formulario 10. Utilice los botones qe navegación y observe como el marcador de registros del DataGrid se moviliza tambien
11. Use los botones Nuevo y Agregar que Ud. creó en el Lab 03 .Agregue y grabe 2 registros 12. Se visualizan simultáneamente en el DataGrid? _____________________________ 13. Ahora use el Botón Eliminar para eliminar estos dos registros 14. Se visualizan estas eliminaciones en el DataGrid?____________________________
Nota: Para cambiar aspectos de formato de presentacion del DataGrid, puede usar las Propiedades Personalizadas de este control, o boton derecho Propiedades
Pág. 56 de 65
ADO Y EL MODELO DE OBJETOS DE ADO Lab 01: Realizando una Conexión con ADO utilizando DSN Duración: 20 Min. Tareas: 1. Inicie Microsoft Visual Basic si no esta iniciado 2. Abra el Panel de Control de Windows 3. Creación del DSN: a. En el Panel de Control haga doble click en el Icono Origenes de datos ODBC b. En la ficha DSN de usuario haga click en el botón Agregar c. En la pantalla Crear nuevo origen de Datos haga click en el controlador Microsoft Access Driver (*.mdb)
d. Haga click en el botón Finalizar e. En la pantalla Configuracion de ODBC de Microsoft Access : i. En Nombre de Origen de datos escriba NORTHWIND ii. En Descripción (opcional) escriba: Origen de datos de usuario iii. En el area Base de Datos, haga click en Seleccionar y ubique la base de datos NWIND.MDB que viene con Visual Basic iv. Finalmente haga click en el botón Aceptar
Pág. 57 de 65
(ver figura para comparar....)
f.
Cierre la pantalla de Origenes de datos ODBC y luego cierre el Panel de Control
4. Vuelva a Microsoft Visual Basic 5. Estableciendo la conexión: a. Para establecer referencia a los objetos de datos ActiveX (ADO), haga click en la opción Referencias del Menú Proyecto, luego haga click en la casilla de verificación Microsoft ActiveX Data Objects 2.5 Library ( o la versión que Ud. tenga) b. Haga click en Aceptar c. En el Menú Ver elija la opción Código d. En la sección de declaraciones del formulario declare la variable Cnx como tipo ADODB.Connection e. En el evento Load del formulario establezca un valor para la variable Cnx con la instrucción Set y luego abra la conexión con el método Open del Objeto Cnx, haciendo referencia al DSN NORTHWIND f.
Ejecute el formulario
g. Al momento de ejecutarse el formulario ocurrió algun error en tiempo de ejecución?_____________________________________________________ h. Tómese unos minutos para depurar algún error que tenga en su código. Si no ocurrió ningun error al momento de ejecutar el formulario, significa que la conexión se ha realizado exitosamente. 6. Guarde el proyecto con el nombre pjtConDSN
Pág. 58 de 65
Lab 02: Estableciendo una Conexión sin DSN Duración: 10 Min. Tareas: 1. Cree un Nuevo Proyecto .EXE ESTANDAR 2. Haga Referencia a los Objetos de Datos ActiveX (como en el Lab anterior) 3. En la sección de declaraciones del Formulario Declare la variable Cnx como tipo ADODB.Connection 4. Instancie el objeto Cnx con la Instrucción Set en el evento Load del Formulario 5. Escriba el siguiente codigo despues de instanciar (en una sola línea): Cn.ConnectionString = “Driver=Microsoft Access Driver (*.mdb);DBQ= C: \Archivos de programa\Microsoft Visual Studio\VB98\ NWIND.MDB”
6. Ejecute el formulario 7. Si no hay errores devueltos en tiempo de ejecución quiere decir que la conexión se realizó de manera exitosa 8. Guarde el Proyecto con el nombre pjtSinDSN 9. Cierre Microsoft Visual Basic
Lab03: Laboratorio de Desarrollo 1. Trabajando con Recordsets Duración: 25 Minutos (valor aprox.) Tareas: 1. Diseñar un formulario que muestre los 4 primeros campos de la tabla Clientes de la base de datos Northwind y Crear los Botones de Navegación necesarios con las consistencias adecuadas. El formulario debe tener un boton para Salir, debidamente codificado. (Ver figura para diseñar)
Pág. 59 de 65
Lab 04: Laboratorio de Desarrollo 2. Creando una aplicación para mantenimiento basado en una base de datos creada por el alumno. Duración:45 Min. Tareas: 1. Abrir Microsoft Access 2. Crear una base de datos en blanco con el Nombre Test 3. En la base de datos crear una Tabla llamada Contactos IdContacto Nombres Apellidos Edad FechaDeNacimiento
Texto Texto Texto Numerico Fecha/Hora
4. Utilizando la Hoja de Datos agregue 2 registros a esta tabla 5. Cierre la Hoja de Datos 6. Cierre Microsoft Access 7. Abra Microsoft Visual Basic y cree un nuevo Proyecto .EXE Estandar 8. Desarrolle una aplicación que haga las siguientes tareas: a. Realizar un conexión con la base de datos Test con o sin DSN b. Crear botones de navegación c. Que Haga mantenimiento Básico a la tabla Contactos (Ingreso, Modificación y Eliminación de registros) d. Rutina de búsqueda (método Find) e. Consistencias para habilitar y deshabilitar cuadros de textos según sea el caso.
9. Ud. puede agregar otras prestaciones a la aplicación, como por ejemplo el uso de las siguientes caracteristicas: a. Uso de la Propiedad CursorType b. Uso del Objeto command para recuperacion de registros (método alternativo al tradicional) c. Probar un Recordset Desconectado y Reconectarlo
Pág. 60 de 65
ACERCA DEL DISEÑADOR DE ENTORNO DE DATOS (DATA ENVIRONMENT) Lab 01: Creando un Proyecto de Datos y Configurando un DataEnvironment Duración: 20 Min. Tareas: 1. Abra Microsoft Visual Basic 2. En la ventana Nuevo Proyecto haga doble click en la plantilla de desarrollo Proyecto de Datos (Visual basic agrega automáticamente un DataEnvironment y un DataReport al proyecto .EXE Estandar) 3. Haga doble click en DataEnvironment1 (en el Explorador de Proyectos) 4. En la ventana de Propiedades ubique la propiedad Nombre y coloque como nombre DEnv 5. Configurando la Conexión a la Base de Datos Northwind: a. Dentro del DataEnvironment haga click con el boton derecho sobre el nodo Connection1 y elija la opcion Propiedades b. Con el proveedor predeterminado haga click en el boton Siguiente c. Como se tiene creado un DSN de usuario , en el area Usar el nombre de origen de datos, seleccione el origen NORTHWIND, (si desea hacerlo sin DSN, haga click en Usar cadena de conexión y luego en Generar...) d. Haga click en Probar Conexión para comprobar que la conexión se realiza correctamente e. No escriba nada en inicio de sesion en el servidor porque la base de datos es local f.
Haga click en el boton Aceptar (nada mas configuraremos por ahora)
6. Agregando y configurando un Objeto Command : a. Haga click con el boton derecho sobre Connection1 y elija la opción Agregar comando b. En el cuadro de texto nombre de comando escriba Clientes, (verifique que en conexión este especificado el nombre de Connection1) c. En Objeto de Base de Datos , desplegue y elija la opcion Tabla d. En Nombre de Objeto elija la tabla Clientes e. Haga click en Aplicar y luego en Aceptar 7. Ahora ya estan configuradas la conexión y el comando. Guarde este proyecto con el nombre pjtClientes
Pág. 61 de 65
Lab 02: Usar el Entorno de Datos con la Aplicación Duración: 20 Min. Tareas: 1. Abra Microsoft Visual Basic y abra el proyecto pjtClientes 2. Asegúrese que este visible el DataEnvironment solamente 3. Usando el Explorador de proyectos haga doble click sobre el formulario frmDataEnv 4. En el menú Ventana elija la opción Mozaico Horizontal 5. Para diseñar el formulario correctamente, siga los siguientes pasos: a. Ubique el nodo Clientes del DataEnvironment b. Arrastre el nodo Clientes sobre la superficie del formulario, (de preferencia lo mas arriba que pueda ). c. Visual Basic se encarga de diseñar y configurar adecuadamente cada cuadro de texto (o el control correspondiente). 6. Ejecute el formulario y verifique que muestra los datos del Primer Registro 7. Creando botones de Navegación: a. Diseñe 4 botones de comando en el formulario b. En el evento Click de cada uno de estos botones escriba el siguiente codigo: Private Sub Command1_Click() DEnv.rsClientes.MoveFirst
„Primero
End Sub Private Sub Command2_Click() DEnv.rsClientes.MovePrevious „Anterior
If DEnv.rsClientes.BOF Then DEnv.rsClientes.MoveFirst End Sub Private Sub Command3_Click() DEnv.rsClientes.MoveNext „Siguiente If DEnv.rsClientes.EOF Then DEnv.rsClientes.MoveLast End Sub Private Sub Command4_Click() DEnv.rsClientes.MoveLast „Ultimo
End Sub
8. Ejecute el formulario 9. Compruebe que los botones de navegación funcionan 10. Guarde los cambios al proyecto. 11. Repita al Lab anterior y este con la Base de datos Test. Cree un Nuevo Proyecto de Datos y guarde el Proyecto con el nombre pjtTest (tiempo: 25 a 30 minutos). Realizar este proyecto para poder realizar el siguiente Lab
Pág. 62 de 65
Lab 03: Labotarorio de Desarrollo 1. Creando una aplicación de mantenimiento usando DataEnvironment Duración 45 Minutos Tareas: 1. Realizar una aplicación que utilice el Proyecto pjtTest de tal manera que puedan añadirse las siguientes prestaciones: a. Mantenimiento Basico (Ingreso, Modificacion y Eliminación) b. Administración de cuadros de textos (o elcontrol correspondiente) para su habilitación o deshabilitación según sea el caso (nuevo, modificar, eliminar) c. Creación de una rutina de búsqueda de registros d. Uso del DataEnvironment para completar estas tareas 2. Guarde el Proyecto adecuadamente
Pág. 63 de 65
REPORTES EN VISUAL BASIC Lab 01: Laboratorio de Desarrollo 1. Añadiendo un Informe de Datos al Proyecto pjtTest Duración: 20 Minutos Tareas: 1. Abra el Proyecto pjtTest 2. Siguiendo los pasos especificados en el Capitulo que habla del diseñador de Informes de Datos (DataReport). Crear un informe para la Tabla Contactos, que pueda ejecutarse desde el formulario 3. Al DataReport, asignar el nombre de DRep 4. No olvidarse de guardar los cambios adecuadamete al proyecto
Lab 02: Laboratorio de Desarrollo 2. Añadiendo un Informe diseñado con Crystal Reports al proyecto pjtTest Duración: 20 Minutos Tareas: 1. Abra el Proyecto pjtTest 2. Añada el Componente Crystal Report Controlal cuadro de herramientas de controles 3. Abra Crystal Reports 4. Diseñe el Informe de Datos siguiendo los pasos especificados en el manual, esto para la tabla Contactos de la base de datos Test 5. Ejecute el informe desde el formulario usando el control añadido 6. Guardar los cambios al proyecto
Analice las ventajas y desventajas de cada diseñador de informes
Pág. 64 de 65