Vous êtes sur la page 1sur 452

Programacin con

Microsoft Access 2000.


Macros y Visual Basic
para aplicaciones
Evan Callahan

Traduccin

LUIS HERNNDEZ YEZ


Profesor Titular de Lenguajes y Sistemas Informticos
Departamento de Sistemas Informticos y Programacin
Universidad Complutense de Madrid
Revisin tcnica

ANTONIO VAQUERO SNCHEZ


Catedrtico de Lenguajes y Sistemas Informticos
Departamento de Sistemas Informticos y Programacin
Universidad Complutense de Madrid

MADRID BUENOS AIRES CARACAS GUATEMALA LISBOA MXICO


NUEVA YORK PANAM SAN JUAN. SANTAF DE BOGOT SANTIAGO. SO PAULO
AUCKLAND HAMBURGO LONDRES MILN MONTREAL NUEVA DELHl PAR&
SAN FRANCISCO SIDNEY SINGAPUR ST. LOUIS TOKIO TORONTO

r"t
A

PROGRAMACI~NCON MICROSOFT ACCESS 2000.


Macros y Visual Basic para aplicaciones
No est permitida la reproduccin total o parcial de este libro, ni su tratamiento informtico, ni la transmisin de ninguna forma o por cualquier medio, ya sea electrnico,
mecnico, por fotocopia, por registro u otros mtodos, sin el permiso previo y por escrito de los titulares del Copyright.
DERECHOS RESERVADOS O 1999, respecto a la primera edicin en espaol, por
McGRAW-HILLDNTERAMERICANADE ESPANA, S. A. U.
Edificio Valrealty, 1." planta
Basauri, 17
28023 Aravaca (Madrid)
Traducido de la primera edicin en ingls de
Microsoft Access 2000. Visual Basic for Applications Fundamentals
ISBN: 0-7356-0592-0
Copyright O 1999, por Evan Callahan
Copyright de la edicin original en lengua inglesa O 1999, por Microsoft Corporation
ActiveX, FrontPage, Internet Explorer logo, Outlook, Microsoft, Microsoft Press,
Visual Basic, Windows, and Windows NT are either registered trademarks or trademarks of Microsoft Corporation in the United States andor other countries. Other product and company names mentioned herein may be the trademarks of their respective
owners.
Publicado por McGraw-HilllInteramericana de Espaa por acuerdo con el editor original, Microsoft Corporation. Redmond. Washington. EE. UU.
ISBN: 84-48 1-25 16-9
Depsito legal: M. 24.478-2001
Editora: Mercedes Franco Calvo
Compuesto en Evolution, S. L.
Impreso en Lavel, S. A.
IMPRESO EN ESPANA - PRINTED IN SPAIN

Evan Callahan es propietario de Callahan Software Solutions, una firma


consultora especializada en Microsoft Access. Trabaj para Microsoft
Corporation desde 1989 hasta 1995, donde cre documentacin, Ayuda en
lnea y aplicaciones de ejemplo para Microsoft Access y Visual Basic.
Tiene un B.A. en Filosofa y Literatura comparativa por la Universidad
de Washington.

Naci y creci en Seattle, Washington y, en su tiempo libre, disfruta


esquiando y patinando, componiendo msica y estando cerca de su familia
y amigos.
Otros libros publicados por Evan Callahan, dentro de la serie Microsoft
Press, son Microsoft Access 97 Visual Basic Paso a paso y The Power
of lntranets: Creating Workgroup Web Sites with Microsoft Ofice 2000
y FrontPage 2000.

Contenido

Agradecimientos

xiii
-E

Introduccin

Parte l.

Automatizacin de tareas de base de datos

Captulo 1.

Cmo empezar rpidamente mediante los asistentes

Uso de los asistentes para el desarrollo de aplicaciones 4


Creacin de una base de datos con el Asistente para bases de datos
Qu ms ha creado el Asistente? 8
Introduccin de informacin en la base de datos
10
Uso de datos existentes con una base de datos nueva
11
Inclusin de un objeto en nuestra aplicacin
14
Inclusin de un botn de orden en un formulario 18
Creacin de otros botones de orden 22
Resumen del captulo 24
Avance del siguiente captulo 25

Captulo 2.

xv

Personalizacin de una aplicacin con Visual Basic

27

Personalizacin de un botn de orden 28


'i
Visualizacin del cdigo Visual Basic que hay detrs
de la aplicacin 30
Modificacin de un botn de orden creado con el asistente 34
Aplicacin por omisin del modo slo-lectura a un formulario 40
Creacin de un botn de orden sin utilizar el asistente 42
Creacin de procedimientos de evento para eventos de formulario 49

Visualizacin de un mensaje para el usuario


Resumen del captulo 55
Avance del siguiente captulo 56

Captulo 3.

52

Localizacin y filtrado de registros en un formulario

57

Creacin de un cuadro combinado para localizar registros 58


Filtrado de datos 67
Respuesta a eventos de filtrado 68
Uso de la instruccin If.. .Then para comprobar una condicin 70
Comprensin de las propiedades de filtrado 7 1
Uso de la ventana Inmediato para ver y asignar propiedades 72
Creacin de un grupo de opciones para filtrar datos 75
Resumen del captulo
84
Avance del siguiente captulo
85

Captulo 4.

Respuesta a eventos de entrada de datos

87

Funcionamiento de los eventos de formulario y control


88
Acciones realizadas mientras el usuario se desplaza por el formulario
Acciones realizadas mientras el usuario modifica datos 94
Asignacin auto-mgica del valor de un control 94
Respuesta a los eventos de teclado 98
Validacin de datos
101
Validacin de datos mediante un procedimiento de evento
105
Formulacin de una pregunta al usuario
109
Resumen del captulo
112
Avance del siguiente captulo
113

Parte 11.
Captulo 5.

Programacin en Visual Basic


Escriba sus propias funciones

117

Funcionamiento de los mdulos y los procedimientos


118
Por qu crear procedimientos generales?
118
Mdulos estndar y mdulos de formulario
119
Creacin de procedimientos generales en un mdulo estndar
Uso de la seccin de declaraciones
121
122
Declaracin de valores constantes
Creacin de un procedimiento Sub
123

120

90

Inclusin de argumentos en un procedimiento 126


Creacin de una funcin
127
Uso de procedimientos generales en un formulario
131
Creacin de funciones generales en un mdulo de formulano
Tantas opciones y tan pocas reglas
140
Resumen del captulo
142
Avance del siguiente captulo
143

Leccin 6.

Seguimiento y depuracin del cdigo

134

145

Seguimiento del cdigo lnea a lnea


146
Colocacin de un punto de interrupcin que detenga la ejecucin
del cdigo
147
Paso de un procedimiento a otro
151
154
Seguimiento de las variables y otros valores
159
Localizacin y correccin de errores en el cdigo
Cmo indicar a Visual Basic que verifique el cdigo
164
Resumen del captulo
171
Avance del siguiente captulo
172

Captulo 7.

Respuesta a errores y condiciones no esperadas

173

Sustitucin de los mensajes de error estndar


174
. Respuesta al evento Error
175
Visualizacin de nuestro propio mensaje para un error especfico
Respuesta a un error de cuadro combinado
181
Creacin de rutinas para el manejo de errores
186
Manejo de errores ocurridos cuando la aplicacin es de slo-lectura
Anticipacin a otros problemas que causan errores
192
Resumen del captulo
195
Avance del siguiente captulo
196

Parte III.
Captulo 8.

178
187

Creacin de una aplicacin personalizada


Obtencin de informacin en un cuadro de dilogo

199

Creacin de una aplicacin desde el principio 200


Uso de cuadros de dilogo en las aplicaciones 202
Creacin de un cuadro de dilogo para ir a un registro especfico
Filtrado de datos en un informe 223

204

Resumen del captulo 233


Avance del siguiente captulo

Captulo 9.

234

Exploracin de la aplicacin

235

Colaboracin entre formularios 236


Visualizacin de registros relacionados en un formulario emergente
Apertura de un formulario para aadir registros relacionados 248
Resumen del captulo 257
Avance del siguiente captulo 259

238

Creacin de mens y barras de herramientas


personalizados 261

Captulo 10.

Uso de mens y barras de herramientas en la interfaz de usuario 262


Creacin de una barra de mens personalizada 263
Personalizacin de barras de herramientas 275
Creacin de una barra de herramientas propia para.el formulario
Suscriptores 276
Creacin de botones de barra de herramientas para ejecutar cdigo
Visual Basic 28 1
Resumen del captulo 285
Avance del siguiente captulo 286

Captulo 11. -

r
Parte IV.
Captulo 12.

Toques finales a la aplicacin

287

Control del inicio de la aplicacin 288


Inclusin de un formulario inicial en la aplicacin 289
Detalles del formulario Panel Principal de la aplicacin 290
Personali~acindel aspecto de la aplicacin 294
Sustitucin de la pantalla de presentacin de Access 297
Preparacin para distribuir la aplicacin a los usuarios 298
Resumen del captulo 303
Avance del siguiente captulo 305

Trabajo con datos y objetos


Exploracin de objetos y colecciones

309

Presentacin de la aplicacin Seguimiento de problemas


Cmo funcionan los objetos y las colecciones 3 13

310

Referencia a objetos y colecciones 320


Uso de la instruccin For Each con una coleccin 323
Uso de un cuadro de lista de seleccin mltiple 325
Trabajo directo con objetos de acceso a datos 328
Localizacin y modificacin de datos en un Recordset 331
Creacin y ejecucin de una consulta de accin 337
Resumen del captulo 342
Avance del siguiente captulo 344

Captulo 13.

Personalizacin de informes con Visual Basic

345

Utilizacin de las caractersticas estndar de los informes 346


Respuesta a eventos de informe 348
Personalizacin de informes asignando propiedades en ejecucin
Modificacin del diseo del informe desde el cdigo 352
Clculo de totales mientras se imprime el informe 355
Resumen del captulo 363
Avance del siguiente captulo 364

Captulo 14.

Comparticin de datos con otras aplicaciones

349

365

Uso de objetos de Automatizacin 366


Envo de rdenes a Microsoft Word 367
Obtencin de informacin de otra aplicacin 376
Trabajo con carpetas de Microsoft Outlook 379
Resumen del captulo 385
Avance del siguiente captulo 386

Captulo 15.

Conexin a lnternet

387

Uso de hipervnculos 388


Creacin de controles de hipervnculo en un formulario 390
Almacenamiento de hipervnculos en una tabla 391
Seguimiento de hipervnculos desde Visual Basic 395
Modificacin de hipervnculos mediante Visual Basic 400
Creacin de pginas Web para la aplicacin 405
Creacin de una pgina de acceso a datos para la revisin de datos
Insercin de secuencias de comandos en las pginas de acceso
adatos 415
Resumen del captulo 423
Por dnde seguir? 425

lndice analtico

427

406

Introduccin

Este libro ensea a crear aplicaciones de base de datos en Microsoft Access


2000. Si ya ha usado Microsoft Access y est preparado para pasar a programar en Microsoft Visual Basic, ste libro es para usted.
Access ha revolucionado el mundo de las bases de datos gracias a su facilidad de uso para almacenar y mostrar informacin. Como podr ver, probablemente es la herramienta ms productiva para crear aplicaciones de base
de datos. Access utiliza un potente lenguaje de programacin, Visual Basic
-el mismo que utilizan otras aplicaciones de Microsoft Office y que se puede utilizar por separado para desarrollar aplicaciones para Microsoft Windows o para la Web. Mediante las tcnicas de programacin que aprender
en este libro podr sacar ms partido a Access y crear en poco tiempo sus
propias soluciones personalizadas. An ms, si trabaja con bases de datos
que utilizan otras personas, aprender a crear una interfaz de usuario completa para ayudarles a realizar fcilmente su trabajo.

Programacin con Microsoft Access 2000. Macros y Visual Basic para aplicaciones le ir presentando las tareas una por una y le guiar con instrucciones claras y frecuentes imgenes de lo que, en cada momento, debe ir apareciendo en la pantalla. Cada uno de los captulos propondr un problema que
ir resolviendo y le ayudar a familiarizarse con un rea concreta de Access
o Visual Basic.
Importante Este libro est diseado para ser utilizado con Microsoft Access 2000 (versin 9.0) o Microsoft Office Profesional, Premium o Desarrolladores para los sistemas operativos Windows 95, Windows 98, Windows
NT y Windows 2000. Para conocer cul es el software que se est utilizando, puede comprobar el paquete del producto o puede iniciar el software, activar el men Ayuda y elegir Acerca de Microsoft Access. Si su software no
es compatible con este libro, probablemente est disponible un libro de la serie Paso a paso o Programacin para su software.

Para encontrar el mejor punto de partida en este libro


Este libro est pensado tanto para los usuarios de Access que estn aprendiendo a programar por primera vez como para los programadores que hayan utilizado otros sistemas de programacin, como dBASE o FoxPro. Podr sacar un mayor provecho de este libro si ya est familiarizado con las
capacidades bsicas de Access, como, por ejemplo, el diseo y la utilizacin
de formularios. Los pasos de este libro podr completarlos aunque sea un recin llegado a Access, pero para crear sus propias bases de datos necesitar
conocimientos que no se cubren en este libro.
El libro est dividido en cuatro partes.

Parte 1: Automatizacin de tareas de base de datos comienza con soluciones directas y prcticas para personalizar bases de datos de Access. Tambin presenta Visual Basic para Aplicaciones -el lenguaje de programacin
de Access- y ensea los conceptos bsicos que ir necesitando. En esta parte, utilizar asistentes de Access y cdigo sencillo para crear y personalizar
una base de datos de administracin de contactos.
Parte 11: Programacin en Visual Basic le ensear a utilizar las herramientas de programacin de Access para escribir y depurar cdigo Visual
Basic. En esta parte, seguir utilizando la base de datos de administracin de
contactos, a la que aadir nuevas caractersticas.

Parte 111: Creacin de una aplicacin personalizada recorre, paso a paso, el


proceso de creacin de una interfaz personalizada para una aplicacin de base de
datos. En esta parte, trabajar con una base de datos nueva que gestiona suscripciones a una revista y la prepara para distribuirla a los usuarios. Durante el proceso crear cuadros de dilogo, conseguir que los formularios e informes trabajen paralelamente y aadir mens y barras de herramientas personalizados.
Parte IV: Trabajo con datos y objetos le introducir en la estructura interna de Access. Aprender a tomar control directo sobre objetos como formularios, informes y bases de datos -as como a manipular objetos de otras aplicaciones, como Microsoft Word. En esta parte utilizar tcnicas avanzadas
de programacin para aadir caractersticas a una aplicacin de seguimiento
de problemas.
Utilice las siguientes directrices para determinar el punto de partida ms
apropiado en su caso.

Si le resulta nuevo Access o la programacin con Visual Basic, siga estos


pasos:

1. Instale los archivos de prcticas tal y como se describe en el apartado


Instalacin y uso de los archivos de prcticas, ms adelante en esta introduccin.

2. Familiarcese con las caractersticas bsicas de Access tomando como referencia la ayuda interactiva u otra documentacin segn sus necesidades.

3. Trabaje secuencialmente con los Captulos 1 a 7 donde aprender las habilidades necesarias para desarrollar aplicaciones en Microsoft Access.
(Aunque, si ya tiene experiencia con Access puede saltarse el Captulo 1.)
A continuacin, trabaje con los Captulos 8 a 15 segn le interese aprender las tcnicas adicionales que en ellos se tratan.
Si llega desde Visual Basic u otro producto de Microsoft que utiliza Visual
Basic, siga estos pasos:

1. Instale los archivos de prcticas tal y como se describe en el apartado


Instalacin y uso de los archivos de prcticas, ms adelante en esta introduccin.

2. Trabaje secuencialmente con los Captulos 1, 3 y 4, saltndose el Captulo 2, para aprender lo relativo al desarrollo de aplicaciones en Access.
Sltese tambin los Captulos 5 a 7. A continuacin, trabaje con los Captulos 8 a 15 segn le interese aprender las tcnicas adicionales que en
ellos se tratan.
Si se est actualizando desde una versin anterior de Access, siga estos
pasos:

1. Aprenda las nuevas caractersticas de esta versin del programa descritas


en este libro leyendo el apartado siguiente, Nuevas caractersticas para
el desarrollo de aplicaciones de Access 2000~.

2 Instale los'archivos de prcticas tal y como se describe en el apartado


Instalacin y uso de los archivos de prcticas, ms adelante en esta introduccin.

3. Complete los captulos que traten los temas que le interesan. Utilice la tabla de contenido para localizar informacin sobre temas generales. Puede utilizar el ndice para encontrar informacin sobre un tema determinado o sobre una caracterstica de una versin anterior de Access.
Si usa como referencia este libro despus de haber seguido los captulos,
siga estos pasos:

1. Utilice el ndice para localizar informacin sobre un determinado tema y


utilice la tabla de contenido para localizar informacin sobre temas generales.
2. Lea el apartado Resumen del captulo al final de cada captulo para ver
un breve repaso de las principales tareas. Los temas descritos en los apartados Resumen del captulo estn listados en el mismo orden en que estn presentados en el captulo.

Nuevas caractersticas para el desarrollo de aplicaciones


de Access 2000
La siguiente tabla presenta las nuevas caractersticas de Access 2000 que son
estudiadas en este libro. La tabla indica el captulo en el que podemos aprender cada una de estas caractersticas. Tambin puede utilizar el ndice para
localizar informacin especfica sobre una determinada caracterstica o tarea
que desee llevar a cabo.
Para aprender cmo

Consuiie

Utilizar la nueva versin de Visual Basic, su ventana y


las herramientas actualizadas para Access para adaptarse
a las otras aplicaciones de Office 2000

Captulos 2 y 5

Depurar el cdigo ms fcilmente utilizando las nuevas


Captulo 6
facilidades de Visual Basic como la barra de herramientas
Depuracin
Acceder y modificar datos con objetos de datos de
ActiveX (ADO)

Captulo 12

Trabajar directamente con objetos de Word o Microsoft


Outlook utilizando cdigo de Automatizacin

Captulo 14

Trabajar con Internet o una intranet utilizando


hipervnculos y pginas de acceso a datos

Captulo 15

Instalacin y uso de los archivos de prcticas


El CD-ROM que puede encontrar en la cubierta de este libro contiene los archivos de prcticas que sern utilizados en los ejercicios a lo largo del libro.
Por ejemplo, cuando estemos aprendiendo a utilizar cdigo de Visual Basic
en Access, abriremos uno de los archivos de prcticas -una base de datos
que contiene diferentes tablas, formularios e informes ya creados- y a continuacin modificaremos uno de los formularios que contiene. Haciendo uso
de los archivos de prcticas, no emplearemos tiempo en la creacin de ejemplos utilizados en los captulos - e n su lugar, podremos concentrar toda
nuestra atencin en el aprendizaje del desarrollo de aplicaciones en Access.
Con los archivos e instrucciones paso a paso de los captulos, adems apren-

deremos trabajando, siendo sta la forma ms eficiente y fcil para aprender


y adquirir una gran destreza.
Importante Antes de romper el precinto donde se encuentra el CD-ROM,
asegrese de que dispone de la versin correcta del programa. Este libro est
diseado para ser utilizado con Microsoft Access 2000 (versin 9.0) o Microsoft Office 2000 Profesional, Premium o Desarrolladores para los sistemas operativos Windows 95, Windows 98, Windows NT y Windows 2000.
Para determinar el tipo de software que est siendo ejecutado, consulte la documentacin que viene junto con su programa o inicie el programa y a continuacin abra el men Ayuda y elija la orden Acerca de Microsoft Access.
Si el programa no fuese compatible con este libro, probablemente est disponible un libro de la serie Paso a paso o Programacin que coincida con su
software.

Instalacin de los archivos de prcticas en su computadora


Para instalar los archivos de prcticas en el disco fijo de su computadora de
forma que pueda utilizarlos en los ejercicios del libro, siga estos pasos.

1. Saque el disco de la parte interior de la cubierta posterior de este libro e


insrtelo en la unidad de CD-ROM de su computadora.

2. En la barra de tareas situada en la parte inferior de su pantalla, pulse el


botn Inicio y elija Ejecutar.
Aparece el cuadro de dilogo Ejecutar.

3. En el recuadro Abrir, escriba d:Instalar (o si su unidad de CD-ROM utiliza una letra de unidad distinta de la d, sustituya por la letra de unidad
correcta).

4. Pulse el botn Aceptar y siga las instrucciones que se indican en la pantalla.


La ventana del programa de instalacin mostrar las opciones predeterminadas recomendadas. Para obtener los resultados esperados en el uso
de los archivos de prcticas de este libro, acepte las recomendaciones
realizadas por el programa de instalacin.

5. Una vez copiados los archivos, extraiga el disco de su unidad de CDROM y vuelva a colocarlo en el interior del sobre que se encuentra en la
cubierta del libro.
El programa de instalacin copia los archivos de prcticas en su disco
fijo, en una carpeta denominada Archivos de prcticas de Access.

Uso de los archivos de prcticas


Cada captulo de este libro explica cundo y cmo deben ser utilizados los correspondientes archivos de prcticas. Cuando sea necesario el uso de un archivo de prcticas, el libro listar las instrucciones sobre cmo abrir el archivo. La mayora de los archivos del CD-ROM son archivos de bases de datos
de Access -contienen proyectos de programacin completados parcialmente sobre los que se trabajar en el aprendizaje de las tcnicas de programacin.
Para aquellas personas a las que les gusta conocer todos los detalles, a continuacin se muestra una lista de los archivos incluidos en el disco de prcticas:
Captulo

Nombre de archivo

Descripcin

Cap01 Datos Clientes

Un archivo de texto que contiene


los nombres y las direcciones de
un conjunto imaginario de clientes
y que se importar en una
aplicacin de Access para la
administracin de contactos

Cap02 Contactos

Un archivo de base de datos para


una aplicacin de administracin
de contactos, similar al que se crea
en el Captulo 1 y que se utilizar
hasta el Captulo 7

Cap03 Contactos

Un archivo de base de datos para


una aplicacin de administracin
de contactos

Cap04 Contactos

Un archivo de base de datos para


una aplicacin de administracin
de contactos

Cap05 Contactos

Un archivo de base de datos para


una aplicacin de administracin
de contactos

Cap06 Contactos

Un archivo de base de datos para


una aplicacin de administracin
de contactos

6
f1

Captulo

Nombre de archivo

Descripcin

Cap07 Contactos

Un archivo de base de datos para


una aplicacin de administracin
de contactos

Cap08 Suscriptor
,

Un archivo de base de datos para


una aplicacin de suscripciones a
revistas que se utilizar en los
Captulos 8 a 11

Cap09 Suscriptor

Un archivo de base de datos para


una aplicacin de suscripciones a
revistas

10

Cap10 Suscriptor

Un archivo de base de datos para


una aplicacin de suscripciones a
revistas

Cap 11 Presenta

Un archivo de mapa de bits con


una imagen que haremos que
Access presente cuando los
usuarios inicien la aplicacin de
suscripcin a revistas

Cap 11 Suscriptor

Un archivo de base de datos para


una aplicacin de suscripciones a
revistas

Cap 12 Problemas

Un archivo de base de datos para


una aplicacin de seguimiento de
problemas

Cap13 Problemas

Un archivo de base de datos para


una aplicacin de seguimiento de
problemas

Cap14 Problemas

Un archivo de base de datos para


una aplicacin de seguimiento de
problemas

Cap14 Memorando

Una plantilla de Word que se


utiliza para crear un memorando
con datos extrados de la
aplicacin de seguimiento
de roble mas

Captulo

Nombre de archivo

Descripcin

15

Cap 15 Problemas

Un archivo de base de datos para


una aplicacin de seguimiento de
problemas

Reasigna

Un archivo HTML que contiene


una pgina de acceso a datos para
una aplicacin de seguimiento de
problemas

file0002, file0003,
file0007, filelist,
image00 1, image004,
image005, image006

Archivos de soporte creados por


Access para la pgina de acceso
a datos Reasigna; debe estar en
una carpeta denominada
Reasigna-archivos

Necesita ayuda con los archivos de prcticas?


Todos los esfuerzos han sido realizados para asegurar la precisin de este libro y el contenido del CD-ROM de archivos de prcticas. Si tiene algn problema, Micrososft Press ofrece correcciones de sus libros a travs del servidor World Wide Web en
http://mspress.microsoft.comisupport/

Desinstalacin de los archivos de prcticas


Utilice los siguientes pasos para eliminar los archivos de prcticas transferidos a su unidad de disco fijo mediante el uso del programa de instalacin.

1. Pulse el botn Inicio, abra el men Configuracin y elija Panel de control.


2. Pulse dos veces sobre el icono Agregar o quitar programas.
3. Seleccione Programacin con MS Access 2000 Macros y VBA de la lista y despus pulse el botn Agregar o quitar.
Aparecer en su pantalla un mensaje solicitando su confirmacin.

4. Pulse el botn S.
Los archivos de prcticas habrn sido desinstalados.
~

5. Pulse el botn Aceptar para cerrar el cuadro de dilogo. Propiedades de


Agregar o quitar programas.

6. Cierre la ventana del Panel de control.

Cmo obtener ayuda sobre Access


Access incluye un extenso sistema de ayuda con el que se puede obtener informacin acerca de un determinado tema o la respuesta a preguntas concretas. Descubrir lo valiosa que resulta la ayuda a medida que vaya aprendiendo a crear aplicaciones con Access.
En la ayuda no slo se incluye informacin de referencia -adems contiene
informacin sobre cmo realizar casi todas las tareas, introducciones grficas a las diferentes reas de Access e informacin adicional que le ayuda a
encontrar la informacin que necesita respondiendo a sus preguntas. Adems, existe un tema de referencia completo para cada una de las funciones,
los mtodos, las propiedades y el resto de los elementos que se utilizan en
Access. Como podr comprobar, la ayuda incluye una serie de mtodos innovadores que facilitan la localizacin de los temas.

El Ayudante de Office El Ayudante de Office es un amistoso personaje


animado que aparece sobre el rea de trabajo y con el cual es posible acceder a los temas de ayuda sin ms que escribir una frase o una pregunta con
nuestras propiaspalabras -no es necesario conocer los trminos exactos que
se utilizan en el ndice de la ayuda en lnea. Esta capacidad hace del Ayudante
de Office el mtodo ms adecuado para obtener ayuda cuando se nos plantea
alguna duda durante el trabajo. Por ejemplo, si quisisemos saber cmo se
visualiza una lista de valores, bastara con escribir buscar valores. El Ayudante de Office interpretara el texto y visualizara un conjunto de temas.
Ayuda de
Microsoft
Access

Para visualizar el Ayudante de Office se ha de pulsar el botn Ayuda de Microsoft Access de la barra de herramientas. En cualquier momento que se
quiera hacer una pregunta, basta con pulsar sobre el Ayudante de Office, escribir el texto de la misma y pulsar el botn Buscar. El Ayudante de Office
detecta automticamente cundo se est trabajando con cdigo Visual Basic
en la ventana de Visual Basic y refiere las bsquedas a los temas de programacin en lugar de los temas sobre Access en general.
Consejo Aunque el ayudante de Office resulta ms divertido, es posible acceder a los mismos temas de ayuda a travs de las solapas Contenido y Asistente para Ayuda de la ventana Ayuda -unas herramientas ms potentes, dado
que permiten inspeccionar ms resultados je los que el ayudante de Office
puede mostrar en su pequea ventana. Por esta razn, muchos programadores y usuarios avanzados prefieren desactivar el ayudante de Office y explorar los temas de ayuda mediante las facilidades antes mencionadas. Para
desactivar el ayudante de Office, pulse sobre l, pulse el botn Opciones y
deseleccione la casilla de verificacin Utilizar el ayudante de Office, y pulse
Aceptar. Despus de esto, al pulsar el botn Ayuda de Microsoft Access (o el
botn Ayuda de cualquier aplicacin de Office) no se invocar al ayudante y

se pasar directamente a la ventana Ayuda de Office. Si echa de menos la


compaa del ayudante, siempre puede volver a activarlo -sin ms que seleccionar la orden Mostrar el Ayudante de Office, en el men de ayuda.

Contenido Con la ventana Ayuda de Office a la vista, descubrir que esta


ventana tiene tres solapas que permiten la bsqueda de informacin. Para
mostrar estas solapas, pulse el botn Mostrar, que aparece en el lado izquierdo de la barra de herramientas de la ventana Ayuda. La solapa Contenido agrupa los temas segn un orden lgico, por lo que resulta muy conveniente para inspeccionar la ayuda, descubrir la informacin que contiene y
comenzar a explorar una nueva rea de Access o de Visual Basic. Para inspeccionar la lista Contenido, se pulsa en la solapa Contenido, se pulsa sobre
el signo ms (+) que aparece junto a la carpeta en la que estemos interesados
y, a continuacin, se pulsa sobre el tema que deseemos mostrar.

Asistente para Ayuda El Asistente para Ayuda responde a las preguntas utilizando la misma tecnologa que el ayudante de Office, pero sin la limitacin
de presentar tan slo unas pocas respuestas. Para realizar una bsqueda con
el Asistente para Ayuda, se pulsa el botn Mostrar en la barra de herramientas de ayuda, se escribe una pregunta en texto libre y, a continuacin, se pulsa el botn Buscar. En la lista de temas encontrados por el asistente, se
pulsa sobre el tema que deseemos visualizar.
ndice El Indice permite buscar todos los temas relacionados con una determinada palabra clave. Se pulsa el botn Mostrar en la barra de herramientas de ayuda, se escribe o se selecciona una palabra clave, se pulsa Buscar y, a continuacin, se pulsa sobre el tema que deseemos visualizar.
Ayuda sobre las palabras clave en Visual Basic Cuando se trabaja sobre
cdigo Visual Basic, es posible acceder al tema de ayuda asociado con cualquiera de las palabras clave que aparecen en la pantalla sin ms que pulsar
una tecla. Para mostrar el tema de ayuda, se pulsa con el ratn sobre la palabra clave en la que se est interesado (ya sea una sentencia, una funcin o un
mtodo), para colocar en ella el punto de insercin, y se pulsa la tecla F I .
Recursos en la Web En el World Wide Web se puede encontrar una cantidad ingente de informacin sobre Access, a la que podr acceder utilizando
su motor de bsqueda preferido. El sitio Web de Microsoft ofrece muchos
otros recursos relacionados con Office y Access, incluyendo informacin de
ltima hora, documentacin interactiva, aplicaciones de ejemplo y programas. Para visitar el sitio Web de Office, seleccione la orden Office en el Web
(men Ayuda). O, para obtener ms informacin sobre la programacin en
Visual Basic para Access, visite el Office Developer Forurn en

Convenios y caractersticas utilizadas en este libro


Para ahorrar tiempo a la hora de utilizar este libro es importante que conozca,
antes de comenzar la lectura de los captulos, cmo se muestran las instrucciones, teclas a pulsar, etc. Por favor, emplee unos instantes en la lectura de la
siguiente lista, que adems indica otras caractersticas tiles de este libro.

Convenios
1

i El

texto que debe escribir aparece en negrita.

i Los trminos nuevos y los nombres de algunos elementos de Visual Ba-

sic (argumentos, controles, procedimientos de evento, expresiones, formularios, funciones, mtodos, objetos, parmetros, procedimientos y variables) aparecen en cursiva.
i Los nombres de las teclas que debe pulsar aparecen en LETRAS VERSALITAS. Un signo ms (+) entre dos nombres de tecla significa que debemos

pulsar estas teclas simultneamente. Por ejemplo, Pulse ALT+TAB significa que debe mantener presionada la tecla ALT mientras pulsa la tecla TAB.
i El

cdigo de los programas (en una o ms lneas separadas) aparece en


un tipo monoespaciado:
Me.AllowEdits = False

Otras caractersticas de este libro


i En Microsoft Access se pueden realizar muchas operaciones pulsando un

Ventana
Base de
datos

botn de la barra de herramientas o una herramienta de la caja de herramientas. Cuando las instrucciones del libro le indiquen que debe pulsar
un botn de la barra de herramientas, en el margen, junto a las instrucciones, aparecer un dibujo del botn. El botn Ventana Base de datos
que aparece en el margen junto a este prrafo es un ejemplo.
i Las

ilustraciones con capturas de pantallas muestran ejemplos de la interfaz de usuario con los resultados de realizar los pasos y en muchas ocasiones incluyen textos que llaman la atencin sobre las partes de la ilustracin que as lo requieren.

i Los apartados que aparecen con el fondo tramado, introducen tcnicas de

programacin especiales, informacin adicional o caractersticas relacionadas con la cuestin que se est tratando.
i El

apartado Resumen del captulo, que puede encontrar al final de cada


captulo, es una forma rpida de recordar cmo se llevan a cabo las tareas
aprendidas.

i Los

temas de Ayuda que aparecen al final de cada captulo, permiten


determinar de forma rpida aquellos temas de la ayuda interactiva que
estn disponibles. El sistema de ayuda ofrece una referencia interactiva
completa para Access.

Correcciones, comentarios y ayuda


Todos los esfuerzos han sido realizados para asegurar la precisin de este libro y el contenido del CD-ROM de archivos de prcticas. Si tiene algn problema, Microsoft Press ofrece correcciones de sus libros a travs del servidor World Wide Web en
Agradeceremos que nos enve cualquier comentario, pregunta o idea relacionada con este libro o el disco que le acompaa.
Por correo electrnico a

profesional @mcgraw-hi1l.e~

O por correo ordinario a


McGraw-Hill/Interamericana de Espaa, S. A. U.

Attn: Editor de la serie Programacin

e/ Basauri, 17
28023 Aravaca - Madrid - Espaa
Por favor, tenga en cuenta que en estas direcciones no se ofrece soporte tcnico sobre Access. Para obtener ayuda sobre el uso de Access, puede llamar
al Soporte Tcnico de Microsoft correspondiente a su pas.

Visite nuestro sitio en el World Wide Web


Le invitamos a que visite el sitio Web de McGraw-Hill y Microsoft Press, en
las siguientes direcciones:

En ellas encontrar una amplia informacin sobre todos nuestros libros, realizacin de pedidos, noticias sobre caractersticas y eventos especiales, contenido adicional para libros de Microsoft Press y mucho ms.

Asimismo, puede encontrar noticias sobre Microsoft y sus ltimos desarrollos de software en el sitio Web
http://www.microsoft.c o d
Esperamos su visita en la Web!

PARTE I
Automatizacin
de tareas de
base de datos

Cmo empezar rpidamente


mediante los asistentes
Objetivos del capitulo
En este captulo aprender a:
Tiempo estimado:
30 minutos.

Crear una base de datos con el Asistente para bases de datos.

m Aadir otro objeto a una base de datos creada con el asistente.


Crear un botn de orden con un asistente.

Alguna vez se ha encontrado intentando escribir una carta o un informe sin


saber cmo empezar a hacerlo? Una pgina en blanco puede constituir un
gran obstculo. Esa es la razn por la que en muchas ocasiones buscamos la
ayuda de otros, y lo que hace que la tormenta de ideas sea una tcnica tan
buena -las ideas, ya sean buenas o malas, hacen acudir otras ideas y, casi
sin darnos cuenta, damos con un buen punto de partida.
Crear una aplicacin de bases de datos desde cero, igual que trabajar con una
pgina en blanco, es una tarea difcil. De hecho, antes de empezar a personalizarla o a hacer cualquier tipo de programacin, se debe haber construido
la mayor parte de la base de datos y tenerla ya funcionando. Afortunadamente, Microsoft Access incluye diferentes asistentes que permiten empezar
a trabajar rpidamente. Los asistentes hacen preguntas acerca de las bases de
datos y los objetos que se desea crear, y se encargan de crearlos. Por ejemplo, el Asistente para bases de datos puede crear todos los elementos bsicos
de una aplicacin de bases de datos -tablas, formularios, informes y otros
objetos. Una vez que el asistente ha hecho su trabajo, ya es posible empezar

y',I

a utilizar la aplicacin, pero, adems, tambin es posible modificar la interfaz de usuario creada por el asistente, agregar nuevos objetos e incluso eliminar algunos de los objetos que ha creado el asistente sustituyndolos por
otros que creemos nosotros.
En este captulo crear una aplicacin de bases de datos completa a partir de
cero utilizando el Asistente para bases de datos y luego personalizar dicha aplicacin de distintas formas. Despus, a medida que avance por la Parte 1, aprender cmo se utiliza Visual Basic -as como otros asistentes de Microsoft Access- para personalizar an ms el funcionamiento de una base de datos.
Inicie la leccin
i Inicie Microsoft Access

2000. Pulse el botn Inicio de la barra de tareas,


apunte a Programas y seleccione Microsoft Access.

USO DE LOS ASISTENTES PARA EL DESARROLLO DE APLICACIONES


Parece como si ltimamente estuviesen apareciendo asistentes por todas partes -generalmente para ayudar a los usuarios finales a realizar ciertas tareas difciles, sin necesidad de conocer las interioridades del software. Sin embargo en Microsoft Access se incluyen varios asistentes que tambin ayudan
a los desarrolladores de aplicaciones a realizar su trabajo. En este libro se utilizarn los siguientes asistentes:
i Asistente para bases de datos
1

i Asistente para importacin de texto

Asistente para botones de comando


i Asistente para cuadros combinados
i Asistente para grupos de opciones
i Asistente para dividir bases de datos
i

Estos asistentes no slo permiten agilizar el trabajo sino que adems sirven
para aprender sobre el desarrollo de aplicaciones mientras se realiza el trabajo. An as, es importante tener presente que cualquier cosa que se haga
con un asistente tambin se puede hacer sin su ayuda. De hecho, los propios
asistentes estn escritos en el lenguaje de programacin Visual Basic y utilizan en sus interfaces los formularios normales de Access, igual que las aplicaciones que crear usted.
A medida que aprenda a programar Access usando Visual Basic podr llegar
mucho ms lejos que con los asistentes. Sin embargo no hay por qu despreciar la ayuda que stos proporcionan.

CREACIN DE UNA BASE DE DATOS CON EL ASISTENTE


PARA BASES DE DATOS
El Asistente para bases de datos puede crear diferentes tipos de bases de datos habituales tanto para uso comercial como personal, entre los que se incluyen:
i

Administracin de actividades

Administracin de contactos

i1

i Administracin de llamadas
i

Control de activos

i Control de inventario
i

Gastos

Introduccin de pedidos

Libro mayor

Programacin de recursos
i Tiempo y facturacin
i

Nota Aunque el Asistente no tenga exactamente la base de datos que est


buscando, entre todas las que proporciona puede obtener ideas para sus propias aplicaciones. Adems, todas las tcnicas que utilizar para modificar la
base de datos creada por el asistente se aplican igual a las tablas y formularios que cree por su cuenta. De hecho, en la Parte 111, ignoraremos por completo al Asistente para bases de datos y crearemos desde el principio todos
los elementos de una interfaz de usuario.
Cree la base de datos Contactos

C4
Nueva

1. En el cuadro de dilogo inicial de Access, pulse Asistentes, pginas y proyectos de bases de datos de Access y despus pulse Aceptar. Si ya ha cerrado el cuadro de dilogo inicial, pulse el botn Nueva base de datos.
Access mostrar el cuadro de dilogo Nueva.

2. Pulse la ficha Bases de datos.


Access mostrar los iconos de todos los tipos de bases de datos que puede crear con el Asistente para bases de datos.

General

de recursos

de

] Pldntllla~de Off~ce97 1

Facturacin

3. Pulse dos veces el icono Administracin de contactos.


Access le preguntar el nombre y la ubicacin del nuevo archivo de base
de datos.

4. Vaya a la carpeta donde instal los archivos de prcticas (probablemente


c:Mrchivos de ejercicios de Access).

5. En el cuadro Nombre de archivo escriba Cap01 Contactos y pulse Crear.


Se inicia el Asistente para bases de datos mostrando una lista con los tipos de informacin que la base de datos de administracin de contactos
puede incluir.

6. Pulse Siguiente.
El Asistente para bases de datos le preguntar si desea incluir alguno de
los campos opcionales en la base de datos. No es necesario que realice ningn cambio puesto que no necesitar ninguno de los campos opcionales.

7. Pulse Siguiente.
El Asistente para bases de datos le preguntar qu estilo desea que se utilice en la creacin de los formularios de la aplicacin.

8. Pulse Estndai y a continuacin pulse Finalizar.


El Asistente para bases de datos se ocupar de crear la base de datos Contactos, operacin que durar entre uno y dos minutos. Despus abrir el
formulario Panel de control principal, que aparece cada vez que se abre
la base de datos y gua al usuario por la misma. Un formulario Panel de
control principal incluye botones y texto que abren otros formularios e
informes de una aplicacin -proporcionando una especie de centro de
control para los usuarios.

_]

Ititroduc!r/\i1er d i a inforriiacion

_]

Vi.ta previct d~ lu

Carntr~aiIn; eler~irritoidel Panel de contr.1


J

ir

iurnie..

ilir da e-t? ba-s da datnr

Nota Si aparece sobre el formulario Panel de control principal la hoja de


propiedades de Access (porque haba dejado abierta otra base de datos), cirrela ahora para que no estorbe.
Visualice el formulario Contactos

El primer elemento del Panel de control principal permite a los usuarios abrir
el formulario Contactos, formulario principal de la aplicacin, en el que podr ver e introducir informacin de contactos en la base de datos.

Qu es una aplicacin de bases de datos ?


La base de datos Contactos que acabamos de crear es mucho ms que una
simple base de datos de Access: con el formulario Panel de control principal y el resto de formularios e informes que contiene, la base de datos
Contactos es una aplicacin. Este trmino se refiere al hecho de que la base
de datos tiene su propia interfaz de usuario, especialmente diseada para
ayudar a los usuarios de la base de datos a navegar por sus formularios e
e datos. Las aplicacioinformes y a obtener el trabajo deseado de la b a ~ de
nes de bases de datos van desde una tan sencilla como Contactos, con una
misin nica y simple, hasta completas soluciones empresariales que contienen gmn nmero de objetos y miles de lneas de cdigo Visual Basic.

El desarrollo de aplicaciones personalizadas es


de la programacin de Access con Visual Basic
de este libro. A travs del libro, aprender a pers

(Contina)

(Continuacin)
datos de Access para resolver problemas especficos de usuario y a
facilitar la entrada y salida de datos en la computadora. Debido a su
simplicidad, la interfaz de la base de datos Contactos permite realizar
un gran nmero de personalizaciones, lo que hace que esta base de
datos sea un excelente punto de partida.

1. En el formulario Panel de controlprincipal,pulse IntroducirNer Contactos.


Se abrir el formulario Contactos, dispuesto para aceptar nuevos registros. Adems de los cuadros de texto y otros controles para la informacin almacenada en la tabla Contactos, el formulario incluye un pie de
pgina con botones de rdenes que los usuarios pueden pulsar para realizar acciones tpicas.

,,L,",,,"Y'

Cornpafiis
Estimado
Dileccion
Codigo postal

c,8.*da8i
Entado/Prnvinria
Pas

2. Cierre el formulario Contactos. (Pulse el botn de cierre - e l que tiene


una X- de la esquina superior derecha de la ventana del formulario.)

Qu ms ha creado el Asistente?
El Asistente para bases de datos crea todos los elementos bsicos de una aplicacin de bases de datos, junto con una serie de herramientas que ayudarn
al usuario a navegar por la aplicacin. A continuacin se muestra una lista de
los elementos que incluye la base de datos Contactos:
Tablas que almacenan la informacin sobre contactos, tipos de contacto
y llamadas telefnicas. (El asistente asigna automticamente las propiedades de cada tabla y crea las relaciones entre las tablas.)

Formularios para la introduccin de informacin de contactos y de llamadas telefnicas.

Informes para resumir la informacin sobre contactos y llamadas telefnicas.

El formulario Panel de control principal y la tabla Elementos del Panel


de control, que configuran el panel de control de la aplicacin que aparece siempre que se abre la base de datos Contactos.

Nota El formulario Panel de control principal (Switchboard) que ha creado el asistente es un formulario especial que nunca debemos intentar modificar directamente. Contiene cdigo de Visual Basic que, junto con la tabla
Elementos del Panel de control (Switchboard Items), muestran el texto que
aparece en pantalla y permiten el funcionamiento de los botones. Aunque no
es fcil modificar el funcionamiento de este formulario, podremos aadir o
eliminar botones del mismo, tal como veremos ms tarde en esta leccin.
Adems, podremos reemplazar el formulario Panel de control principal por
nuestro propio formulario de inicio, tcnica que veremos en el Captulo 11.
Visualice los objetos de la base de datos Contactos

Un vistazo rpido a la ventana Base de datos nos permitir ver todos los objetos que ha creado el Asistente para bases de datos en la aplicacin. Esto nos ayudar a comprobar que no hay nada mgico en lo que ha creado el asistente -se
trata simplemente de una serie de objetos envueltos en un bonito paquete.

1. Pulse el botn Ventana Base de datos.


Ventana
Base de datos

2. Pulse en los accesos directos Tablas, Formularios e Informes para ver las cuatro tablas, los siete formularios y los dos informes creados por el asistente.

Subformulariodetalles de llamadas
ltstado de llamadar

Tpos de contacto

Para muchos usuarios de Microsoft Access, las tablas, formularios e informes creados por el asistente sern suficientemente buenos. No obstante, como desarrollador de bases de datos personalizadas, le interesar
personalizar estos objetos y crear otros nuevos. Ahora que el Asistente
para bases de datos ha realizado su misin, podemos decidir si mantendremos toda o parte de la base de datos creada por el asistente, si aadiremos nuevos objetos o si modificaremos los existentes para que se ajusten a las necesidades de nuestros usuarios.

3. Minimice la ventana Base de datos.

'm
-3

/3

Listado de contactos alfabetico

Resumen de llamadas semanales

Pulse el
botn
Minimizar
para
minimizar
la ventana

Introduccin de informacin en la base de datos


Lo primero que tenemos que hacer despus de crear una base de datos es
introducir informacin en la misma. La aplicacin Administracin de contactos nos permite mantener una lista de los tipos de contactos que tenemos,
de forma que podamos categorizar cada contacto introducido en la base de
datos. Antes de seguir adelante, parece lgico introducir esta informacin
preliminar.
Introduzca los tipos de contactos

Puede utilizar el formulario Panel de control principal para abrir un formulario en el que podr introducir los tipos de contactos.

1. En el formulario Panel de control principal, pulse IntroducirNer otra informacin.

2. Pulse IntroducirNer tipos de contacto.


Se abrir el formulario Tipos de contacto, preparado para introducir un
nuevo registro.

3. Escriba Cliente.
4. Pulse el botn Nuevo registro.

- Botn Nuevo registro

Access guarda el registro y pasa al siguiente.

5. Escriba Proveedor.
6. Pulse el botn Nuevo registro y escriba Personal.
7. Cierre el formulario Tipos de contacto (pulse el botn Cerrar de la esquina superior derecha de la ventana de formulario).

8. Pulse Volver al panel de control principal.


Al hacerlo volver a aparecer el men del Panel de control principal.
Cuando introduzca ahora los contactos, podr seleccionar uno de estos
tres tipos para cada registro de contactos.

Uso de datos existentes con una base de datos nueva


Como ya hemos visto, el formulario Contactos est vaco -no muestra ningn registro. Supongamos que ya tenamos cierta informacin de contactos
almacenada en otro programa y que no queremos volver a escribir los mismos datos en nuestra aplicacin de Access. Uno de los archivos de ejemplo
incluidos en el CD de prcticas es Cap01 Datos Clientes, un archivo de texto delimitado por comas que contiene nombres, direcciones y nmeros de telfono que podemos aadir a la tabla Contactos. El archivo podra haberse
exportado desde otro sistema de base de datos o de hoja de clculo con la intencin de pasarlo a Access.
Antes de importar datos en una tabla existente, deberemos asegurarnos de
que estn en un formato aceptado por Microsoft Access. Por ejemplo, podemos importar una hoja de clculo de Excel, un archivo dBASE o un archivo de texto. Adems, los datos del archivo que queremos importar debern
ser compatibles con la estructura de la tabla a la que los estamos aadiendo.
Si no es as, puede que necesitemos editar el archivo antes de importarlo,

para prepararlo para Access. Por ejemplo, el archivo de texto CapOl Datos
Clientes ya tiene los nombres de campo correctos para la tabla Contactos en
la primera fila del archivo, de forma que Access podr determinar en qu
campos debe guardar los datos.
Importe datos a la tabla Contactos

1. En el men Archivo, apunte a Obtener datos externos y pulse Importar.


Access mostrar el cuadro de dilogo Importar, en el que podremos seleccionar entre una variedad de formatos de datos para importar.

2. En el cuadro Tipo de archivo, seleccione Archivos de texto.


El cuadro de dilogo Importar muestra el archivo de texto CapOl Datos
Clientes, que se incluye en el disco de prcticas que hemos instalado.

3. Seleccione CapOl Datos Clientes y pulse Importar.


Access abrir el Asistente para importacin de texto, que nos ayudar a
seleccionar las opciones para importar archivos de texto delimitados o de
longitud fija. El asistente detectar automticamente que el archivo de
texto CapOl Datos Clientes est en formato Delimitado.

LO-

datos parecen tener el formato 'Ueliniitnd~i Si no es aci eliia el formatc


drkrriha Inv dato,

~ U melur
P

12 pliiiiitudo Card~trreitales r r n u 8 nnio o tab~lacii~n


srpsran cada Lampu

C A ~ h r hi l ~Los carnpn: s.;tsri alinesdo, en rulurnnas Lnn e%parin, entre cado mpn

El asistente
muestra los
campos del
archivo
de texto tal
como los
importa Access

4. Pulse Siguiente.
5. Seleccione la opcin Primera fila contiene nombres de campos y pulse
Siguiente.

6. Seleccione la opcin En una tabla existente, seleccione la tabla Contactos en la lista desplegable y pulse Finalizar.

cu iidr jw,ra dlma~enarlos datos'


r ~n una weva tabla
ri En una i o ~ ~, i t r t ~ r i t e

Seleccione aqu
la tabla Contactos

Access aadir los registros del archivo de texto a la tabla Contactos y


despus mostrar un mensaje indicando que ha finalizado correctamente.

7. Pulse Aceptar.
Visualice los nuevos registros en el formulario Contactos

Ahora, cuando los usuarios abran el formulario Contactos, vern los registros de clientes que hemos aadido, vern los registros de clientes que hemos
aadido y podrn comenzar a registrar llamadas o a aadir nuevos contactos.
Tambin podemos comprobar que los tipos de contactos aadidos a la base
de datos estn disponibles en el formulario.

1. En el formulario Panel de control principal, pulse IntroducirNer contactos.


El formulario mostrar el primer registro que hemos importado en la tabla Contactos. Debido a que el archivo de texto slo contena un subconjunto de los campos de la tabla, algunos de los cuadros de texto estarn en blanco.

Id de coritacto

Nombre
Apell1~3os

f nnipaa
Estimado
Dsecriun
Cndign pnstoi
Ciudad
Estado/Prn~iiiic~a I':,evrlla

2. Pulse el botn Pgina 2 en el pie del formulario.

3. Pulse la flecha desplegable que aparece junto al cuadro Tipo de contacto


y pulse Cliente.

Floiitbr? roritcko

liii

Sanchez Loper

Tipn de contacto
Nombre corrsci
Referido par
Notas

Como podr observar, en la lista aparecen los tres tipos de contactos que
hemos introducido.

4. Cierre el formulario Contactos.

INCLUSIN

DE UN OBJETO E N NUESTRA APLICACIN


Aunque el Asistente para bases de datos crea varios formularios e informes
tiles para la base de datos Contactos, seguro que necesitamos aadir alguno ms en nuestra aplicacin. Suponga que los usuarios necesitan imprimir
una lista actualizada de telfonos para sus contactos, organizada por la ciudad en la que se encuentran. Podemos crear este formulario de forma sencilla mediante el uso del Asistente para informes.

Cree un informe de la lista de contactos organizado por ciudad

1. Pulse el botn Ventana Base de datos.

2. Pulse el acceso directo Informes.


Ventana
Base de datos

3. Pulse dos veces sobre Crear un informe utilizando el asistente.


Se inicia el Asistente para informes preguntando por los campos que se
quieren incluir en el informe.

4. Pulse la flecha junto al cuadro Tablas/Consultas y luego pulse en Tabla:


Contactos.

5. En el cuadro Campos disponibles pulse dos veces sobre el campo Ciudad, seguido de los campos Apellidos-, Nombre-, NombreCompafia,
Estimado y TelfonoTrabajo.

El Asistente para informes aade los campos a la lista Campos seleccionados.

QURcampo: dwe3 ~ri~lliir


en PI informe?

Puede elegr de mas de ura cons!~lla0 tabb

Pulse dos veces


sobre un campo
para aadirlo al
informe

6. Pulse Siguiente.
El asistente le preguntar qu campos desea utilizar para agrupar datos en
el informe.

7. Pulse dos veces el campo Ciudad en la lista y pulse Siguiente.


El asistente le preguntar qu campos desea ordenar en el informe.

8. Seleccione el campo Apellidos- en el primer cuadro de ordenacin, seleccione el campo Nombre- en el segundo cuadro y pulse Siguiente.
El asistente le preguntar qu distribucin desea aplicar al informe.

9. En el cuadro Distribucin, seleccione Esquema 1 y pulse Siguiente.

10. Seleccione un estilo para su informe (o acepte el asignado por omisin)


y pulse Siguiente.
El asistente le pedir que especifique un ttulo para el informe.

11. Escriba Contactos por ciudades y pulse Finalizar.


El asistente crear el informe Contactos por ciudades y lo mostrar en
Presentacin preliminar.

12. Cierre el informe.


13. Minimice la ventana Base de datos.
Aada el nuevo informe al formulario Panel de control principal

Despus de crear objetos nuevos, podemos aadirlos al formulario Panel de


control creado por el Asistente para bases de datos.

1. En el formulario Panel de control principal, pulse Cambiar los elementos del Panel de control.
Access abrir el Administrador del panel de control, que le ayudar a modificar los elementos disponibles en el formulario Panel de control.

s del panrl de control:

2. Seleccione Panel de control de informes y pulse Modificar.


3. Pulse Nuevo.
4. En el cuadro Texto escriba Vista previa del informe Contactos por ciudades.

5. En el cuadro Comando seleccione Abrir informe.


6. En el cuadro Informe seleccione Contactos por ciudades y pulse Aceptar.

7. Pulse Vista previa del informe Contactos por ciudades y despus pulse
Mover arriba.

8. Pulse Cerrar.
9. Vuelva a pulsar Cerrar.
El Administrador del panel de control actualizar los elementos de la
tabla Elementos del Panel de control para que nuestro nuevo elemento
aparezca en el formulario Panel de control principal.
Pruebe el nuevo botn del Panel de control

1. En el formulario Panel de control principal pulse Vista previa de los informes.


Pulse Vista previa del informe Contactos por ciudades.

2. El botn abre nuestro informe.

] ' !vi3 prpvia del intorrne Li t,jt

'

de contactos alfabetico

VI,^, prcita drl iriluiiie Contactos por ciudades

1 fuiv~ral panel de cuntrol principal

La pgina de
informes del
form~lari0
Panel de
control
princ~pal
muestra ahora
la nueva
opcin

3. Cierre la ventana del informe.


4. En el formulario Panel de control, pulse Volver al panel de control principal.

INCLUSIN

D E UN BOTN DE ORDEN E N UN FORMULARIO


Ya hemos visto cmo los botones del formulario Panel de control pueden
ayudar a los usuarios a abrir los formularios e informes que necesiten. De
esta forma, los botones pueden ayudar a los usuarios a navegar por la aplicacin, integrando los objetos dentro de una potente aplicacin.
Es deseable que cuando los usuarios accedan a los formularios de la aplicacin tengan las tareas habituales directamente accesibles, para facilitar as el
uso de los formularios. Una forma de hacerlo consiste en crear botones de
rdenes (de comando) que automaticen las tareas de los formularios de
nuestra aplicacin. Como ya hemos visto, el Asistente para bases de datos
ha creado algunos botones tiles en el formulario Contactos.
Abra el formulario Contactos y pruebe un botn de orden

1. En el formulario Panel de control principal, pulse IntroducirNer contactos.

Estos botones de rdenes abren otros formularios


o realizan tareas habituales

2. Pulse el botn Llamadas.


Aparecer el formulario Llamadas. Cuando pulse el botn, ste ejecutar unas cuantas lneas de cdigo Visual Basic programado por el Asistente para bases de datos. A continuacin, aadiremos nuestro propio botn al formulario Contactos, que funcionar de forma muy similar.

3. Cierre el formulario Llamadas.


Cree un botn de orden que pase a un registro nuevo

Cuando abrimos el formulario Contactos, aparece el primer registro existente. Si queremos introducir un contacto nuevo, podemos desplazarnos al nuevo registro, al final del conjunto de registros, pulsando el botn Nuevo registro que aparece en la parte inferior de la ventana del formulario. Tambin
podemos utilizar la orden Insertar registro con el mismo resultado.
Nuevo
registro

U
Vista
Diseo

Pero supongamos que queremos hacer esta orden ms accesible a los dems,
para evitar que tengan que localizarla en el men o que se vean obligados a
conocer los botones de navegacin -al fin y al cabo, los usuarios nuevos no
estarn tan familiarizados con Access como nosotros. Para colocar esta orden en primer plano, pasaremos a la vista Diseo de este formulario y colocaremosen su parte inferior un botn que realice la accin cada vez que sea
pulsado. El Asistente para botones de comando generar por nosotros el cdigo de Visual Basic necesario para su funcionamiento.

1. Pulse el botn Vista Diseo en la barra de herramientas. (Si aparece la


hoja de propiedades, cirrela.)

2. Desplcese hacia abajo por el formulario hasta llegar a la seccin Pie del
formulario.

En el formulario Contactos, los botones de orden


aparecen en la seccin Pie del formulario

3. Si no ve el cuadro de herramientas, pulse el botn Cuadro de herramientas en la barra de herramientas.


Cuadro de
herramientas

4. En el cuadro de herramientas, asegrese de que est seleccionada la herramienta Asistentes para controles y pulse la herramienta Botn de comando.
Herramienta Asistentes para controles (seleccionada)

Herramienta Botn de comando

5. En el pie del formulario, pulse justo a la derecha del botn Pgina 2.


I

Pulse aqu
para crear el
nuevo botn

Se abrir el Asistente para botones de comando, preguntando qu accin


desea que ocurra cuando se pulse el botn.

6. En la lista Categoras, seleccione Operaciones con registros.

Existrn diiererites arciories pata cada categora.

Acciones de botn
que podemos
seleccionar

7. En la lista Acciones, seleccione Agregar nuevo registro y pulse Siguiente.


El asistente le preguntar si desea texto o imagen en el botn.

8. Seleccione la opcin Texto y pulse Siguiente.


Cuando creamos nuestros propios botones, puede interesarnos utilizar las
imgenes que el asistente proporciona para los mismos -existe una amplia biblioteca de iconos entre los que elegir. El asistente muestra adems
una vista preliminar del botn que hayamos elegido. No obstante, en este
caso los botones existentes en el formulario Contactos contienen texto,
por lo que, en bien de la consistencia, seguiremos utilizando texto en este
nuevo botn.

9. Escriba AgregarRegistro como nombre del botn y pulse Finalizar.


Nota Aunque el ttulo del botn (Agregar nuevo registro) contiene espacios en blanco, no queremos que los nombres de los botones los incluyan.
A lo largo de este libro asignaremos a los objetos nombres que no contengan espacios, porque as es ms fcil referenciarlos desde el cdigo Visual
B asic.

El asistente finalizar la creacin del botn y lo colocar en nuestro formulario. Fuera de nuestra vista, escribir adems unas cuantas lneas de cdigo
Visual Basic y las conectar con el botn.

, Pruebe el nuevo botn de orden


Conviene asegurarnos de que el botn Agregar nuevo registro hace exactamente lo que queremos.
Vista
Formulario

1. Pulse el botn Vista Formulario en la barra de herramientas.


2. Pulse el botn Agregar nuevo registro.
Access nos llevar a un registro nuevo en la tabla Contactos, mostrando
un formulario vaco para que introduzcamos los datos.

Creacin de otros botones de orden


Podemos ver lo sencillo que resulta personalizar nuestros formularios aadiendo botones de orden. Como vimos cuando utilizamos el Asistente para
botones de comando, aadir un registro es slo una de las muchas operaciones para las que podemos crear un botn -el Asistente para botones de comando puede crear botones para casi todo tipo de tareas. Estas son algunas
de las operaciones habituales para las que podemos crear botones:
i

Navegacin por los registros

i Localizacin y

filtrado de datos

r
;

Cmo funciona el botn?

Si creamos un botn sin utilizar el Asistente para botones de comando, el botn no har nada cuando lo pulsemos. Qu ha hecho el asistente para que el botn haga lo que le pedimos?
Veamos cmo funciona: cada vez que realizamos una accin cualquiera sobre un formulario -pulsar un botn o modificar el valor de
un campo, por ejemplo- se genera un evento. Cada evento es una
oportunidad para que la aplicacin realice alguna accin, como ejecutar una macro o un procedimiento de Visual Basic, Cuando el Asistenbotones de comando cre el botn, conect un procedimiento

(Contina)

(Continuacin)
pulsa el botn se ejecuta el cdigo de Visual
to de evento, haciendo que Access realice la

i Apertura de formularios e
i Impresin y

eada -en

este

informes

dems tareas variadas

El uso del Asistente para botones de comando permite programar sin programar -incluso cuando la programacin con Access se convierta en algo
natural para nosotros, puede que sigamos prefiriendo dejar que el asistente
se encargue de dar los primeros pasos.
Cierre el formulario Contactos

1. Cierre la ventana del formulario.


2. Cuando Access le pregunte si desea guardar los cambios realizados en el
formulario Contactos, pulse S.
Nota Cuando guardamos el formulario, Access no slo guarda el nuevo botn, sino tambin el cdigo de Visual Basic que ha creado el asistente. Debido a que el mdulo del formulario se guarda junto con el formulario, no tendremos que guardar e1 cdigo de Visual Basic por separado.
Cierre la aplicacin y salga de Microsoft Access

1. En el formulario Panel de control principal, pulse Salir de esta base de


datos.
2. En el men Archivo, pulse Salir.

Paso de macros a Visual Basic


En las lecciones siguientes, aprenderemos a realizar muchas tareas de
base de datos utilizando cdigo Visual Basic. Algunas de estas tareas
llev
ss. No obstan-

'

(Contina)

(Continuacin)
te, las macros son mucho menos flexibles y potentes que Visual Basic
-y debido a que existen equivalentes de Visual Basic para prcticamente todas las acciones de las macros, podremos realizar con Visual
Basic las mismas acciones que realizan las macros. Gracias a la potencia y flexibilidad de Visual Basic, tanto el Asistente para bases de
datos como el Asistente para botones de comando crean procedimientos de evento de Visual Basic, no macros.
Si sus bases de datos tienen macros, muy pronto podr convertirlas en
cdigo de Visual Basic -de esta forma, tendr en sus aplicaciones una
strategia de personalizacin consistente. Access convierte esta transacin en una tarea sencilla gracias a un conjunto de rdenes que
plazan las macros por procedimientos en Visual Basic. Para convertir una macro concreta se selecciona la macro en la ventana Base de
datos, se selecciona Guardar como o exportar en el men Archivo y
luego se selecciona Guardar como mdulo de Visual Basic. Para convertir todas las macros que se utilicen en un formulario se abre el formulario en la vista Diseo, se pulsa Macro en el men Herramientas y
se selecciona Convertir macros a Visual Basic. Access no slo crea
procedimientos para todas las rnacros, sino que adems los conecta a
los mismos eventos, de forma que nuestra aplicacin funciona exactamente igual que antes.

Resumen del captulo


Para

Haga esto

Crear una base de datos


Pulse el botn Nueva base de datos
utilizando el Asistente para y pulse dos veces sobre el tipo
bases de datos
de base de datos que desea.
Importar datos en una
base de datos existente

En el men Archivo, apunte a


Obtener datos externos y despus
pulse Importar.

Modificar el formulario
Panel de control de una
base de datos creada por
el Asistente para bases
de datos

Pulse el botn Cambiar los


elementos del panel de control
en el formulario Panel de control.

Botn

Para

Haga esto

Crear un botn de orden


en un formulario

En la vista Diseo, pulse la


herramienta Botn de comando
y pulse sobre el formulario en la
posicin donde quiera colocar
el botn.

Para obtener informacin


interactiva sobre

Botn

Pulse el botn Ayuda y luego pida ayuda sobre

Ayuda

Creacin de aplicaciones
de bases de datos

nueva base de datos

Primeros pasos
con Visual Basic

mdulos de Visual Basic

Creacin de botones
de orden

botn de comando

AVANCE DEL SIGUIENTE CAPITULO


En esta leccin, hemos aprendido que los asistentes pueden crear para nosotros objetos tiles, acompandolos con cdigo de Visual Basic. En el siguiente captulo aprenderemos a ver y realizar modificaciones al cdigo de
Visual Basic que ha generado el asistente, as como a escribir nuestros propios procedimientos de evento para realizar tareas que los asistentes no hacen.

Personalizacin de una
aplicacin con Visual Basic
Objetivos del capitulo
En este captulo aprender a:
Tiempo estimado:
40 minutos.

Ver y entender el cdigo de Visual Basic creado por el Asistente para botones de comando.
M

Editar cdigo de Visual Basic en la ventana de Visual Basic.


Establecer propiedades de formulario y de control utilizando Visual
Basic.
Mostrar un cuadro de mensaje.

Cuando tomamos el autobs circular que rodea la ciudad, la planificacin del


viaje resulta de vital importancia. Dnde para el autobs? A qu distancia
me dejar de mi destino? Nos guste o no, el autobs sigue una ruta predeterminada. Pero, jno sera estupendo que tuviramos el control absoluto sobre
la ruta del autobs? Simplemente podramos sentamos junto al conductor y
decirle gire a la izquierda en el siguiente semforo, siga de frente unos dos
kilmetros -yo me bajo en el segundo edificio de la derecha.
A todo el mundo le gusta tener el control de las situaciones -una caracterstica especialmente habitual en los programadores y usuarios de computadoras. Si hay una queja habitual que provenga de los usuarios de computadoras es del tipo Esta mquina no me deja hacer lo que yo quiero o bien
me encantara poder disear el software para que funcionara de otra forma. El trabajo con Microsoft Access no es una excepcin a esta norma. No

hay duda de que podemos realizar gran parte del trabajo sin demasiado trabajo extra e incluso podemos personalizar el aspecto y comportamiento de
nuestra aplicacin. Pero si queremos que funcione de una forma concreta o
si estamos desarrollando una aplicacin para terceras personas con necesidades muy concretas, tendremos que utilizar Visual Basic. Una aplicacin
personalizada implica ms trabajo de desarrollo, pero si realizamos el esfuerzo de programar nuestras propias soluciones en Visual Basic tendremos
a nuestra disposicin un conjunto ilimitado de posibilidades.
En este captulo comenzaremos a tomar las riendas de la aplicacin -indicndole cmo debe funcionar, en lugar de seguir las reglas establecidas por
Access.

Inicie la leccin
i Inicie Access y abra la base de datos Cap02 Contactos de la carpeta de ar-

chivos de prcticas.

PERSONALIZACIN

DE U N BOTN DE ORDEN

En el primer captulo creamos un botn utilizando el Asistente para botones


de comando y el botn funcion tal como se esperaba -nos llevaba a un registro nuevo en el formulario Contactos. Pero, qu ocurre si creamos un botn con el asistente y no funciona exactamente como queremos? O qu pasa
si el asistente no nos ofrece un botn que haga lo que nosotros queremos?
Puede que ya lo haya adivinado: la respuesta est en el cdigo Visual Basic
que permite funcionar al botn.
En esta seccin, abriremos el procedimiento de evento de Visual Basic para
el botn Agregar registro. Al hacerlo, ver por primera vez la ventana Visual
Basic, ventana que contiene todas las herramientas y las rdenes que permiten crear cdigo Visual Basic para Access u otras aplicaciones de
Microsoft Office. Despus de explorar el cdigo Visual Basic del procedimiento, escribiremos nuestra primera lnea de cdigo, realizando una pequea mejora en el cdigo creado por el asistente.
Abra el formulario Contactos
i En el formulario Panel de control principal,

pulse IntroducirNer contac-

tos.
Aparecer el formulario Contactos mostrando el primer registro.

Cudigo pustal

Pais

Aqu aparece el botn que creamos con el


Asistente para botones de comando

Abra el procedimiento de evento en Visual Basic

A continuacin, observaremos el procedimiento de evento que hace posible


que el botn Agregar registro funcione.

kit
V~sta
Diseo

1. Pulse el botn Vista Diseo.


Ahora le diremos a Access que abra el procedimiento de evento del botn en Visual Basic.
2, Desplcese hacia abajo hasta que vea el pie del formulario.

3. Con el botn derecho del ratn, pulse el botn Agregar registro.

4. Seleccione Generar evento.


La orden Generar evento le indica a Access que abra la ventana Visual
Basic y muestre el procedimiento de evento predeterminado para el objeto seleccionado. Para un botn de orden, ese procedimiento de evento
es el procedimiento de evento Click, por lo que la ventana de cdigo de
Visual Basic muestra el procedimiento AgregarRegistro-Click.

Siempre que pide ver el cdigo de la aplicacin


aparece la ventana Visual Basic

Una
ventana de
cdigo
muestra el
procedimiento que
ha pedido a
Access que
abra

Observe la ventana Visual Basic - e x p l o r e los mens y pase por los botones de la barra de herramientas para ver sus pistas. Aqu es donde va a pasar
bastante tiempo mientras aprenda ms sobre la programacin en Access.

Visualizacin del cdigo Visual Basic que hay detrs de la aplicacin


Cada aplicacin de bases de datos de Access dispone de un proyecto de
Visual Basic que mantiene todo el cdigo de Visual Basic. Cuando se ve
o ejecuta por primera vez cdigo de una base de datos Visual Basic abre
el proyecto asociado. Los proyectos, a su vez, contienen mdulos, cada
uno manteniendo cdigo con diversos propsitos. La ventana Proyecto,
que por defecto se muestra en la esquina superior izquierda de la ventana
Visual Basic, proporciona una tabla de contenidos sobre los mdulos de la
aplicacin.

La ventana Proyecto muestra una


lista de todos los mdulos que pueden
contener cdigo Visual Basic para la
aplicacin
F~rm~Switchboard
Form-Tipos de contactos
,P Report-Contactos por ciudades
,P ReportListado alfabetico de contact
O ReportResumen semanal de llamad

Mdulos de formularios e informes

Mdulo estndar

Cada formulario y cada informe de una base de datos tienen asociado su propio mdulo de formulario o mdulo de informe para guardar el cdigo Visual
Basic -por ejemplo, el cdigo creado por el asistente para nuestro botn se
encuentra guardado en el mdulo de formulario del formulario Contactos.
La mayor parte del cdigo Visual Basic que escribamos pertenecer a un formulario o un informe individuales; no obstante, si escribimos cdigo aplicable a ms de un formulario o informe, podremos guardarlo en uno o ms mdulos estndar, mdulos aparte que agrupan cdigo para diferentes
propsitos.

Nota Cuando visualizamos mdulos de formulario o de informe o cuando


leemos acerca de ellos en la documentacin de Access, es posible que los encontremos referenciados como mdulos de clase (class module). Por lo que
respecta a este libro no es necesario preocuparse por el significado de esta
frase (est tomada de la terminologa utilizada en la orientacin a objetos en
Informtica); nos basta con recordar que los mdulos de formulario y de informe, a diferencia de los mdulos estndar, pertenecen a la categora ms
amplia de los mdulos de clase.
En los mdulos de la aplicacin, el cdigo de Visual Basic se agrupa en unidades denominadas procedimientos, cada uno de los cuales realiza una tarea
especfica -por ejemplo, el cdigo que responde a una pulsacin del botn
Agregar registro es un procedimiento. Un mdulo puede contener muchos
procedimientos, uno por cada evento al que queramos contestar o tarea que
queramos realizar.

Una mirada ms detenida al procedimiento de evento del botn

Fijmonos en el procedimiento de evento que el Asistente para botones de


comando ha creado para el botn Agregar registro. La primera vez que se
abre un mdulo, Visual Basic muestra todos los procedimientos del mdulo:
si nos desplazamos arriba y abajo por la ventana Cdigo veremos otros procedimientos de Visual Basic que el Asistente para bases de datos cre en el
formulario Contactos. Para simplificar la visualizacin se puede pasar del
modo Ver mdulo completo al modo Ver procedimiento, de forma que en la
ventana Cdigo se muestren los procedimientos de uno en uno.
i Pulse

el botn Ver procedimiento (situado en la esquina inferior izquierda de la ventana Cdigo).

DoCmd.GoToRecord

, , acNewRec

~xit-~gregar~egistro-click:

Err BgregarRegistro-Click:
MsgBox Err.Description
Resume Exit-AgregarRegistro-Click

Procedimiento
del evento Clic
para e/ botn
Agregar registro

Botn Ver
procedimiento

Ahora en la ventana slo se muestra un procedimiento de evento, el procedimiento AgregarRegistro-Click.


El cdigo Visual Basic de este procedimiento se ejecuta automticamente
cada vez que se pulsa el botn Agregar registro. El principal atractivo de este
procedimiento es la siguiente lnea de cdigo Visual Basic, que le indica a
Access que pase al nuevo registro:

Separemos esta lnea parte por parte para entender su funcionamiento. Mientras lo hacemos aprender unos cuantos trminos importantes.
i Las

palabras que Visual Basic reconoce como parte de su lenguaje de


programacin se denominan palabras clave. Existe una palabra clave por
cada instruccin, funcin, mtodo, objeto y propiedad que utilizamos en
Access.

i La

primera palabra clave de la lnea es DoCmd (por Do Command,


realizar orden), que aparecer continuamente cuando programemos Access. DoCmd es un objeto -comparte esta honrosa distincin con otros
objetos a los que estamos ms acostumbrados, como los formularios, informes y controles. El objeto DoCmd se utiliza para realizar acciones habituales de la interfaz de Access, como abrir un formulario, imprimir un
informe o seleccionar una orden de men.

La segunda palabra clave es GoToRecord, un mtodo para el objeto


DoCmd. Todos los objetos que reconoce Access tienen su propio conjunto de mtodos que utilizaremos con dicho objeto. Los mtodos del objeto DoCmd son todas las acciones que nos permite realizar -de hecho, si
ya ha creado macros en Access, reconocer las acciones que puede realizar con el objeto DoCmd como acciones de macro disponibles en la ventana Macro. El mtodo GoToRecord, como su nombre sugiere (ir a registro), le indica a Access que se desplace a un registro especfico del
conjunto de registros actual.

Para ejecutar un mtodo sobre un objeto, como el objeto DoCmd, escribiremos el nombre del objeto seguido inmediatamente por el mtodo, separando ambas palabras con un punto.

i Lo que sigue al mtodo

GoToRecord son sus argumentos, que proporcionan toda la informacin necesaria para ejecutar el mtodo. Los argumentos del mtodo GoToRecord, por ejemplo, nos permiten especificar opciones tan importantes como cul ser el registro al que pasaremos. Los
argumentos se escriben a continuacin del mtodo, dejando un espacio
. en blanco y separando los valores de argumento con comas. Si no es necesario especificar el valor de uno o ms argumentos, podemos dejarlos
en blanco escribiendo una coma por cada uno -por ejemplo, la lnea anterior omite los dos primeros argumentos, indicando nicamente el tercero de ellos.

Algunos mtodos, como GoToRecord, tienen valores constantes definidos especialmente para ser introducidos como argumentos. El argumento acNewKec es una constante que indica al mtodo GoToRecord que se
desplace al nuevo registro al final del conjunto de registros actual (otras
opciones permiten desplazamientos al primer registro o al registro siguiente). La constante acNewRec corresponde en realidad al nmero 5
-aunque resulta mucho ms sencillo recordar el nombre de la constante
y se facilita la lectura del cdigo.

En resumen, esta lnea de cdigo utiliza el mtodo GoToRecord del objeto


DoCmd para desplazarse al registro especificado -en este caso, a un nuevo
registro.

Aunque en realidad es la lnea DoCmd estudiada la que realiza el trabajo en el procedimiento AgregarRegistro-Click, puede que se pregunte para qu sirve el resto del cdigo generado por el Asistente para
botones de comando. Este es el procedimiento completo:
Private Sub AgregarRegistro-Click()
On Error GoTo Err-AgregarRegistro-Click

DoCmd GoToRecord ,

acNewRec

Exit-AgregarRegistro-Click:
Exit Sub

Err-AgregarRegistro-Click:
MsgBox Err.Description
Resume Exit-AgregarRegistro-Click

Las lneas Private Sub y End Sub definen el comienzo y final del procedimiento. Veremos lneas similares en todos los procedimientos de evento -aunque como Visual Basic las aade automticamente a todos los
ocedimientos, no tendremos que preocuparnos por ellas.
restantes lneas del procedimiento -salvo la lnea de DoCmd- prorcionan la gestin de errores para el procedimiento. El Asistente para
botones de comando incluye estas lneas de gestin de errores para que, en
aso de producirse un error, la aplicacin no se detenga. En el Captulo 7
aprenderemos a aadir nuestro propio cdigo para la gestin de errores en
las aplicaciones; por ahora, dejaremos que el asistente se encargue de ello.

MODIFICAC~N DE UN BOTN DE ORDEN CREADO CON EL ASISTENTE


El Asistente para botones de comando es una estupenda herramienta para
personalizar nuestras aplicaciones, pero no es perfecta. A pesar de que crea
botones para una gran variedad de tareas, no puede prever todas las acciones
que podamos querer llevar a cabo. Afortunadamente, si el asistente no logra
ajustarse exactamente a nuestras necesidades, podemos modificar manualmente los botones que haya creado para que se ajusten a nuestros deseos.

Esto es exactamente lo que vamos a hacer en esta seccin con el botn Agregar registro.
No hay nada errneo en el botn Agregar registro -cuando lo pulsamos,
salta al nuevo registro del conjunto actual- aunque puede depurarse un
poco su funcionamiento. Para hacerlo, modificaremos primero una propiedad y despus aadiremos una lnea de cdigo Visual Basic al procedimiento de evento del botn.
Aada un acelerador de teclado al botn de orden

Al botn Agregar registro le vendra bien una sencilla y til caracterstica


que poseen otros botones del formulario Contactos. El resto de los botones incluyen aceleradores de teclado -caracteres subrayados que nos
permiten <<pulsarlos botones desde el teclado. Debido a que muchos
usuarios prefieren utilizar el teclado en lugar del ratn, conviene utilizar
siempre en nuestras aplicaciones acceso por teclado adems del acceso
con el ratn. Para el botn Agregar registro, utilizaremos la tecla A
como aceleradora.
Para proporcionar una tecla aceleradora a un botn, bastar con que editemos
la propiedad Ttulo del botn - q u e determina el texto que aparecer sobre
el botn- para incluir en ella el smbolo ampersand (&). Este smbolo en el
ttulo de un botn le indica a Access que el siguiente carcter del ttulo ser
la tecla aceleradora para dicho botn.
Para realizar cambios en el formulario primero debemos volver desde Visual
Basic a Access. Visual Basic proporciona un botn en la barra de herramientas para situar a Access en primer plano.
Ver
Microsoft
Access

1. Pulse el botn Ver Microsoft Access de la barra de herramientas.


El formulario Contactos, todava en la vista Diseo, se colocar al frente. Observe que no tenemos que cerrar el mdulo del formulario de la
ventana Visual Basic para seguir trabajando en el propio formulario
-Visual Basic permanece abierto en segundo plano y se puede cambiar
a l siempre que se quiera.

2. Con el botn derecho del ratn, pulse el botn Agregar registro y pulse
despus Propiedades en el men contextual.
Access mostrar la hoja de propiedades del botn Agregar registro.

3. Pulse la pestaa Todas en la hoja de propiedades.

4. En el cuadro de propiedad Ttulo, pulse en el borde izquierdo del texto


Agregar registro (antes de la A>>)y escriba &.
El smbolo ampersand (&) le indicar al asistente que la letra A de
Agregar registro ser la tecla aceleradora del botn. De esta forma, el
usuario podr pulsar ALT+A para obtener el mismo resultado que si pulsa
el botn Agregar registro. El botn no mostrar el ampersand, sino que la
letra A aparecer subrayada en el botn.
]

mato
Datos
Eventos
Ottas
mbre . . . . . . . . . . . . . . . . . . . . . .
uio . . . . . . . . . . . . . . . . . . . . . . .
-cien . . . . . ,
iriinguna)
u de imagen
,
ente.
N,?
minado
11
'3
'
rlu
n aiikomtica . . . . . . . . . . . . l l o
la batra de estadn
hipsrvinculn . . . . . . . . . .
de hpet vncub

.............
....... .........
.................
................
...................
.......

.....

.......
......

....
...............

.....
. . . . . .v. . .

.......

5. Cierre la hoja de propiedades.


Utilice la tecla aceleradora para pulsar el botn de orden
Vista
Formulario

1. Pulse el botn Vista Formulario en la barra de herramientas.


2. Pulse ALT+A.
Access se desplazar al nuevo registro de la tabla Contactos, igual que si
hubiramos pulsado el botn con el ratn.
Aada una lnea al procedimiento de evento para cambiar el foco

El botn Agregar registro necesita otra modificacin. Observe que despus


de pulsar el botn, el foco sigue estando en el botn Agregar registro -no
hay ningn punto de insercin o campo en el que escribir los datos. Para poder introducir los datos, el usuario deber pulsar primero en el campo Nombre del formulario. Lo ideal sera que el foco pasara automticamente al primer campo del registro. Para ello escribiremos una lnea de cdigo Visual
Basic.

...nos interesa que el foco pase al primer campo,


para que el usuario pueda empezar
a introducir los datos

Despus de pulsar el botn Agregar


registro...

1. Vuelva a Visual Basic (en la barra de tareas de Windows, pulse el botn


Microsoft Visual Basic - Cap02 Contactos).
Visual Basic todava muestra el procedimiento de evento AgregarRegistro-Click.

2. Pulse en la lnea en blanco que se encuentra debajo de la lnea DoCmd en


el procedimiento de evento, pulse TAB y escriba Nombre.
Nombre es el nombre de un objeto de control de nuestro formulario.
(Asegrese de escribir los nombres de objetos tal cual se indique
-sin incluir espacios adicionales.) A continuacin, especificaremos
el rritodo que deseamos utilizar con el objeto Nombre: el mtodo
SetFocus. Como ya vimos anteriormente, un punto separa al mtodo
de su objeto.

Escriba un punto y a continuacin Set.


Cuando escribimos un punto despus del nombre de un objeto, Visual
Basic supone que a continuacin deseamos escribir un mtodo o una
propiedad de ese objeto. Para ayudarnos a escribir un mtodo o una propiedad vlido, muestra una lista debajo de la lnea en la que estamos escribiendo. Segn escribimos, la lista se desplaza hacia abajo automticamente para mostrar las entradas que empiezan por las mismas letras que
hemos escrito.

Private Sub BgregarRegistro-ClickO


n Error GoTo Err-AgregarRegistro-Click

- Visual Basic
ayuda a escribir
el cdigo
mostrando en
una lista las
propiedades y
los mtodos
del objeto

Escribir Set fue suficiente para que el mtodo SetFocus apareciera en la


lista. La forma ms sencilla de introducir el elemento seleccionado en la
lista es pulsar la BARRA ESPACIADORA, aunque tambin se puede optar por
seguir tecleando el cdigo o por pulsar dos veces sobre cualquier mtodo o propiedad de la lista.

4. Pulse la BARRA ESPACIADORA y a continuacin pulse INTRO.


Ahora la lnea de cdigo Visual Basic est completa:
Nombre. SetFocus

Esta lnea le indica a Access que pase el foco al objeto formulario o control especificado - e n este caso, al control Nombre.
Aqu est el procedimiento con la nueva lnea de cdigo.

n Error GoTo ~rr-Bgregar~eiistro-click

DoCmd.GoToRecord
Notrhre. SetFocus

, , acNewRec

Exlt~AgregarRegi~tro~C1ick:

Err~AgregarReglstro~C1ick:
MsgBox Err.Description
Resume Exit-AgregarRegistro-Click

Pruebe el botn de orden

1. Vuelva a Access (pulse el botn Ver Microsoft Access en la barra de herramientas).


Ver
Microsofi
Access
.-.

2. Pulse el botn Agregar registro.


Access pasar al nuevo registro en la tabla Contactos. Esta vez, sin embargo, observar que el punto de insercin se encuentra parpadeando en
el campo Nombre, listo para que comencemos a introducir datos.

A medida que vayamos depurando la aplicacin, podremos utilizar el mtodo SetFocus siempre que queramos anticipar lo que los usuarios vayan a hacer a continuacin. El paso a un formulario o un control mediante el mtodo
SetFocus es una forma extraordinaria de ahorrar pulsaciones al usuario -lo
que facilitar el uso de la aplicacin.

Puede que haya observado que es posible modificar el procedimiento


de evento Click mientras el formulario Contactos est en la vista Formulario --en cierto sentido, hemos modificado el diseo del formulario sin pasar a la vista Diseo. Esta caracterstica es nica de Visual

normalmente, no tendremos por qu reiniciar una compleja aplicac


para poder realizar algunos cambios menores.

dremos apreciar el hecho de qu


tantemente de la vista Diseo

Guarde las modificaciones realizadas al botn Agregar registro

Ahora que hemos terminado de modificar el botn, debemos guardar los cambios.
i Pulse el botn Guardar de la barra de herramientas.

Guardar

Access guardar los cambios en el formulario y en el mdulo de formulario.

APLICACIN POR OMISIN DEL MODO SLO-LECTURA


A UN FORMULARIO
Si escribimos en cualquiera de los campos del formulario Contactos, estaremos editando el conjunto de registros. Esta es una de las grandes ventajas de
Access sobre la mayora de los sistemas de bases de datos: los datos estn
casi siempre disponibles tanto para su visualizacin como para su modificacin. No obstante, los usuarios de empresas suelen estar preocupados porque
no se revuelva la informacin de una base de datos -sus datos son importantes y no desean que sea demasiado fcil modificarlos.
En esta seccin, modificaremos el formulario Contactos para proporcionar
una solucin a este requisito habitual a la hora de introducir datos. La idea es
hacer que el modo por omisin de un formulario sea slo-lectura, para que
los usuarios no puedan realizar modificaciones a menos que lo indiquen explcitamente. De esta forma, los usuarios podrn abrir el formulario y consultar la informacin sobre contactos sin preocuparse por posibles modificaciones accidentales.

El primer paso es sencillo: para hacer que un formulario sea de slo-lectura,


bastar con asignar a la propiedad Permitir ediciones el valor No. Pero entonces necesitaremos una forma de permitir al usuario solicitar dichas modificaciones. Lo que nos interesa es un par de botones adicionales en el formulario: uno para indicar que queremos editar los datos y otro para guardar
el registro que se ha editado. Para uno de estos botones, evitaremos utilizar
el Asistente para botones de comando - e n lugar de ello, crearemos el botn
por nuestra cuenta y escribiremos despus un procedimiento de evento de
Visual Basic para que el botn funcione.

TIM de contactu

Primero haremos
que por omisin
el formulario sea
de slo-lectura ...

L .,.y despus proporcionaremos al


usuario botones para modificar
y guardar el registro

Haga que los registros del formulario Contactos sean de slo-lectura

1. Pulse el botn Vista Diseo en la barra de herramientas.

2. Pulse dos veces el cuadro de seleccin del formulario de la esquina supeVista


Diseo

rior izquierda de !a ventana del formulario (en la interseccin de las reglas).


Pulse aqudos veces para
seleccionar el formulario y
mostrar sus propiedades

Access mostrar las propiedades del formulario en la hoja de propiedades.

3. Pulse la propiedad Permitir ediciones y cambie su valor a No.

La propiedad Permitir
ediciones controla la
posibilidad de modificar
registros existentes
en el formulario

Esto es todo lo que tendremos que hacer para resolver el problema de una
modificacin accidental de los datos; ahora, cuando abramos el formulario con un registro existente, no podremos modificar los datos. Observe
que estamos dejando las otras dos propiedades Permitir-Permitir eliminacin y Permitir agregar- con el valor S, para que los usuarios puedan seguir borrando o aadiendo registros. El borrado o eliminacin accidental de registros no ser un problema, ya que Access avisa
automticamente a los usuarios antes de borrar los registros.

..
Vista
Formulario

4. Cierre la hoja de propiedades.


5. Pulse el botn Vista Formulario en la barra de herramientas.
6. Intente escribir algunas letras en el cuadro de texto Nombre.
No ocurre nada porque el registro es de slo-lectura -y
tentes permanecen seguros.

los datos exis-

Nota Como puede ver en la ilustracin anterior, la hoja de propiedades


muestra espacios entre las palabras de los nombres de las propiedades para
que sean ms fciles de leer. Sin embargo, cuando se utilizan las propiedades en Access o en Visual Basic, no se escriben espacios entre las palabras y
en general conservan el nombre en ingls. En este procedimiento, por ejemplo, el nombre real de la propiedad es AllowEdits y no Permitir ediciones,
como aparece en la hoja de propiedades.

CREACIN DE U N BOTN DE ORDEN SIN UTILIZAR EL ASISTENTE


Ahora que el formulario es de slo-lectura, necesitamos un botn de orden
que vuelva a asignar a la propiedad Permitir ediciones el valor S. Pero el
Asistente para botones de comando no nos ofrece ningn botn que cambie
el valor de una propiedad. ESel momento de seguir adelante sin la ayuda de
asistentes!
En primer lugar, crearemos el botn y estableceremos sus propiedades.
Despus, utilizaremos la orden Generar evento para crear nuestro propio
procedimiento de evento para el evento Click del botn.
Cree el botn de orden Modificar registro

Nos interesa colocar el nuevo botn junto a los dems botones existentes en
el pie del formulario.
Vista
Diseo

1. Pulse el botn Vista Diseo de la barra de herramientas.

2. Desplcese hasta el pie del formulario.

3. Si el cuadro de herramientas no est visible, pulse el botn Cuadro de herramientas en la barra de herramientas.
Cuadro de
herramientas

Asistentes
para controles

4. En la caja de herramientas, pulse la herramienta Asistentes para controles para deseleccionarla y despus pulse la herramienta Botn de comando.
Al deseleccionar la herramienta Asistentes para controles le indicamos
a Access que no queremos utilizar el asistente para crear este control
-seremos nosotros mismos quienes determinemos sus propiedades.

5. En el pie del formulario, pulse justo a la derecha del botn Agregar registro.

Botn de
comando

Coloque
aqu el
nuevo
botn

Al no estar seleccionada la herramienta Asistentes para controles, el botn aparece inmediatamente, con un nombre por omisin (como Comando47) y ningn procedimiento de evento asociado.

6. Pulse el botn Propiedades de la barra de herramientas.


7. En el cuadro de propiedad Nombre, escriba ModificarRegistro.
Propiedades

8. Pulse INTRO y despus, en el cuadro de propiedad Ttulo, escriba Modificar &registro.


El carcter ampersand (&) en el ttulo del botn le indica a Access que la
de Modificar registro ser la tecla aceleradora para el botn.
letra
Nota Asegrese de incluir un espacio en el ttulo del botn, pero no en el
hombre de control del mismo. Ninguno de los campos o controles del formulario Contactos contienen espacios en sus nombres, ya que los espacios
dificultan el trabajo con los controles (cada vez que escribimos el nombre debemos encerrarlo entre corchetes).

Irnagen

..................

Tranqarentr .
Predeterrrnnadii

. . . . . . .
,

Ct~reciiride hpervncuio .

........
.

9. Cierre la hoja de propiedades.

d
.

Cree el procedimiento de evento Click del botn

Por ahora, el nuevo botn no hace nada cuando lo pulsamos. Necesitamos


escribir un procedimiento de evento en Visual Basic para que funcione.

1. Con el botn derecho del ratn, pulse el botn Modificar registro y despus pulse Generar evento en el men abreviado
Access mostrar el cuadro de dilogo Elegir generador. (Si deseramos
crear una expresin o una macro en lugar de cdigo Visual Basic, seleccionaramos Generador de expresiones o Generador de macros.)

2. Seleccione Generador de cdigo y pulse Aceptar.


Access abrir el mdulo formulario para el formulario Contaclos y crear un procedimiento de evento para el evento Click del botn.

El procedimiento creado por Visual Basic se llama ModificarRegistro-Click.


El nombre de un procedimiento de evento consta de dos partes, separadaspor
un guin bajo: el nombre de un objeto y un evento al que responder. Podemos ver el nombre ModificarRegistro~Clickcomo el cdigo que se ejecuta
cuando pulsamos el control Mod$carRegistro.

3. Pulse INTRO, pulse TAB y escriba la siguiente lnea de cdigo Visual Basic.
Me.AllmEdits = True

Nota Segn escriba esta lnea comprobar que Microsoft Access le ayuda
de nuevo mostrando una lista de opciones debajo del cdigo que est tecleando -primero cuando escribi el punto y despus cuando escribi el signo
igual. En esta ocasin, escriba la orden completa.

El signo igual (=) en el cdigo Visual Basic significa asigna el valor de


la expresin de la derecha a la cosa que se identifica a la izquierda. En
este caso, la cosa de la izquierda es la expresin Me.AllowEdits que
hace referencia a la propiedad AllowEdits (Permitir ediciones) del formulario -para hacer referencia a una propiedad del formulario actual en
el mdulo del formulario, utilizamos la palabra clave Me, seguida de un
punto y del nombre de la propiedad. Este cdigo le indica a Visual Basic
que asigne el valor Verdadero a la expresin de la izquierda. Es como si
el formulario le estuviera diciendo a Visual Basic Asigna a mi propiedad AllowEdits el valor True (Verdadero).
Asignar a una propiedad el valor True en el cdigo de Visual Basic equivale a asignar a dicha propiedad el valor S en la hoja de propiedades.
(Para asignar a una propiedad el valor No desde el cdigo, le asignaremos el valor False.)

4. Pulse INTRO y escriba la siguiente lnea, con el fin de que el foco vuelva
al primer control del formulario -igual que hacemos en el procedimiento de evento AgregarRegistro-Click:
'

Nombre.SetFocus

Pulse INTRO. Nuestro procedimiento de evento ser similar a ste:

Me. AllowEdits = True


Nombre.SetFocus

Ver
Microsoft
Access

Pruebe el botn Modificar registro

1. Vuelva a Access.
Vista
Formulario

El formulario Contactos an est en la vista Diseo. Para probar el cdigo hay que cambiar a la vista Formulario.

2. Pulse el botn Vista Formulario.

3. Pulse el campo Estimado e intente escribir en el mismo.


No podr escribir nada - e l registro sigue estando en modo slo-lectura.

4. Pulse el botn Modificar registro que acaba de crear.


Aunque ocurre tan deprisa que no tenemos tiempo de apreciarlo, Access ha
ejecutado nuestro procedimiento de evento cuando pulsamos el botn. La propiedad Permitir ediciones debe de tener ahora el valor S. Adems, observar
que el foco est en el campo Nombre, tal como hemos especificado con el mtodo SetFocus en el procedimiento de evento. Pero queremos editar el campo
Estimado para aadir el apelativo carioso de este contacto al registro.

5. Pulse el campo Estimado y escriba Lucho.


Ahora podr editar los datos, lo que significa que el procedimiento de
evento del botn ha modificado correctamente la propiedad AllowEdits
asignndole el valor True.
Nota Si escribe algo incorrecto cuando cree el procedimiento de evento, la
pulsacin sobre el botn provocar probablemente la aparicin de un mensaje de error. Si ocurre esto, no se preocupe -Visual Basic abrir la ventana
de cdigo donde podr comparar el cdigo que ha escrito con el que aparece ms arriba. Despus de realizar las correcciones oportunas, pulse el botn
Continuar en la barra de herramientas y vuelva a Access.
Aada comentarios a su procedimiento de evento

La primera vez que observamos cualquier procedimiento de Visual Basic, tanto si lo hemos escrito nosotros como si no, resulta difcil averiguar qu es lo
que hace el procedimiento y por qu est ah. Para facilitar la comprensin de
nuestras aplicaciones, es muy importante incluir comentarios entre medias del
cdigo. Los comentarios son como notas para nosotros mismos, que nos ayudarn a explicar lo que estbamos pensando cuando escribimos el cdigo.
Para aadir un comentario al cdigo de Visual Basic, bastar con colocar un
apstrofe ( ' ) delante del texto.

1. Cambie a Visual Basic.


2. Pulse en la lnea vaca que sigue a la instruccin Private Sub en la ventana Cdigo y escriba la siguiente lnea:
' Permite modificar el formulario Contactos.

Cuando consultemos este procedimiento ms adelante, no tendremos que


imaginarnos qu es lo que hace o por qu lo hemos escrito.

3. Pulse INTRO. Podemos observar que Visual Basic muestra el texto del comentario en color verde.

4. Pulse al final de la lnea que incluye el mtodo SetFocus, pulse

TAB

dos

veces y escriba el texto siguiente.


' Ir al campo Nombre.

Como podr observar, un comentario puede comenzar en una lnea vaca


o servir como explicacin de la lnea en la que se incluye. Un comentario en una lnea independiente suele proporcionar informacin sobre varias lneas de cdigo o sobre un procedimiento completo, mientras que un
comentario a la derecha de una lnea de cdigo normalmente explica lo
que hace la lnea.

Me.AllowEdits = True
Nombre.SetFocus
' Ir al campo ~ombre.1

Cree un botn de orden que guarde el registro actual

Con los dos botones que ya ha creado, los usuarios podrn aadir nuevos registros o modificar los existentes. Pero an debemos aadir otro botn.
Ver
Microsofi
Access

Vista
Diseo

Cuando se introducen o se modifican los datos de un contacto, podemos


guardarlos pasando a otro registro o bien cerrando el formulario. Ahora bien,
otra opcin consiste en utilizar la orden Guardar registro (del men Registros) para guardar explcitamente el registro actual. Podemos permitir que
esta orden sea ms accesible a los usuarios, de forma que no tengan que localizarla en el men. En vista de que el Asistente para botones de comando
crea un botn con este fin, lo razonable ser utilizarlo.

1. Vuelva a Access.
2. Pulse el botn Vista Diseo de la barra de herramientas.

\:.
Asistentes
para controles

3. Desplcese por el formulario hasta el pie del mismo.

4. En el cuadro de herramientas, pulse la herramienta Asistentes para controles para seleccionarla y despus pulse la herramienta Botn de comando.

5. En el pie del formulario, pulse justo a la derecha del botn Modificar registro.
Botn de
comando

Pulse aqupara crear


el nuevo botn

Se abrir el Asistente para botones de comando y nos preguntar la accin que queremos que lleve a cabo el botn.

6. En la lista Categoras, seleccione Operaciones con registros.


7. En la lista Acciones, seleccione Guardar registro y pulse Siguiente.
El asistente le preguntar si desea que en el botn aparezca una imagen o
texto.

8. Seleccione la opcin Texto.


9. En el cuadro Texto, coloque el cursor a la izquierda del texto Guardar registro y escriba &.
La inclusin del ampersand (&) le indica al asistente que la G de Guardar registro ser la tecla aceleradora para el botn.

10. Pulse Siguiente.


11. Escriba GuardarRegistro como nombre del botn y pulse Finalizar.
El asistente finalizar la creacin del botn y de su procedimiento de
evento y lo colocar en el formulario.

12. Si fuera necesario, modifique el tamao y alineacin de los botones en el


pie para que sean uniformes. (Cuando se crean botones mediante procedimientos distintos, es muy probable que sus tamaos y alineacin sean
diferentes.)

Consejo Cuando realice los ajustes finales a los controles de un formulario o de


un informe, puede resultarle difcil alinearlos correctamente y hacerlos del mismo
tamao. Para llevar a cabo estas operaciones con facilidad, seleccione los controles y utilice una de las diferentes rdenes Alinear o Tamao del men Formato.

Guardar

13. Pulse el botn Guardar en la barra de herramientas.


Access guardar el formulario y su mdulo.

CREACIN DE PROCEDIMIENTOS DE EVENTO PARA EVENTOS


DE FORMULARIO
Hasta este momento, hemos trabajado solamente con procedimientos para el
evento Click - c d i g o que se ejecuta cuando pulsamos un botn. Pero existen muchos otros eventos a los que responde el cdigo. En esta seccin, trabajaremos con procedimientos de evento para dos eventos de formulario.
Cuando un usuario pulsa el botn Modificar registro que hemos creado, el
cdigo permite la edicin en el formulario. Cuando los usuarios guardan el
registro o pasan a otro registro, debemos devolver el formulario a su estado
de s0lo-lectura, de forma que los registros sigan estando protegidos contra
eventuales modificaciones accidentales, hasta que se vuelva a pulsar el botn Modificar registro.
Gran parte de la complejidad a la hora de programar con Access radica en
averiguar a qu evento debemos conectar el cdigo. Podramos haber aadido al botn Guardar registro el cdigo necesario para volver a desactivar la
propiedad AllowEdits. Pero existen otras formas para que el usuario pueda
guardar un registro modificado -mediante una orden de men, por ejemplo- y nuestra aplicacin necesita anticiparse a dichas posibilidades. Adems, el usuario podra pasar a otro registro sin guardar el actual, en cuyo caso
tambin nos interesara devolver a la propiedad AllowEdits el valor False.

Los dos casos que debemos tener en cuenta son:


Siempre que el usuario pase a otro registro existente.
Siempre que el usuario guarde el registro actual utilizando un mtodo.
Para el primer caso deberemos aadir una lnea de cdigo al procedimiento
de evento del evento Current (al activar registro), que tiene lugar siempre que
Access muestra un registro existente en un procedimiento de formulario. (El
Asistente para bases de datos ya ha creado este procedimiento de evento.)
Para el segundo caso, crearemos nuestro propio procedimiento de evento
para el evento AfterUpdate (tras actualizar) del formulario, que ocurre siempre que se guarda un registro en un formulario. Utilizando ambos, nos aseguramos de que devolvemos al formulario su estado de slo-lectura siempre
que procede.
Edite el procedimiento para el evento Current del formulario

En este captulo ya hemos utilizado la orden Generar evento del men contextual para crear o abrir el procedimiento de evento Click de un botn. Pero
la orden Generar evento siempre abre el evento predeterminado del objeto
que seleccionamos. En vista de que el evento Current no es el evento predeterminado en un formulario, tendremos que utilizar un mtodo ms general
para abrir el procedimiento de evento -crearemos el procedimiento estableciendo una propiedad de evento en la hoja de propiedades.

1. Pulse dos veces el cuadro de seleccin de formulario que se encuentra en


la esquina superior izquierda de la ventana de formulario (en la interseccin de las reglas).
Access mostrar las propiedades del formulario en la hoja de propiedades.

2. Pulse la pestaa Eventos de la hoja de propiedades.


3. Pulse la propiedad Al activar registro y despus pulse el botn Generar
en la parte derecha del cuadro de propiedad.

Despus di. mssrtar . . . . . . . . . . .


hntes de actciahzar , . . . . . ,
.
. . .
Despues de actiializar . . . . . . . . .
..
En datos no guardds , , , . , ,
elm~nar. . . . . . . . . . . . . . . .

--m
-

Botn
Generar

4. Seleccione Generador de cdigo y pulse Aceptar.


Access dir a Visual Basic que cree el procedimiento de evento llamado
Form-Current y lo muestre en la ventana Cdigo.

5. Pulse INTRO y escriba la siguiente lnea de cdigo Visual Basic:


Me.AllowEdits = False 'Devuelve el formulario a slo lectura.

Al asignar a la propiedad AllowEdits el valor False, esta lnea de cdigo


devuelve el formulario a su estado de slo-lectura cada vez que pasamos
a un registro existente en el formulario.

6. Pulse INTRO.
Copie el procedimiento al evento AfterUpdate del formulario

Necesitamos que este mismo cdigo se ejecute cuando se produzca el evento AfterUpdate, pero AfterUpdate an no tiene ningn procedimiento de
evento. En lugar de volver a escribir el cdigo de Form -Current en Visual
Basic, podemos copiar el cdigo desde un procedimiento a otro.

1. En la ventana Cdigo, seleccione la lnea de cdigo que ha aadido

a.

Ver
Microsofi
Access

(pulse a la izquierda de la lnea de cdigo -pero a la derecha del margen


gris- para hacer que toda la lnea aparezca resaltada).

2. En el men Edicin, pulse Copiar.


3. Cambie a Access.

4. Pulse la propiedad Despus de actualizar y despus pulse el botn Generar, a la derecha del cuadro de propiedad.

5. Seleccione Generador de cdigo y pulse Aceptar.


Visual Basic muestra el procedimiento de evento Form-Afterpdate.

6. Pulse INTRO.
7. En el men Edicin, pulse Pegar.

VISUALIZACIN DE UN MENSAJE PARA EL USUARIO


La comunicacin con los usuarios de nuestra aplicacin es un aspecto muy
importante de la misma. Una forma de comunicarse con los usuarios es la
utilizacin de un cuadro de mensaje. La instruccin MsgBox nos permite
proporcionar cierta informacin en respuesta a los eventos de nuestra aplicacin.
Los mismos usuarios que se preocupaban por la posible modificacin accidental de sus datos, desearn tambin una confirmacin de que dichos datos
han quedado registrados despus de editar un registro. Para estos usuarios,
podemos mostrar un mensaje en respuesta al evento AfterUpdate, confirmando que el registro ha sido guardado.
Aada cdigo que muestre un cuadro de mensaje

1. Pulse TAB, escriba MsgBox y pulse la BARRA ESPACIADORA.


Debajo de la lnea que est escribiendo aparece un recuadro donde se
muestran los argumentos que se pueden utilizar con MsgBox. Este es otro
de los mecanismos con los que Visual Basic nos ayuda a escribir cdigo
-cuando necesitamos conocer la sintaxis de una instruccin o una funcin de Visual Basic, la tenemos disponible.

Informacin sintctica
sobre la instruccin
MsgBox

2. Escriba Registro guardado. y pulse INTRO.

Con esto se completa la lnea MsgBox, pasando como argumento el mensaje que queremos mostrar al usuario. Como se trata de un argumento de
cadena, deberemos encerrarlo entre comillas. (En Visual Basic, cualquier
dato de texto o combinacin de nmeros y texto se denomina cadena.)
Este es el cdigo completo del procedimiento de evento Form-After Update.
-

ne.Allauldit~

Palsc

'Devuelve el iormulario a salo lrciur

llsgBDX "Registro guardado."

Consejo Si la informacin sintctica que aparece junto a una instruccin o


una funcin no es suficiente siempre se puede acudir a la ayuda interactiva.
Basta con pulsar sobre una palabra clave de Visual Basic en la ventana Cdigo y pulsar la tecla FI para mostrar un tema de ayuda con toda la informacin sobre dicha palabra clave.
Guarde sus modificaciones al formulario Contactos

Ahora que ya hemos terminado de aadir todos los botones al formulario y


de modificar sus procedimientos de evento, debemos guardar los cambios
del formulario.

1. Cierre Visual Basic.


Access vuelve a estar visible.
Guardar

2. Cierre la hoja de propiedades.


3. Pulse el botn Guardar de la barra de herramientas.
Access guardar los cambios en el formulario y en su mdulo de formulario.

Pruebe los botones con sus cambios

Debemos asegurarnos de que los botones Modificar registro y Guardar registro funcionan correctamente. Supongamos que nos proporcionan el nmero del telfono mvil del primer contacto y que deseamos introducirlo en
el formulario Contactos.
Esta
Formulario

1. Pulse el botn Vista Formulario en la barra de herramientas.


2. Pulse el botn Modificar registro.

3. Pulse el campo Telfono mvil y escriba 906 22 44 55.


Cuando modificamos datos en un registro y an no hemos guardado la informacin, el selector de registro (en la parte izquierda del formulario)
muestra un icono de un lapicero.

El icono del lapicero indica que los cambios


an no han sido guardados

. ..
Caigo

i,r,li,csa

4. Pulse el botn Guardar registro.


Access guardar el registro en la tabla Contactos y cambiar el lapicero por
el indicador de registro actual. Al guardar el registro, se activar el evento
AfterUpdate, que a su vez ejecutar nuestro procedimiento de evento y mostrar el mensaje.

5. Pulse Aceptar.

6. Pulse el campo Nombre e intente escribir algo.


Ya no podr hacerlo, porque el procedimiento del evento AfterUpdate ha devuelto a la propiedad AllowEdits el valor False. Todo funciona como lo planeamos!

7. Cierre el formulario Contactos.

Cierre la aplicacin y salga de Microsoft Access

1. En el formulario Panel de control principal, pulse Salir de esta base de


datos.

2. En el men Archivo, pulse Salir.


Resumen del captulo
Para

Haga esto

Abrir o crear el
procedimiento de evento
predeterminado de un
control

En Vista Diseo, pulse el control con el botn


derecho del ratn y despus pulse Generar
evento.

Abrir o crear cualquier


procedimiento de evento
para un control

En la hoja de propiedades del control, pulse la


propiedad de evento correspondiente al
evento y despus pulse el botn Generar,

Aadir un acelerador
de teclado para un
botn de orden

En la propiedad Ttulo del botn, coloque un


ampersand (&) delante de la tecla aceleradora.

Utilizar un mtodo de un
objeto en el cdigo

Escriba el nombre del objeto seguido


inmediatamente por un punto (.) y por el
nombre del mtodo.

Establecer una
propiedad en el cdigo

Escriba el nombre de la propiedad seguido de


un signo igual (=) y del valor que desee
asignar a la propiedad.

Aadir un comentario
a un procedimiento
Hacer que Visual Basic
escriba una palabra clave
por nosotros

Escriba un apstrofe seguido del texto del


comentario. Cuando, debajo de la lnea que
est escribiendo, aparezca una lista con
nombres de propiedades, nombres de
mtodos o valores pulse dos veces n el
elemento que desee insertar. Tambin puede
teclear el nmero suficiente de letras para
hacer que aparezca el elemento deseado y
pulsar entonces la BARRA ESPACIADORA.

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Edicin de cdigo
en mdulos

editor Visual Basic

Establecimiento de
propiedades de control
y formulario

hoja de propiedades

Asignacin de valores
en Visual Basic

valores de controles

Ahora que ya hemos aprendido a crear y modificar sencillos procedimientos


de evento, estamos preparados para descubrir otras formas de personalizar
formularios mediante Visual Basic. En el siguiente captulo estudiaremos las
diversas formas de ayudar a los usuarios a localizar y filtrar datos. Comenzaremos con cdigo sencillo como el que hemos visto en este captulo, pero
tambin escribiremos procedimientos ms largos -y al mismo tiempo
aprenderemos nuevos elementos de Visual Basic.

Localizacin y filtrado de
registros en un formulario
Objetivos del capitulo
En este captulo aprender a:
Tiempo estimado:
45 minutos.

Crear un cuadro combinado que nos lleve a un registro especfico en el


formulario.
,
m Filtrar datos para mostrar un subconjunto de registros.
iUtilizar la ventana Inmediato

para ver y modificar propiedades.

m Responder a los eventos de filtrado.


iCrear

un grupo de opciones.

En el siglo xrx, los cientficos descubrieron las leyes de la termodinmica


que gobiernan todos los sistemas fsicos de la naturaleza. La segunda ley,
afirmaron, dice que todo sistema tiende a aumentar su entropa: el desorden
se va apoderando de todo. Le suena familiar? Estos cientficos no pretendan que esta ley se aplicase directamente a nuestra vida diaria, pero el principio parece perdurar en el tiempo. Cuanta ms informacin tenemos, ms
difcil nos resulta encontrar lo que queremos -y se hace ms importante poder localizar rpidamente todos los detalles.
Dnde puse ese nmero de telfono? Estoy seguro de que lo dej por
aqu...>> Cuntas veces habremos anotado una informacin importante y
despus perdido un valioso tiempo intentando localizarla. Aunque esta rutina de prdida y bsqueda se agudiza cuando tratamos con el mundo de

la oficina de <<papel,sigue sin resolverse totalmente cuando colocamos


la informacin en la computadora -podemos seguir perdiendo mucho
tiempo recorriendo archivos y registros hasta que localizamos lo que estamos buscando.
La clave para obtener una base de datos til consiste en ser capaces de localizar rpidamente la informacin que necesitamos. Como desarrolladores de
aplicaciones, necesitamos tener en cuenta qu informacin necesitarn los
usuarios y ayudarles a localizarla con la mayor rapidez posible. En los dos
primeros captulos nos hemos concentrado en la introduccin de datos en la
base de datos; en esta leccin, trabajaremos para poder extraerla.

Inicie la leccin
i Inicie

Microsoft Access y abra la base de datos Cap03 Contactos de la


carpeta de prcticas.

CREACIN DE U N CUADRO COMBINADO PARA LOCALIZAR REGISTROS


Probablemente, la tarea que ms veces realizaremos sobre una base de datos
sea la bsqueda de un registro existente. En la base de datos Contactos, cuando necesitamos algn telfono o direccin, nos interesa pasar rpidamente a
la ficha de la persona buscada. El mtodo estndar utilizado por los usuarios
para localizar un registro es la orden Buscar. Por ejemplo, para localizar un
registro por los apellidos primero pulsamos el campo Apellidos, despus el
botn Buscar y despus escribimos el nombre que andamos buscando, despus de lo cual pulsamos Aceptar. Este mtodo no slo requiere demasiadas
acciones para una tarea tan sencilla, sino que adems asume que conocemos
perfectamente el apellido de la persona a la que buscamos.
Existen mtodos mucho mejores para localizar registros en nuestras aplicaciones. Uno de ellos consiste en crear un cuadro combinado en el formulario, desde el cual podremos seleccionar un nombre de contacto entre una lista de nombres. Este tipo de cuadro combinado requiere la asignacin de una
serie de propiedades, as como la creacin de una macro o de un procedimiento de evento que nos lleve al registro. Afortunadamente, el Asistente
para cuadros combinados puede realizar la mayora de estos pasos por nosotros -slo tendremos que darle algunos toques finales para que funcione
como queremos.

Tipo k ~cuntaciu

Nornbie

&uscarregir4

PpniLdo~

Fanchez Lpez

Errtp~esa

i~erveceriaAlemana

Tratmn~ento

Direcciori

Caigo
Telefono trabalo
Extzlisttn trahap
Teitono mdvil
/,il',iii~li

i j ~IY
~

Crearemos un cuadro combinado en el que los usuarios


puedan seleccionar contactos desde una lista

Abra el formulario Contactos y pase a la vista Diseo


Wsta
Diseo

1. En el formulario Panel de control principal, pulse IntroducirNer contactos.

2. Pulse el botn Vista Diseo en la barra de herramientas.


Cree un cuadro combinado que localice registros

Para crear el cuadro combinado Buscar registro, utilizaremos el Asistente


para cuadros combinados.
Asistentes
para controles

1. En el cuadro de herramientas, asegrese de que est seleccionada la herramienta Asistentes para controles y pulse la herramienta Cuadro combinado.

2. Pulse en la parte superior del formulario, por encima del campo Cargo.
*m

Cuadro
combinado

Se abrir el Asistente para cuadros combinados, preguntando cmo queremos que el cuadro combinado obtenga los valores que mostrar en la lista.

3. Seleccione la tercera opcin, Buscar un registro en el formulario segn el


valor que ha seleccionado en el campo combinado, y pulse Siguiente.
El asistente le preguntar qu campos desea incluir en el cuadro combinado.

4. Pulse dos veces el campo Apellidos para aadirlo a la lista Campos seleccionados.

qu camqpix contienen los valores que desea inrlun en rl cuadro


cumbinado?Lor campos selacciunados se convertirn en iolumriar eri ei

Campos selecctonador:

Aada el campo
Apellidos a la lista

5. Pulse Siguiente.
El asistente mostrar la lista de apellidos.

6. Arrastre el lado derecho del selector de campos de la columna Apellidos


para que tenga aproximadamente una vez y media su tamao actual y
pulse Siguiente.
El asistente le preguntar qu etiqueta desea colocar en el cuadro combinado.

7. Escriba &Buscar registro: y pulse Finalizar.


El asistente crear el cuadro combinado y lo colocar en el formulario.
Fuera de nuestra vista, habr establecido las propiedades y habr aadido un procedimiento de evento de Microsoft Visual Basic para que el
cuadro combinado localice los registros en el formulario.

Modifique la apariencia del cuadro combinado

Antes de probar el cuadro combinado, podemos modificar ligeramente su


apariencia. Para empezar, puede que la etiqueta no sea suficientemente grande como para albergar el texto. Adems, debido a que se trata de un control
especial en el formulario -es una herramienta til, pero los usuarios no tienen que introducir informacin en ella- ser preferible darle un aspecto diferente.

1. Pulse la etiqueta a la izquierda del control y despus pulse el botn Negrita de la barra de herramientas.
Negrita

2. Desplace el puntero del ratn hacia el borde derecho de la etiqueta hasta


que aparezca el cursor de tamao y pulse dos veces.
La etiqueta adoptar el tamao correcto para el texto.

3. Pulse el cuadro combinado y arrastre su borde derecho hasta igualar su


tamao con el de los controles que tiene debajo.
Color de fondo
o de relleno

4. En la barra de herramientas, pulse la flecha junto al botn Color de


fondo o de relleno y seleccione el color gris claro.
Pruebe el cuadro combinado

El cuadro combinado Buscar registro ya est listo para su uso.

1. Pulse el botn Vista Formulario en la barra de herramientas.


2. Pulse la flecha junto al cuadro combinado Buscar registro.
Vista
Formulario

Access mostrar la lista de apellidos de los contactos.

3. Pulse sobre Rodrguez Aza.


Access pasar al registro de Mara Rodrguez Aza en el formulario Contactos.

Modifique la lista del cuadro combinado

El cuadro combinado Buscar registro ha funcionado como esperbamos, pero


la lista que muestra no est del todo bien. En primer lugar, la lista no est ordenada alfabticamente. En segundo lugar, la lista slo incluye los apellidos.
El caso ideal sera que mostrara apellidos coma nombre - c o m o Rodrguez
Aza, Mara- con lo que sera ms sencillo localizar el registro buscado.
7

1. Pulse el botn Vista Diseo en la barra de herramientas.

2. Con el botn derecho del ratn, pulse el cuadro combinado Buscar regisVista
Diseo

tro y despus pulse Propiedades en el men abreviado.


Access mostrar la hoja de propiedades del cuadro combinado.

3. Pulse la pestaa Todas de la hoja de propiedades.


4. Pulse la propiedad Origen de la fila y despus pulse el botn Generar a la
derecha del cuadro de propiedad.

. . . . . . . . .

Pulse el botn Generar para


mostrar el Generador de consultas

...
........

abnzadnr de colunsna

ha de columnas
urna dependente .
r en b t a

........

. . . . . . . . . . - .

Access mostrar la ventana del Generador de consultas. En esta ventana est la


consulta que proporciona valores a la lista desplegable del cuadro combinado.

Modificaremos esta consulta para que muestre los apellidos y el nombre


de los contactos.

5. En la Rejilla de consultas por ejemplo (QBE, del ingls Query By Exarnple) de la parte inferior de la ventana, pulse el cuadro que muestra el campo Apellidos y cambie el texto por la siguiente expresin: Apellidos &
","& Nombre- (asegrese de incluir un espacio despus de la coma entrecomillada).
Esta expresin combina tres valores de cadena con el operador ampersand (&). Cuando queremos colocar ms de una cadena de texto en una
expresin o en cdigo Visual Basic, debemos separarlas con un ampersand. Esta operacin se denomina concatenacin de cadenas. En este
caso la expresin concatena el apellido de cada contacto con su nombre,
separndolos por una coma y un espacio.
Observe que cuando pulsamos fuera de la expresin, Access aade automticamente una etiqueta (Exprl:) a la expresin y encierra entre corchetes los nombres de los campos. Si desea ver la expresin completa,
puede ensanchar la columna arrastrando el borde derecho de su selector
de columna.

6. Pulse el cuadro Orden que est bajo la expresin que acaba de introducir,
pulse la flecha que lo acompaa y seleccione Ascendente.

7. Cierre la ventana Generador de consultas y responda S cuando Access le


pregunte si desea guardar las modificaciones realizadas.

8. Cierre la hoja de propiedades.


Pruebe la nueva lista
r

i*r

r@

al.
4!*.

V~sta
Formulario

El cuadro combinado Buscar registro deber mostrar ahora los nombres


completos en orden alfabtico.

1. Pulse el botn Vista Formulario de la barra de herramientas.

2. Pulse la flecha junto al cuadro combinado Buscar registro.


Con bastante probabilidad, Access mostrar la lista de nombres ordenada, con los apellidos seguidos de los nombres.

3. Pulse Romano Glvez, Arturo (es posible que necesite desplazar la lista).
Aada cdigo para mantener sincronizado el cuadro combinado

Existe una ltima caracterstica del cuadro combinado Buscar registro: aunque
localiza bien los registros, no siempre muestra el nombre del contacto actual.
Si cambiamos de registro con algn otro mtodo que no sea el cuadro combinado, ste perder la sincronizacin -sigue mostrando el ltimo nombre que
se seleccion en l. Esto podra llegar a ser un problema, por lo que ser preferible aadir una lnea de cdigo al mdulo del formulario para resolverlo.

1. Pulse el botdn Registro siguiente en la parte inferior de la ventana formulario.


Como puede observar, mientras el formulario pasa al registro siguiente,
el cuadro combinado Buscar registro no se actualiza para mostrar el nombre actual -sigue mostrando Romano Glvez, Arturo.
Cuando pasamos de un registro a otro,
el cuadro combinado Buscar registro
no permanece sincronizado

Tipo de contacto

Buscar reg~rtro

FIombie

iaroc

.Apellidos

Telnfonn trabajo

Empresa

Evlenrion ttabaiii

Tratamierito

Trlefnm? iriui l

Direcari

Numeio de la*

Cjrijdad

I-~CYIII~

E-tadoiPro tiricia

1 ,r%*illa

Esto ocurre porque este cuadro combinado, a diferencia de los dems


controles del formulario, es un control independiente. Los controles independientes pueden resultar de gran utilidad en una aplicacin, porque
los usuarios pueden cambiarlos sin modificar los datos y la aplicacin
responder correctamente. No obstante, la parte negativa de estos controles es que si queremos que muestren datos, tendremos que escribir el
cdigo necesario para ello.

2. Pulse el botn Vista Diseo de la barra de herramientas.


3. Pulse dos veces sobre el cuadro combinado Buscar registro.
V~sta

La hoja de propiedades muestra las propiedades del cuadro combinado.


Observe que el nombre del cuadro combinado en la barra de ttulo de la
hoja de propiedades -algo as como Cuadro combinado52- es un nombre asignado por omisin cuando el asistente cre el control. Deberemos
saber este nombre para incluirlo en el cdigo que vamos a escribir.

Diseo

4. Pulse el cuadro de seleccin de formulario en la esquina superior izquierda de la ventana Formulario (puede que necesite desplazar o cerrar
el cuadro de herramientas).
La hoja de propiedades muestra las propiedades del formulario.

5. Pulse la pestaa Eventos de la hoja de propiedades.


6. Pulse la propiedad Al activar registro y pulse el botn Generar, a la derecha del cuadro de propiedad.
Eventos
Parnato ) Datos
Al act$+urcglstra . .
Antes dense, tar

1 Otras
,

,f&

.,

Pulse el botn Generar para


mostrar el Generador de cdigo

-..........

""

Dzspul~sde uire,ta,

Untci de 3ctualilar
. .
Uespriis de actual~i,:
. . .
En datos no giiardadus . . .
A1 el,r,,nat . . . .
,
,,.
Antes de rontrmat iaehmiriari~in
. .
Dripuei de coritirmr Im dwi~narmn . .
Al abrir
Al c;ugar.
.....
ir1 crnhior 4 tamao
,,,
Al descargar
l l cerrar . .
A act~var . .
Al desactl,ia . . . . . . . . . . . . .

..

. . . . . . . . . . . . -

. .

;,

I I rrrth,, rl r n f n n

.....

.
.
.-.

--"

e
"
-

7. Seleccione Generar cdigo y pulse Aceptar.


Visual Basic abre el mdulo del formulario para el formulario Contactos
e inserta automticamente el procedimiento de evento Form-Current. El
mdulo se abre en el modo Ver mdulo completo, por lo que aparecen
otros procedimientos antes y despus del procedimiento Form-Current.

~ i r nl n g ~ d ~ i p o c o n f a c t o
AS Long

If I s N u l l ( n e l [ I d T i p o C o n t a ~ C ~ ]Thcn
)
Hc'[IdTipoConcacco].Text = ""

Se ha aadido el
nuevo procedimiento
de evento al mdulo
del formulario

8. Pulse TAB y escriba la siguiente lnea de cdigo Visual Basic para el procedimiento (sustituyendo el nmero del cuadro combinado por el que
aparezca en su propio formulario):
Cuadro-combinado52

Idcontacto 'Actualiza el cuadro combinado


Buscar registro.

Este cdigo asigna al valor del cuadro combinado el valor del control IdContacto. De esta forma, cada vez que nos desplacemos a otro contacto,
el cuadro combinado cambiar junto con el resto del formulario. Al igual
que cuando establecemos una propiedad, todo lo que tenemos que hacer
es escribir el nombre del control seguido de un signo igual y del valor que
queremos asignarle.
Ver
Microsoft
Access

9. Vuelva a Access.

10. Cierre la hoja de propiedades.


11. Pulse el botn Vista Formulario de la barra de herramientas.
12. Pulse la flecha junto al cuadro combinado Buscar registro y pulse Romano Glvez, Arturo.

Vista
Formulario

13. Pulse el botn Siguiente registro en la parte inferior de la ventana del formulario.
Mientras el formulario cambia el registro a Ana Vegas Gmez, se ejecuta el procedimiento de evento Form-Current y el cdigo sincroniza el
cuadro combinado Buscar registro: muestra el valor Vegas Gmez, Ana.
Guarde las modificaciones realizadas al formulario Contactos

Nos ha costado algo de trabajo, pero ahora el formulario Contactos cuenta


con una herramienta muy til para pasar de unos registros a otros. Guardemos ahora los cambios realizados.
i Pulse el botn

Guardar

Guardar de la barra de herramientas.

Access guardar todas las modificaciones realizadas en el formulario y


en su mdulo.

El cuadro combinado que acabamos de crear salta a un registro individual del


conjunto de registros. No obstante, el resto de los registros siguen estando
disponibles -podemos desplazarnos a los dems registros pulsando los botones de navegacin por registros de la parte inferior del formulario. Pero
cuando estamos intentando localizar ciertos contactos, puede que no nos interese que todos los registros estn disponibles. Por ejemplo, suponga que su
empresa se encuentra en Madrid y que desea localizar llamadas a clientes locales. Para recorrer los registros de Madrid excluyendo todos los contactos
de otras ciudades, utilizamos unfiltro.
Podemos imaginar un filtro como un embudo de datos que slo deja pasar
aquellos registros que le especificamos, ocultando el resto. De hecho, el icono de filtro en Access es un embudo -puede verlo en el botn Aplicar filtro
de la barra de herramientas.
Aplicar filtro

Access pone a disposicin de los usuarios tres rdenes de filtrado:

Filtro por seleccin Limita los datos a los registros que tengan el valor seleccionado actualmente. Por ejemplo, si estamos viendo un contacto en Madrid, podemos pulsar el campo Ciudad y despus el botn Filtro por seleccin para que todos los contactos de otras ciudades queden fuera del grupo
seleccionado.
Filtro por formulario Muestra una versin en blanco del formulario actual,
en el que pvdremos seleccionar entre los valores de campos existentes y aplicar el filtro para ver aquellos registros que coincidan con los criterios elegidos. Por ejemplo, podremos pulsar el botn Filtro por formulario, seleccionar Madrid en la lista de valores de Ciudad y pulsar el botn Aplicar filtro
para que slo aparezcan los contactos de Madrid. Mediante el Filtro por formulario podremos especificar criterios para ms de un campo a la vez.
Filtro u orden avanzado Muestra una ventana de consulta en la que podemos arrastrar campos a la rejilla QBE y especificar criterios de ordenacin.
Este tipo de filtro es el ms flexible, pero requiere un conocimiento previo
de la ventana de consulta de Access.
A menos que las desactivemos, estas rdenes de filtro estndar estarn disponibles para los usuarios. Incluso si nuestra aplicacin no hace ninguna
operacin de filtro, los usuarios podrn elegir estas rdenes para examinar
un subconjunto de datos en una tabla o formulario.

Filtre registros en el formulario Contactos utilizando Filtro por formulario

Suponga que desea ver los contactos de la ciudad de Madrid.

1. Pulse el botn Filtro por formulario en la barra de herramientas


Filtro por
formulario

El formulario cambiar para mostrar el modo de ver Filtro por formulario, en el que los usuarios podrn especificar criterios para los registros
que desean ver.

2. Pulse el campo Ciudad y despus pulse la flecha junto al cuadro de texto.


Access mostrar todas las ciudades en las que tiene contactos.

3. Pulse Madrid.
4. Pulse el botn Aplicar filtro.
Aplicar filtro

El formulario slo mostrar los contactos de Madrid. Observe que el texto de la parte inferior de la ventana del formulario indica que el grupo de
registros se encuentra filtrado.

Slo se muestran los contactos de Madrid

Respuesta a eventos de filtrado

A pesar de la gran flexibilidad de la interfaz de filtrado de Access, siempre


se puede mejorar. Si desea controlar o personalizar el filtrado de datos en su
aplicacin, puede escribir procedimientos de evento en Visual Basic que respondan a uno de los dos eventos de filtrado. El primero de ellos es el evento
Filter (Filtro), que se activa siempre que un usuario selecciona las rdenes
Filtro por formulario o Filtro u orden avanzado. Podemos responder al evento Filter para personalizar estas rdenes.

El otro evento de filtrado es el evento ApplyFilter (Aplicar filtro), que se produce cuando el usuario finaliza la especificacin de un filtro y pulsa el botn
Aplicar filtro, o bien cuando pulsa el botn Filtro por seleccin, que aplica
un filtro inmediatamente. Este evento aparece tambin cuando el usuario elimina un filtro -bsicamente, siempre que el conjunto de registros mostrados vaya a cambiar. Podemos responder al evento ApplyFilter para cambiar
el comportamiento de filtrado cuando el usuario selecciona estos botones o
estas rdenes.
Para empezar, proporcionaremos una personalizacin sencilla de la orden
Filtro por formulario, respondiendo al evento Filter con un procedimiento
de evento.
Muestre un mensaje cuando el usuario utilice un filtro

Para los usuarios no iniciados, la interfaz de Filtro por formulario puede parecer confusa -cuando un usuario pulsa este botn, el formulario cambia ligeramente su apariencia y permanece en blanco, lo que puede llegar a confundir a algn usuario. Sera conveniente mostrar un sencillo mensaje,
proporcionando al usuario una breve explicacin sobre lo que deber hacer
a continuacin.

1. Cambie a Visual Basic (pulse el botn Microsoft Visual Basic en la barra


de tareas de Windows).
Visual Basic todava muestra el procedimiento de evento Form-Current.
- Puesto que ya estamos viendo un procedimiento de evento del formulario, la forma ms sencilla de crear el nuevo procedimiento de evento consiste en utilizar el cuadro Procedimiento de la ventana Cdigo, donde se
muestra una lista con los procedimientos y eventos disponibles para un
determinado objeto y que permite pasar de unos procedimientos a otros.

2. En el cuadro Procedimiento, que se encuentra en la parte superior de la


ventana Cdigo, seleccione Filter de entre la lista de eventos.

Cu~dr0-~0r&lnad052 = IdConLai

- Seleccione el evento

Filter del cuadro


Procedimiento

D i m IngIdTipoConracco As Long

If IsNull(~c'[IdTipoConcecrol

nc'[IdTipaConcacco].Text

""

InaIdTipoConcacro = iic8[IdTipocontactol
'[IdTipoConractol
Null

Visual Basic crear el procedimiento Fom-Filter -no ser necesario


volver a la hoja de propiedades. Fuera de nuestra vista, Visual Basic ha
conectado automticamente el procedimiento al evento Filter del control.
Esto lo hace asignando a la propiedad OnFilter (Al filtrar) el valor [Procedimiento de evento] (la propiedad OnFilter es la propiedad de evento
que corresponde al evento Filter).

3. Escriba la siguiente lnea de cdigo Visual Basic en el procedimiento:


' Muestra las instrucciones para el Filtro por formulario.

MsgBox "Seleccione los valores de campos y pulse el botn


Aplicar filtro."

Este cdigo mostrar el mensaje cada vez que el usuario seleccione una
orden de filtrado.

Uso de la instruccin If ...Then para comprobar una condicin


Slo existe un problema con el procedimiento de evento FormFilter: hay
ms de una orden de filtrado que pueda activar el evento Filter. Debido a que
este mensaje es aplicable nicamente si el usuario pulsa el botn Filtro por
formulario, nos interesa comprobar desde el cdigo que efectivamente esta
es la orden que ha seleccionado el usuario. Afortunadamente, resulta sencillo
averiguar qu orden ha elegido el usuario -Access proporciona esta informacin mediante el argumento FilterType del procedimiento de evento.
Compruebe si el usuario ha seleccionado Filtro por formulario

Para llevar a cabo unos pasos de cdigo nicamente si se cumple una condicin, utilizaremos la instruccin If ...Then de Visual Basic. En este caso, la
condicin que queremos comprobar es si el argumento FilterType del procedimiento de evento es igual al valor constante acFilterByForm. Si lo es, entonces mostraremos el mensaje.
Aada lneas de cdigo antes y despus de la lnea existente en el procedimiento, con el fin de que quede como la siguiente (aada tambin un
tabulador delante de cada lnea para sangrarlas apropiadamente):
If FiiterType = acFilterByForm Then
MsgBox "Seleccione los valores de los campos y pulse el botn
Aplicar filtro."

El cdigo que se encuentra entre las instrucciones If...Then y End If slo se ejecutar cuando la condicin sea verdadera +n este caso, cuando el argumento
FilterType sea igual al valor de la constante acFilterByForm. En castellano normal,
podramos leer estas lneas de cdigo de esta forma, Si el tipo de filtro utilizado es
Filtro por formulario, por favor muestra este mensaje; si no es as, por favor no
hagas nada. (En realidad no es necesario pedrselo por favor a la computadora.)

Pruebe el procedimiento de evento


Ahora que ya lo hemos terminado, conviene asegurarse de que el procedimiento funciona correctamente.

1. Cambie a Access.

2. Pulse el botn Filtro por formulario en la barra de herramientas.


Ver
Microsofi
Access

Se activar el evento Filter y ste a su vez activar nuestro procedimiento de evento. Como hemos elegido el filtro por formulario, la condicin
de la instruccin If ...Then se cumplir, lo que har aparecer el mensaje
generado por la instruccin MsgBox.

3. Pulse Aceptar.
Una vez finalizado el procedimiento, el formulario aparecer en modo
Filtro por formulario.
Filtro por
formulario

4. Pulse el botn Cerrar en la barra de herramientas.

. El uso de cdigo condicional como el que acabamos de ver hace que


nuestra aplicacin sea ms inteligente -proporciona lgica a nuestros
procedimientos y es el primer paso de la potencia de programacin de
Visual Basic. Este sencillo uso de la instruccin If ...Then realiza una
nica accin. Pero no es ms que el comienzo de lo que podremos hacer
utilizando instrucciones condicionales en Visual Basic. Muy pronto, utilizaremos la instruccin If ...Then para ejecutar una serie de lneas de
cdigo dependiendo del valor de una condicin.

Comprensin de las propiedades de filtrado


Siempre que el usuario filtra los datos utilizando alguna de las rdenes estndar de filtrado, Access fija el valor de dos propiedades que reflejan el estado del filtro en el formulario: la propiedad Filter y la propiedad FilterOn.
La propiedad Filter describe los criterios para el filtro actual -por ejemplo,
el criterio de contactos de Madrid podra expresarse como:
Ciudad = "Madrid"

La propiedad FilterOn determina si el filtro se est aplicando en este mo. mento. Cuando no hay filtro, la propiedad FilterOn tiene el valor False; cuan-

do el usuario aplica un filtro, pasa a ser True.


En el cdigo de Visual Basic, podemos utilizar las propiedades Filter y
FilterOn para determinar qu tipo de filtro tenemos y si est o no activo.
Ms importante an, podemos modificar estas propiedades para que afecten
al filtro actual de un formulario -cambiando realmente los registros que se
muestran. Esto nos permite proporcionar una interfaz de filtrado que modifique el estado del filtro de forma transparente al usuario. En esta seccin,
veremos cmo funcionan estas propiedades en el formulario Contactos y
proporcionaremos un mtodo personalizado para modificar el filtro del formulario.

Uso de l a ventana lnmediato para ver y asignar propiedades


Access cuenta con bastantes herramientas que nos ayudarn a localizar errores o problemas. La ms bsica de todas es la ventana Inmediato. En captulos posteriores aprenderemos muchas tcnicas para depurar cdigo de Visual
Basic mediante la ventana Inmediato y algunas otras herramientas. Pero tambin hay usos sencillos para la ventana Inmediato -uno de los cuales utilizaremos en esta seccin para aprender ms sobre filtrado de datos.
Normalmente, solemos colocar el cdigo de Visual Basic en un mdulo que
ejecutaremos ms tarde -por ejemplo, como respuesta a un evento. Pero en
la ventana Inmediato, cuando escribimos cdigo Visual Basic, ste se ejecuta directamente: tan pronto como pulsemos la tecla INTRO.

Pruebe la ventana Inmediato


Por muchos motivos, la ventana de depuracin se convierte en un excelente
banco de pruebas. Tambin resulta interesante para determinar el valor actual de una propiedad o una expresin. Si queremos conocer el valor de una
expresin de Visual Basic, podemos hacer que aparezca en la ventana de depuracin sin ms que colocar un signo de interrogacin (?) delante de la expresin.

1. Cambie a Visual Basic.

2. En el men Ver, seleccione Ventana Inmediato.


En la parte inferior de la ventana de Visual Basic aparece la ventana Inmediato, lista para que introduzcamos rdenes de Visual Basic.

Ventana
Inmediato

3. Escriba Beep, pulse INTRO y escuche atentamente.


Su computadora emitir un breve pitido -Beep es una instruccin de Visual Basic, que introducida en la ventana Inmediato, se ejecuta inmediatamente.

4. Escriba ?l+ly pulse INTRO.


Esta instruccin le hace a Visual Basic una pregunta: <<Cules el valor
de 1 +l? Visual Basic mostrar la respuesta directamente debajo de la
instruccin en la ventana Inmediato --es 2. iSeguro que no pensaba que
Access estuviera equipado con una conveniente calculadora!
Use la ventana Inmediato para establecer propiedades de filtrado

Lograr que la computadora emita un pitido (o realice una suma) es una mnima aproximacin a la potencia de la ventana Inmediato. Ahora que ya sabemos lo que es, pongmosla a trabajar. Primero, utilizaremos la ventana Inmediato para averiguar el valor de las propiedades de filtrado del formulario
Contactos. Despus, modificaremos el valor de d!chas propiedades desde la
ventana Inmediato -igual que lo hacemos en nuestros procedimientos de
evento.

1. Escriba ?Forms!Contactos.Filter.
Esta instruccin le pregunta a Visual Basic el valor de la expresin a la
derecha del signo de interrogacin -una expresin que hace referencia
a la propiedad Filter del formulario Contactos Esta expresin es como la
direccin de un individuo, describiendo a Visual Basic exactamente la
propiedad de la que estamos hablando. As funciona la expresin: la palabra clave Forms se refiere a la coleccin de formularios de la base de

datos actual; a continuacin colocamos un signo de admiracin y el nombre de un formulario, como Contactos. Despus, para indicar una propiedad del formulario, colocamos a continuacin un punto y el nombre
de la propiedad.

En resumen, esta instruccin pregunta Cul es el valor de la propiedad


Filter del formulario Contactos?
1

2. Pulse INTRO.
Visual Basic mostrar el valor de la expresin - e l filtro que hemos aplicado anteriormente para ver slo los contactos de Madrid.

'1+1
2

7Fo~ms'C0ntact0~.Fllter
1 (contactos.Cludad="Uadrid") )

Valor de la
propiedad F~lter
del formulario
Contactos

3. Escriba ?Forms!Contactos.FilterOny pulse INTRO.


La ventana mostrar el valor de la propiedad FilterOn del formulario
Contactos. Como ahora est aplicado el filtro en el formulario, el valor
de la propiedad FilterOn es True.

4. Escriba Forms!Contactos.FilterOn = False y pulse INTRO.

( (Contaotos.Ciudad="Madrld") )

?Torms~Concaccos.FilterOn
FormsbContactos.iilterOn = ialsc

Esta instruccin asigna a la propiedad FilterOn del formulario Contactos


el valor False, eliminando de hecho el filtro del formulario -igual que si
el usuario hubiera pulsado el botn Quitar filtro.

5. Cierre la ventana Inmediato (pulse el cuadro de cierre en la derecha de su


Ver
Microsoft
Access

barra de ttulo).
6. Cambie a Access.
Como podr observar, el formulario muestra ahora todos los registros,
hemos eliminado el filtro desde la ventana Inmediato.

1 /

Ciiieccion

Cargo

lt~laeftroCerveceiu

Numero de fax

Todos los contactos


estn disponibles

Mediante la visualizacin y asignacin de las propiedades Filter y FilterOn


desde el cdigo, podemos controlar o cambiar el filtro de cualquier formulario. Ahora que ya hemos visto el funcionamiento de estas propiedades en la
ventana Inmediato, es el momento de utilizarlas para personalizar el formulario Contactos.
1

Creacin de un grupo de opciones para filtrar datos


Supongamos que el filtro que hemos creado -para ver los contactos de Madrid- es muy habitual en nuestra aplicacin. Deberemos facilitar a los usuarios el filtrado de registros, incluso aunque no sepan utilizar la opcin Filtro
por formulario. Una buena forma de hacerlo consiste en aadir un grupo de
opciones al formulario: un grupo de botones desde los que los usuarios puedan seleccionar los registros que quieren ver.
En esta seccin aadiremos un grupo de opciones al formulario Contactos
con dos opciones para ver registros: todos los contactos o slo los de Madrid. Siempre que el usuario pulse una opcin distinta en el grupo, un procedimiento de evento creado por nosotros responder cambiando las propiedades de filtrado y determinando as qu registros aparecern en el
formulario.

Opcioriei de blfio

"

lodos los contactoIConirtor en Madrid

Un grupo de opciones proporciona una


forma sencilla de seleccionar un filtro

Cree el grupo de opciones

Vista
Diseo

l,

Un grupo de opciones consta de varias partes -aunque podemos crearlas todas de una sola vez mediante el uso del Asistente para grupos de opciones.
El asistente nos permitir especificar todas las opciones del grupo y se encargar de los detalles.

1. Pulse el botn Vista Diseo en la barra de herramientas.


2. Si no aparece el cuadro de herramientas, pulse el botn Cuadro de herraCuadro de
herramientas

mientas en la barra de herramientas.

3. En el cuadro de herramientas, pulse la herramienta Grupo de opciones.


4. Desplace un poco la ventana del formulario y pulse sobre el espacio vaco que queda debajo del campo Nmero de fax.

Grupo de
opciones

El Asistente para grupos de opciones se abrir y nos preguntar qu botones de opcin queremos incluir en el grupo de opciones.

Pulse aqupara crear el grupo de opciones

Nota Si no ha instalado todos los asistentes disponibles (no se instalan todos con
la instalacin estndar de Office 2000), al intentar crear el grupo de opciones tal
como se indica aqu, Access proceder a instalar el Asistente para grupos de opciones utilizando el CD de Office 2000 o accediendo a una ubicacin de red.
5. Escriba &Todos los contactos y pulse TAB.
6. Escriba Contactos en &Madrid y pulse Siguiente.
El asistente le preguntar si desea que una de las opciones sea la predeterminada cada vez que se abra el formulario, sugiriendo que lo sea la opcin Todos los contactos.

7. Pulse Siguiente.
El asistente mostrar los valores que tendrn las opciones. La opcin Todos los contactos corresponde al nmero 1 y la opcin Contactos en Madrid al nmero 2.

8. Pulse Siguiente.
El asistente nos preguntar si deseamos guardar el valor en un campo o
utilizarlo ms adelante; es decir, si queremos que el grupo de opciones
sea un control dependiente o independiente. Elegiremos la opcin por
omisin -Guardar el valor para su uso posterior- creando as un control independiente.

9. Pulse Siguiente.
El asistente nos preguntar el tipo de botones que queremos para nuestro
grupo de opciones. Modifquelos si le apetece - e l asistente muestra un
ejemplo de cmo quedarn- o elija el valor por omisin.

10. Pulse Siguiente.

El asistente nos preguntar la etiqueta que queremos asignar al grupo de


opciones.
11. Escriba Opciones de filtro y pulse Finalizar.
El asistente crear el grupo de opciones con sus dos botones y lo colocar en el formulario.

@
Propiedades

Lamentablemente, el asistente no asigna al grupo de opciones un nombre


con demasiado sentido (ser algo as como Marco.56). Para identificar
mejor el grupo de opciones en el cdigo Visual Basic deberemos renombrarlo en la hoja de propiedades.
12. Pulse el botn Propiedades en la barra de herramientas y seleccione la solapa Otras en la hoja de propiedades.
.13. En el cuadro de texto Nombre, escriba OpcionesFiltro.
Aada un procedimiento de evento para que funcione el grupo de opciones

El grupo de opciones que acabamos de crear es un control independiente,


igual que lo era el cuadro combinado Buscar registro que creamos con anterioridad. Para que funcione, deberemos escribir un procedimiento de evento
que establezca las propiedades de filtrado del formulario Contactos. Cada
vez que pulsamos una opcin dentro de un grupo de opciones, se activa su
evento AfterUpdate, para que podamos responder adecuadamente. En el procedimiento de evento, realizaremos una accin diferente dependiendo del
botn de opcin que haya pulsado el usuario.
1. Pulse la solapa Eventos de la hoja de propiedades.
2. Pulse el cuadro de propiedad Despus de actualizar (AfterUpdate) y
pulse el botn Generar que est a la derecha del cuadro de propiedad.
3. Seleccione Generador de cdigo y pulse Aceptar.
Access cambia a Visual Basic y crea el procedimiento de evento
AfterUpdate para el grupo de opciones.

Resume ~ e x t -

rivate Sub OpcionesTiltro-BfterUpdate()

Private Sub Pginal-Click()


Be. GoToPage 1

4. Escriba el siguiente cdigo para el procedimiento (a excepcin de las 1neas Sub y End Sub, que ya estn escritas):
Private Sub OpcionesFiltro-AfterUpdateO
' Aplica o elimina el filtro segn la opcin seleccionada por el

usuario.
If OpcionesFiltro
Me. Filter

Me.FilterOn

2 Then

"Ciudad = 'Madrid'"
=

True ' Aplica el filtro.

Me.FilterOn = False ' Elimina el filtro.


End If
End Sub

Estudiemos este cdigo lnea a lnea.


i Como ya hemos visto, la estructura If ...Then

nos permite realizar una accin solamente si se cumple cierta condicin. Pero antes, hemos aadido
slo una lnea de cdigo entre las instrucciones If ...Then y End If. Este
cdigo utiliza If ...Then de una forma ms potente -si la condicin es
verdadera, Microsoft Access ejecuta todas las lneas sangradas por debajo de la instruccin If ...Then. Esto se denomina un bloque de cdigo,sangrado para mostrar que pertenece a la misma estructura If ...Then ...End If.

La condicin comprueba si el valor del grupo de opciones es 2, el nmero de


la opcin Contactos en Madrid. Si el usuario pulsa la segunda opcin del grupo, la condicin ser verdadera y Visual Basic ejecutar el cdigo del bloque.

i La primera

instruccin de este bloque asigna la propiedad Filter del formulario. La propiedad Filter acepta una cadena, lo que significa que deberemos encerrar su valor entre comillas. Esta asignacin indica que queremos que el formulario slo muestre aquellos registros cuyo campo
Ciudad sea 'Madrid'-para cuyo valor utilizamos comillas simples, ya
que se trata tambin de una cadena.

La segunda instruccin del bloque asigna a la propiedad FilterOn el valor True, lo que hace que se active el filtro. Cuando Visual Basic ejecute
esta instruccin, har que Access recorra todos los registros del formulario, mostrando nicamente aquellos que cumplan los criterios del filtro.

La estructura If ...Then de este procedimiento utiliza una caracterstica


nueva: la palabra clave Else, que nos permite aadir una lnea o un bloque de cdigo para que se ejecute cuando la condicin sea falsa. Podemos expresarlo como si el valor del grupo de opciones es 2, ejecuta este
bloque de cdigo; en caso contrario, ejecuta este otro bloque de cdigo.

El otro bloque en este caso es una nica instruccin que asigna a la propiedad FilterOn el valor False. De esta forma, si el usuario pulsa la opcin Todos los contactos, nuestro procedimiento de evento eliminar el
filtro.

La instruccin End If marca el final del bloque de cdigo Else. Cualquier


lnea despus de sta se ejecutar independientemente de que la condicin sea verdadera o falsa. Toda instruccin If ...Then debe tener su
correspondiente instruccin End If.

Pruebe el grupo de opciones

Ahora es el momento de probar el cdigo pulsando ambos valores en el grupo de opciones.


Ver
Microsofi
Access

1. Cambie a Access.
2. Cierre la hoja de propiedades.
3. Pulse el botn Vista Formulario de la barra de herramientas.
El grupo de opciones mostrar su valor por omisin -la opcin Todos
los contactos- y todos los registros estarn disponibles en el formulario.

Vista
Formulario

4. Pulse el botn de opcin Contactos en Madrid.


Se activar el evento AfterUpdate del grupo de opciones y se ejecutar
nuestro procedimiento de evento. Como la opcin seleccionada es la 2, el
cdigo establecer el filtro para mostrar nicamente los contactos de Madrid y aplicar el filtro.

Extensioti trabalo
Teieiuno muuil
Numero de fox

EsladnRro\ inrla

-1
- 1

-- [

I,dor ln- ~ o r ~ t a c l r ~

El cdigo de nuestro procedimiento de


evento aplicar el filtro para mostrar
nicamente los contactos de Madrid

5. Pulse el botn Todos los contactos en el grupo de opciones.


Esta vez, nuestro procedimiento de evento elimina el filtro.
Aiiada un procedimiento de evento que se active cuando se use un filtro

El grupo de opciones funciona perfectamente, pero sigue habiendo un problema con esta estrategia -no tiene en cuenta el hecho de que siguen estando disponibles las dems herramientas estndar de filtrado de datos. Qu
ocurre si el usuario cambia el filtro por otro sistema? Se actualizar automticamente el grupo de opciones?

A medida que vayamos personalizando nuestras aplicaciones, conviene que


nos anticipemos a conflictos como ste. Echemos un vistazo al problema y
aadamos otro procedimiento de evento para resolverlo.
1. Pulse el campo Ciudad.
Para este contacto, el valor del campo Ciudad es Sevilla.
Filtro por
seleccin

2. Pulse el botn Filtro por seleccin en la barra de herramientas.


El formulario slo mostrar ahora los contactos de Sevilla. No obstante,
el grupo de opciones sigue mostrando Todos los contactos -jalgo va
mal! Para evitar confundir a los usuarios, deberemos actualizar el control grupo de opciones siempre que se filtren datos.
La forma ms sencilla para el grupo de opciones de indicar que el filtro
del usuario est en uso, consiste en no mostrar ninguna opcin seleccio-

nada. Para hacerlo, tendremos que asignar al grupo de opciones el valor


Null (Nulo) cada vez que el usuario aplique un filtro. (Null es un valor especial en Access que significa ningn valor.)
Por otra parte, si el usuario retira el filtro, tendremos que devolver al grupo de opciones su valor 1 (opcin Todos los contactos), ya que quitar el
filtro equivale a pulsar la opcin Todos los contactos.
Vista
Diseo

3. Pulse el botn Vista Diseo en la barra de herramientas.


4. Cambie a Visual Basic.
5. En el cuadro Objeto de la parte superior de la ventana Cdigo, seleccione Form en la lista de objetos.

6. En el cuadro Procedimiento, seleccione el evento ApplyFilter.


1 1

p r i v e t e s u b r o m - ~ p p ! y ~ i ~ t e r ~ c e n c e !AS Inceger. ApplyType AS

E*_?*

-_

- --

~ntegeaj

- --

Prlvate Sub Form-Cuirentll


c ~ ~ d r o - ~ o m b i n e d o s ? Idconteeco 'Actuaiizn e
S*

E !

P r i v a t e sub Form-F~lttr(Cancc1 As Inceger, PllterType As Intcuer)

11

I r ?ilLerTypc = acFllLciBylorm T h e n
H S ~ B O X . e s e ~ c c c ~ o n10s
e valorel dc los campo3 y pulse el bot,
C M II

7. Introduzca el siguiente cdigo para el procedimiento:


Private Sub FormApplyFilter(Cancel As Integer, ApplyType As
Integer)

' Asigna el valor adecuado al grupo de opciones de acuerdo con el


filtro.

If A p p l y T p = acShowAllRecords Then
OpcionesFiltro

1 ' Fija la opcin Todos los contactos.

ElseIf Filter <> "Ciudad = 'Madrid'"Then


OpcionesFiltro = Null ' No fija ningn valor.
End If
End Sub

Esto es lo que hace el cdigo:


instruccin If ...Then comprueba si el argumento ApplyType del
procedimiento de evento es igual al valor constante acShowA11Records. Este valor de ApplyType indica que el usuario ha eliminado el
filtro para mostrar todos los registros.

iLa

iSi la condicin es verdadera -

e l usuario ha eliminado el filtro- la 1nea de cdigo que sigue a la instruccin If ...Then se encarga de asignar el valor 1 al control OpcionesFiltro, seleccionando automticamente el botn Todos los contactos del grupo de opciones.

iSi

la condicin es falsa probablemente ser debido a que el usuario


haya seleccionado una orden de filtrado sin utilizar el grupo de opciones, en cuyo caso haremos que el valor del control del grupo de opciones sea Null. Sin embargo, el evento ApplyFilter puede haber sido
generado al seleccionarse la opcin Contactos en Madrid en el grupo
de opciones, en cuyo caso no queremos cambiar el valor del control.
Para determinar en qu caso nos encontramos, la lnea ElseIf comde la cadeprueba que el valor de la propiedad Filter es distinto (o)
na correspondiente a los contactos en Madrid.

iSupuesto que

se cumple esta segunda condicin -el usuario ha aplicado un filtro para ver un conjunto de registros distinto del conjunto
de contactos de Madrid- la lnea de cdigo que sigue a la instruccin
ElseIf se encarga de asignar el valor Null al control OpcionesFiltro,
dejando el grupo de opciones sin ningn botn seleccionado.

Ver
Microsofi
Access

8. Cambie a Access.
9. Pulse el botn Vista Formulario en la barra de herramientas.

10. Seleccione la opcin Contactos en Madrid.


Vista
Formulario

Quitar
filtro

Filtro por
seleccin

El formulario mostrar nicamente aquellos registros cuya ciudad es Madrid.

11. Pulse el botn Quitar filtro en la barra de herramientas.


Cuando quitamos el filtro, se ejecuta el procedimiento de evento ApplyFilter, devolviendo automticamente el grupo de opciones a la opcin Todos los contactos.

12. Pulse el campo Ciudad y despus pulse el botn Filtro por seleccin en
la barra de herramientas.
El formulario mostrar nicamente los contactos de Sevilla, tal como hemos pedido. Y, lo que es ms, gracias al procedimiento de evento el grupo de opciones aparecer ahora sin ninguna opcin seleccionada, indicando que el usuario ha aplicado su propio filtro.

Como podemos observar, el filtrado es una potente caracterstica -pero


debemos estudiar detenidamente la interaccin entre los distintos filtros.
Afortunadamente, con los eventos Filter y ApplyFilter y las propiedades
Filter y FilterOn, Access nos proporciona todas las herramientas necesarias
para controlar el filtrado de datos en nuestro cdigo Visual Basic.
Cierre la aplicacin y salga de Access
1. Cierre el formulario Contactos, pulsando S cuando Access le pregunte si
desea guardar las modificaciones realizadas.

2. En el formulario Panel de control principal, pulse Salir de esta base de


datos.

3. En el men Archivo, pulse Salir.

Resumen del captulo


Para

Haga esto

Crear un cuadro combinado Seleccione la opcin Buscar un registro en el


formulario... del Asistente para cuadros
que busque registros
combinados.
Concatenar (combinar)
valores de cadena en una
expresin

Separe cada valor de cadena por un signo


ampersand (&).

Establecer el valor de un
control desde el cdigo

Escriba la referencia del control seguida de


un signo igual (=) y escriba despus el valor
que desea asignarle.

Ejecutar un bloque de
cdigo condicionalmente

Encierre el bloque entre instrucciones


If ...Then y End If, especificando una
condicin que pueda ser verdadera o falsa para
determinar si se ejecuta o no el cdigo. Para
incluir un bloque que se ejecute si la condicin
es falsa, aada la instruccin Else.

Ejecutar directamente una


instruccin Visual Basic

Escriba la orden en la ventana Inmediato y


pulse INTRO.

Ver el valor de una


expresin, una propiedad
o un control

En la ventana Inmediato, escriba un signo de


interrogacin (?) seguido de la expresin y
pulse INTRO.

Para

Haga esto

Realizar acciones cuando Escriba un procedimiento de evento para el


un usuario selecciona las evento Filter del formulario.
rdenes Filtro por
formulario o Filtro u orden
avanzado
Realizar acciones cuando Escriba un procedimiento de evento para el
el usuario aplica o quita un evento ApplyFilter del formulario.
filtro de un formulario
Cambiar el filtro
de un formulario

Para obtener informacin


interactiva sobre

Asigne la propiedad Filter del formulario.


Para aplicar o eliminar el filtro, asigne la
propiedad FilterOn.

Pulse el botn Ayuda y pida ayuda sobre

Ayuda

Creacin y uso de
cuadros combinados

cuadros combinados

Bsqueda y filtrado de
registros en un formulario

buscar datos o filtrar datos

Hacer referencia a
formularios y controles
en una expresin

expresiones

Uso de la ventana
Inmediato

ventana Inmediato

En el siguiente captulo exploraremos los eventos comunes que se generan


en un formulario durante la entrada de datos y crearemos procedimientos de
evento para responder a la mayora de estos eventos. Adems, realizaremos
algunas mejoras finales al formulario Contactos y aprenderemos nuevas tcnicas para que nuestra aplicacin pueda interactuar con el usuario.

Respuesta a eventos
de entrada de datos
Objetivos del captulo
En este captulo aprender a:
Tiempo estimado:
40 minutos.

iEstablecer

el valor de un control desde el cdigo.

iResponder a las acciones del usuario

iAsegurarse de que los

a medida que recorre un formulario.

datos introducidos por un usuario son vlidos.

r Realizar una pregunta y efectuar distintas acciones de acuerdo con la respuesta del usuario.

La entrada de datos puede ser lenta y montona, especialmente con un sistema de base de datos pobremente diseado. Pero la entrada de datos tambin
es un arte -cuando se hace bien, puede llegar a sorprendernos lo rpido que
se introduce la informacin. La clave para conseguirlo radica en la anticipacin frente a la informacin que se va a introducir; proporcionando abreviaturas de teclado; y evitando pulsaciones, escritura y desplazamientos innecesarios. Con un formulario de entrada de datos eficiente, tendremos tiempo
para concentrarnos en que la informacin sea correcta, en lugar de simplemente conseguir acabar el trabajo.
Como desarrollador de bases de datos, uno de los primeros aspectos que debe
preocuparle es facilitar la tarea de introducir datos en la base de datos -despus de todo, una base de datos no es mucho ms que los datos que podemos
introducir y extraer de la misma. Nuestro objetivo ser facilitar y agilizar tanto como sea posible el trabajo del personal encargado de la introduccin de

datos. Al mismo tiempo, debemos asegurarnos de que los datos introducidos


por el usuario estn completos y son los correctos. Es un gran reto. En este
captulo aprenderemos a mejorar una entrada de datos anticipndonos a la
forma en que los usuarios introducirn los datos y escribiremos cdigo Microsoft Visual Basic para responder a los eventos.

Inicie la leccin
Inicie Microsoft Access y abra la base de datos Cap04 Contactos de la
carpeta de prcticas.

FUNCIONAMIENTO DE LOS EVENTOS DE FORMULARIO Y CONTROL


Los eventos se suceden continuamente en nuestros formularios y controles.
Cada vez que pulsamos una tecla, utilizamos el ratn o modificamos datos,
se genera un evento. Pulsamos el ratn, jevento! Cambiamos un campo,
jevento! Y cada evento nos proporciona la posibilidad de producir un efecto en nuestra aplicacin mediante el cdigo de un procedimiento de evento.

Abra el formulario Contactos


En el Panel de control principal, pulse IntroducirNer contactos.

Tipo de contacto

blomhre
Apsllth
Empiwa
T ialamirritn
Lirrccinn

Ciudad
Esfadn;Prori~ncia
CMiqu postal
Pair

Burcai registro:

7
Cateo

Teliono trabalo

Eatrnsion trabalo
Teletorio rii&il
tluroeio dt fa*

rJpctorier de fdtro

" I o d o s los coniactoi


''

Contactos en Madiid

Cada vez que pulsamos el ratn, pulsamos una tecla o modificamos


datos, se genera un evento transparente para el usuario

Desde el punto de vista de nuestra aplicacin, los eventos en un formulario


se suceden de forma aleatoria. No tenemos forma de saber por qu, por
ejemplo, el usuario introduce un determinado control, o qu har a continuacin -tenemos que gestionar los eventos segn nos llegan. De alguna
forma, los eventos son como pequeos fuegos que aparecen aqu y all, y
nuestra aplicacin es el cuerpo de bomberos, funcionando para apagarlos.
Igual que ocurre con los bomberos, nuestra aplicacin deber estar preparada para cualquier imprevisto.
El truco para programar los eventos consiste en adivinar a qu eventos deberemos responder y cmo lo haremos. Despus de configurar las respuestas, nuestra aplicacin funcionar automticamente. A continuacin mostramos una lista de las cosas ms habituales que hacen los usuarios en un
formulario de entrada de datos, junto con los eventos a los que podemos responder.

Acciones del usuario

Eventos asociados

Apertura y cierre del formulario

Open, Close, Load, Unload

Paso a y desde el formulario

Activate, Deactivate

Paso de un control a otro

Enter, Exit, GotFocus, LostFocus

Paso de un registro a otro

Current

Pulsacin de teclas

KeyDown, KeyUp, KeyPress

Pulsacin del ratn

Click, DoubleClick, MouseDown,


MouseUp

Modificacin de datos y grabacin


de registros

Dirty, BeforeUpdate, AfterUpdate

Adicin de registros

BeforeInsert, AfterInsert

Eliminacin de registros

Delete, BeforeDelConfirm, AfterDelConfirm

Filtrado de registros

Filter, Appl yFilter

-5

Estos son slo los eventos ms habituales a los que podremos responder con
cdigo -pero hay ms. En este captulo escribiremos cdigo Visual Basic
para responder a algunos de estos eventos.

ACCIONES REALIZADAS MIENTRAS EL USUARIO SE DESPLAZA


POR EL FORMULARIO
Access proporciona algunas pistas para el movimiento del usuario por el formulario: la barra de ttulo cambia de color cuando un formulario est activo,
el punto de insercin parpadeante indica el campo actual y el indicador de registro muestra el registro actual, por citar algunas. Pero a nosotros nos puede interesar personalizar este comportamiento o aadir pistas adicionales
para los usuarios. Para hacerlo deberemos responder a algunos eventos. Por
ejemplo, cuando el usuario pasa a un formulario, se produce el evento Activate. Para cambiar algo relativo al formulario o a la interfaz de Access cuando un formulario pasa a ser la ventana activa, escribiremos un procedimiento de evento para el evento Activate. Para devolver la interfaz a su estado
original cuando el usuario pasa a otro formulario, escribiremos cdigo para
el evento Deactivate que se encargue de producir el efecto inverso.
Tambin podemos responder cuando el usuario se mueve por un formulario.
Como ya vimos en los Captulos 2 y 3, cada vez que el usuario pasa de un registro a otro, se produce el evento Current. Adems, otra serie de eventos
ocurren cada vez que el usuario se desplaza entre los controles de un formulario. Cuando el usuario pasa de un control a otro, se activan los eventos Exit
y LostFocus en el control que el usuario abandona y los eventos Enter y GotFocus en el control al que se desplaza.
Supongamos que queremos cambiar el color de un control cada vez que est
activo en un formulario. Podremos hacerlo creando procedimientos de evento para los eventos Enter y Exit del control.
Nota Los eventos Enter y Exit tienen lugar cuando el usuario entra o sale
de un control, pero no cuando el usuario pasa de una ventana a otra de
Access (estando en el mismo control en cada ventana). Si slo tenemos en
cuenta qu control est activo en el formulario, podremos utilizar Enter y
Exit; si adems queremos ejecutar el mismo cdigo cuando un control tome
el foco de otra ventana, utilizaremos tambin GotFocus y LostFocus.
Modifique el color del fondo de un cuadro combinado

En el Captulo 3 creamos el cuadro combinado Buscar registro y asignamos


a su fondo el color gris claro, para mostrar que no haba que introducir datos.
Pero ahora queremos que este control vuelva a ser blanco siempre que est
activo -despus de todo, parece extrao seleccionar datos de un control
gris, como si estuviera desactivado. Para hacerlo, escribiremos un sencillo
procedimiento para el evento Enter del control.

Modificaremos el color de fondo de


este control para que sea blanco

1. Pulse el botn Vista Diseo.

2. Con el botn derecho del ratn, pulse el cuadro combinado Buscar registro y despus pulse Propiedades en el men abreviado.

Vista Diseo

3. Pulse la solapa Eventos en la hoja de propiedades.


4. Pulse la propiedad Al entrar y despus pulse el botn Generar junto al
cuadro de propiedad.
.

............
. . . . . . [Proied!miento-de ev~ntrs]
. . .
...........
..

Antes de aitiidizar
nespuas de aitualii.3r

R cambiar
.
Al no estar en la lh5t3 .
Al entrar . . . . .

. . . . .

.......

-- .-.

........-.

. . . . . . .

m
-

'.

S
-

"-."-m-""

""

- --

. . . . . . . -- --- -. . .

Pulse el botn Generar

--m
--

. . . .

Al sair
Al recibv el entoque . . . . . . . .
Al perder el enfosqiia
, ,
Al hacer dc . . . . . . . . . . .
QI hacer doble clic
Al balar el mouss
Al mover el mouse . . .
Al subr e! mwss
Al balar v i a tecla
.eI r h r iiria tecla . . . . . . .

"

--

5. Seleccione Generar cdigo y pulse Aceptar.


Access indicar a Visual Basic que abra el mdulo formulario para el
formulario Contactos y crear el procedimiento de evento para el cuadro
combinado.
Recuerde que el nombre del cuadro combinado es en realidad un nombre por omisin -algo as como Cuadro combinado52- que el
Asistente para cuadros combinados asign cuando cre el control. Para
ver el nombre real puede mirar en el nombre del procedimiento de evento (en la instruccin Sub al comienzo de la ventana).

451q7ia el valor adecuado el grupo de opciones de acuerdo con el

Ii ApplyType = B C S ~ O V A I ~ R ~ C OThen
L~S
O p ~ ~ o n e s P ~=l 1~ i ~
' ? i ~ ala opcion ~ o d o sloi conr
ElSeIf Fllter o "Ciudad = 'Hadrid'" Then
OpcioncaFiltzo = Null
' No e i J e ninyun valor.

6. Pulse

TAB y escriba la siguiente lnea de cdigo Visual Basic para el


procedimiento (sustituyendo el nmero 52 por el de su cuadro combinado):

Cuadro~combinado52.BackColor= 16777215 'Pone el fondo blanco.

Este cdigo asigna a la propiedad BackColor el color 16777215, el


cdigo para el color blanco. Al igual que cuando asignamos una propiedad de un formulario, para asignarle un valor a una propiedad de un
control escribimos el nombre de la propiedad seguido por el signo igual
y por el valor que queremos asignarle. No obstante, con una propiedad
de un control debemos permitir a Visual Basic que sepa de qu control
se trata. Para hacerlo, escribimos el nombre del control y un punto antes
del nombre de la propiedad.
Aada un procedimiento para volver a cambiar el color

El cuadro combinado cambiar a color blanco cuando entremos en l -pero


nos interesa que al salir se quede como estaba. Para volver a dejar el color
gris original cuando salgamos del cuadro, escribiremos otro procedimiento
para el evento Exit del control.

1. En el cuadro Procedimiento de la parte superior de la ventana Mdulo,


seleccione Exit en la lista de eventos.

/ 1

P c ~ v a t eSuh CU&O

Ir kpPIYType

c o m x n a d 0 5 2 Enk;&&&

$1

- Seleccione
el evento Exit

ii

= acShorlllRecor
Opcionc'iFilrro
1

E l s e I f Filrer <> "Ciudad

O p c ~ ~ n e s F ~ l t=r Null
o
End Ii

'Madrid'" Then

No f 1 3 6 nlngun valor

Visual Basic crear el procedimiento de evento Exit -y asignar a la


propiedad OnExit (Al salir) del control el valor [Procedimiento de evento] para que el procedimiento se ejecute cuando salgamos del control.

rivere suh Cuadroc&inadoS2-Enter0


C ~ a d r 0 ~ ~ 0 ~ i n e d o 5 2 . B a c k c=
o 11~6r7 7 7 2 1 5

'

Pone el fondo Lil

2. Pulse TAB y escriba el siguiente cdigo Visual Basic para el procedimiento (sustituyendo de nuevo el nmero por el del cuadro combinado):
Cuadro~combinado52.BackColor = 12632256 ' Pone el fondo gris.

Este cdigo devuelve a la propiedad BackColor del cuadro combinado


el cdigo de color gris.
Consejo Quiere utilizar otros colores? Para encontrar el cdigo de otros
colores asigne un color utilizando la paleta en la Vista Diseo y despus mire
en la hoja de propiedades para ver el nmero correspondiente al color seleccionado.

Pruebe los nuevos procedimientos de evento

1. Cambie a Access.
2. Cierre la hoja de propiedades.
Ver
Microsot?
Access

3. Pulse el botn Vista Formulario.


4. Pulse la flecha junto al cuadro combinado Buscar registro.
El evento Enter del cuadro combinado se activar y nuestro cdigo cambiar el color del fondo del control a blanco.

5. Vuelva a pulsar el campo Nombre.

Vista
Formulario

El control vuelve a ser gris!

ACCIONES REALIZADAS MIENTRAS EL USUARIO MODIFICA DATOS

Cada vez que cambiamos el valor de un control, se producen una serie de


eventos. La mayora de ellos tienen que ver con la pulsacin de teclas y el
cambio del foco, pero hay tres eventos que se activan especficamente con
los cambios en los datos: Dirty, BeforeUpdate y AfterUpdate. Dirty ocurre
cuando el usuario intenta por primera vez hacer cambios en los datos del
registro actual; BeforeUpdate tiene lugar cuando el usuario intenta abandonar un control cambiado o guardar un registro modificado; AfterUpdate se
activa cuando el cambio de un control o un registro se completa satisfactoriamente.
En esta seccin responderemos al evento AfterUpdate para realizar una
accin despus de que el usuario cambie un control. Ms adelante en este
captulo responderemos al evento BeforeUpdate para realizar una accin
cuando el usuario intente guardar un registro.

Asignacin ((auto-mgica)) del valor de un control


Cuando introducimos datos, lo mejor es que la base de datos introduzca la
informacin por nosotros siempre que sea posible. Una forma de conseguirlo es asignar la propiedad DefaultValue (Valor predeterminado) a los
campos de nuestras tablas, de forma que cuando aadamos un registro,
Access rellene el valor de los campos automticamente. Pero esta estrategia no funcionar bien si queremos rellenar un campo sobre la marcha
en respuesta a la entrada de datos en otro campo. En este caso, podemos
utilizar un procedimiento de .evento para responder al usuario actualizando un campo y proporcionando cdigo Visual Basic que actualice el otro
campo.

Por ejemplo, el formulario Contactos incluye un campo Tratamiento que


guarda el nombre informal o carioso de un contacto con el fin de utilizarlo en el saludo de una carta. Para alguien llamado Toms, podramos cargar
en ese campo el nombre Tom, para que aparezca en la presentacin de la
carta que le mandemos. El caso es que habitualmente llamaremos a la mayora de contactos por su nombre de pila -de forma que, durante la entrada
de datos, nos gustara que el campo Tratamiento se rellenase automticamente con el valor del campo Nombre. Despus, en los casos que as lo precisen, siempre podremos modificar el campo Tratamiento.

Nos interesa que este


campo se rellene
automticamente

Aada un procedimiento de evento que establezca


el valor del control Tratamiento

El evento que se activa cuando el usuario deja un campo despus de cambiar


su valor es AfterUpdate. Introduciremos cdigo en el procedimiento de evento
de este evento para copiar el valor del campo Nombre en el campo
Tratamiento.

Wsta
Diseo

1. Pulse el botn Vista Diseo.


2. Con el botn derecho del ratn, pulse el control Nombre y luego seleccione Propiedades en el men contextual.
La hoja de propiedades mostrar las propiedades de evento para el control Nombre.

3. Pulse la propiedad Despus de actualizar (AfterUpdate) y pulse el botn


Generar.
Pulse el botn Generar

4. Seleccione Generador de cdigo y pulse Aceptar.


Visual Basic mostrar el procedimiento de evento Nombre-AfterUpdate.

opeion seleccionada por el us

5. Escriba el siguiente cdigo Visual Basic para el procedimiento:


' Copia el valor de Nombre al campo Tratamiento.
Tratamiento = Nombre

Esta lnea de cdigo asigna al control Tratamiento el valor del control


Nombre.
Pruebe el procedimiento de evento
Ver
Microsoft
Access

Vista
Formulario

6;
Nuevo
registro

1. Cambie a Access.
2. Cierre la hoja de propiedades.

3. Pulse el botn Vista Formulario.


4. Pulse el botn Nuevo registro.
5. En el campo Nombre, escriba Juan y pulse TAB.
Cuando abandonemos el campo, se activar el evento AfterUpdate.
Nuestro cdigo se ejecutar y asignar el valor al campo Tratamiento. En
ese momento, podemos continuar introduciendo datos en el registro,
pudiendo saltar el campo Tratamiento o modificarlo manualmente si
fuera necesario. De momento, ahora que ya sabe cmo funciona, vace
el registro sin salvarlo.

6.. Pulse ESC.

Aada cdigo para comprobar si el campo Tratamiento est vaco

Nuestro plan para el campo Estimado tiene un pequeo fallo. Imagine este
caso: introducimos un registro para Toms Blanco Aguado, el nombre se
copia en el campo Tratamiento, pero despus cambiamos el corrtenido de
Tratamiento por Tom. Despus nos damos cuenta de que nos hemos equivocado al escribir el nombre y volvemos al campo Nombre para corregirlo.
Qu ocurre? Nuestro procedimiento de evento vuelve a copiar el contenido del campo Nombre en el campo Tratamiento -operacin que evidentemente no nos interesa. Lo que queremos es que el formulario Contactos se
comporte de forma ms inteligente: nos interesa que se copie el nombre en
el campo Tratamiento nicamente si este campo est vaco.

1. Cambie a Visual Basic.


2. Aada dos lneas de cdigo antes y despus de la existente en el procedimiento, para que quede como sigue (aada tambin una tabulacin
delante de la palabra Tratamiento para sangrar la lnea):
If IsNull(Tratamiento) Then

Tratamiento = Nombre
End If

La funcin IsNull de Visual Basic devuelve True (cierto) si el elemento


entre parntesis es nulo (no contiene ningn valor) y False (falso) si contiene algo -por tanto, en esta lnea, el cdigo que sigue a la palabra
clave Then slo se ejecutar cuando el control Tratamiento est vaco.
Ver
Microsofi
Access

3. Cambie a Access.
4. En el campo Nombre, escriba Tomas y pulse TAB.
Se ejecutar el procedimiento de evento. Como el campo Tratamiento
est vaco, se copiar el nombre en dicho campo, igual que ocurri antes.

5. En el campo Apellidos, escriba Blanco Aguado.


6. Pulse dos veces TAB y escriba Tom en el campo Tratamiento.

7. En el campo Nombre, pulse tras la a, borre esa a y escriba la de


Toms.

8. Pulse TAB.
Se ejecutar el procedimiento de evento. Esta vez, sin embargo, no
copiar el nombre en el campo Tratamiento, porque este campo ya no
est vaco -lo que significa que la expresin IsNull(Tratamiento) es
falsa.

RESPUESTA A LOS EVENTOS DE TECLADO


Una forma de proporcionar atajos a los usuarios de la aplicacin consiste en
poner a su disposicin teclas especiales que realicen acciones especficas.
Las abreviaturas de teclado no son tan visibles como los botones de rdenes
-pero en un formulario no podemos tener un gran nmero de botones. En
esta seccin escribiremos un procedimiento de evento que responda a los
eventos de teclado y que asigne los valores de varios controles del formulario Contactos.
Cada vez que pulsamos una tecla en un formulario se activan tres eventos:
KeyDown, KeyPress y KeyUp. KeyPress se utiliza para responder a caracteres normales -como letras o nmeros- cuando el usuario los pulsa. Los
eventos KeyUp y KeyDown se utilizan para controlar las teclas exactas que
se estn pulsando en el teclado, incluyendo las combinaciones que utilizan
teclas especiales como MAYUS, ALT y CTRL.
Aada un procedimiento para el evento KeyDown
que asigne valores a controles

La mayora de nuestros contactos residen en Madrid, por lo que nos interesa disponer de una forma rpida de introducir valores de Madrid en un registro de contacto. Para hacerlo, crearemos un procedimiento de evento
KeyDown para el campo Ciudad que detecte cundo el usuario pulsa la tecla
CTRL y la tecla del nmero 1 al mismo tiempo.
Vista
Diseo

1. Pulse el botn Vista Diseo.


2. Con el botn derecho del ratn, pulse el campo Ciudad, y seleccione
Propiedades en el men contextual.
La hoja de propiedades mostrar las propiedades de evento del campo
Ciudad.

3. Pulse la propiedad Al bajar una tecla (KeyDown) y pulse el botn Generar.


@*irnato

E~entos

Gatas

otras

...........
spues de oitiializai
......

ToeM

ntei de actualirar

..,

. . . . . . .
,

,,,

rrittsir ei enfoqiie . .
I ~me,de,el enfoque . .
hacer clir
. . . . .
haier doble rlic . . . .
tajar

el mours

,., .,..

. .

. . . . .
. . . . . .

.......
...........

I~OUS
. .* . . . . . . . . . ,

.-..
.-

-"

--.--u-"

.".

"

"

"-

.-

Pulse el botn Generar

4. Seleccione Generador de cdigo y pulse Aceptar.


Visual Basic muestra el procedimiento de evento Ciudad-KeyDown.

5. Escriba el siguiente cdigo Visual Basic en el procedimiento (las instrucciones Sub y End Sub ya estn presentes):

Private Sub Ciudad-KeyDm(KeyCode As Integer, Shift As Integer)


' Si se pulsa CTRt+l se introducen valores de Madrid.

If KeyCode = 49 And Shift = 2 Then ' Se ha pulsado CTRL+l.


Ciudad = "Madrid"
EstadoOProvincia

"Madrid"

Pas = "Espaa"
End If
End Sub

Ver
Microsofi
Access

El cdigo de este procedimiento se ejecuta siempre que se pulsa una


tecla o una combinacin de teclas. Mediante el uso de los argumentos
KeyCode y Shijt, que contienen nmeros que representan la tecla pulsada y el estado de las teclas MAYUS, CTRL y ALT en el momento en que se
puls aquella, el procedimiento determina si la combinacin de teclas
pulsada ha sido precisamente la tecla del nmero i junto con la tecla
CTRL. (El valor de KeyCode para la tecla del nmero i es 49 y el cdigo
2 en Shift indica que se ha pulsado la tecla CTRL.)Si la combinacin de
las tres instrucciones del bloque asignan
teclas pulsada ha sido CTRL+~,
valores relativos a Madrid en tres controles del formulario Contactos.

6. Cambie a Access.
7. Cierre la hoja de propiedades.
Vista
Formulario

Nuevo
registro

8. Pulse el botn Vista Formulario en la barra de herramientas.

9. Pulse el botn Nuevo registro en la barra de herramientas.


10. Pulse el campo Ciudad y despus pulse CTRL+~.
11. Se ejecutar el procedimiento de evento, rellenando los tres campos.
12. Pulse ESC.

Haga que el manejador de teclado funcione en cualquier


parte del formulario

De momento, nuestra abreviatura de teclado slo funciona cuando el foco


est en el campo Ciudad. Si queremos poder usarla estando en cualquier
parte del formulario, tendremos que modificar el cdigo para que responda
al evento KeyDown del formulario, en lugar de hacerlo slo con el control
Ciudad. Adems hay otro paso que debemos conocer. Normalmente, los
eventos de teclado se producen en el control que tiene el foco, no en el formulario. Si queremos que todos los eventos de teclado estn disponibles
para los procedimientos de evento del formulario, podemos establecer la
propiedad Tecla de vista previa (KeyPreview) del formulario.

1. Pulse el botn Vista Diseo.

2. Pulse dos veces sobre el cuadro de seleccin de formulario (el de la esquiVista


Diseo

na superior izquierda de la ventana, en la interseccin de las reglas).


La hoja de propiedades muestra las propiedades del formulario.

3. Asigne a la propiedad Tecla de vista previa el valor S.


Ahora, todos los eventos de teclado, independientemente del control en el
que se produzcan, activarn primero los procedimientos de manejo de teclado del formulario,para ocuparse despus de los del control que tenga el foco.

4. Cierre la hoja de propiedades.

5. Cambie a Visual Basic.


6. En la cabecera del procedimiento Ciudad-KeyDow (la instruccin
Private Sub), seleccione la palabra Ciudad, escriba Form y pulse en
alguna otra lnea de cdigo para registrar el cambio.

-1
71

~ K c y D o m n l K c y C o d eAs Inccgcr, S h i f r As Incegerl


se p u l a s ~ T I < L + I se introducen velore de nadrid

If KeyCode
49 Ind S h i i c
2 Thcn
Ciudad = "Madrid"
EstsdoOProuincia
"Xodrld"

Se ha pulsado C T R L c l .

,*, e

Cambie el nombre de
Ciudad-KeyDown a
Form- KeyDo w n

be4
8.1

sq

dro~co&inoi&52.BackColor

16777215

'

Pone el fondo b l a n c ,

Ahora el mismo cdigo que escribimos para el control responder al


evento KeyDown del formulario, por lo que podr activarse desde cualquier parte del formulario.

Ver
Microsofi
Access

7. Cambie a Access.
8. Pulse el botn Vista Formulario en la barra de herramientas.
9. Pulse el botn Nuevo registro de la barra de herramientas.
10. Pulse CTRL+I.
Se ejecuta el procedimiento de evento, rellenando los tres campos.

Vista
Formulario

11. Pulse ESC.

12. Pulse el botn Guardar en la barra de herramientas.


Access guardar los cambios del formulario.

Nuevo
registro

El formulario Contactos es ahora mucho ms agradable - c o n cdigo para


asignar valores automticamente a controles, va siendo ms fcil de manejar. Pero an no hemos terminado!

Guardar

VALIDACIN

DE DATOS
Cuando introducimos datos podemos cometer errores u omitir informacin
importante. Los errores u omisiones en nuestros datos restan valor y consistencia a las bases de datos. Una de las ventajas de los sistemas de bases de
datos es que pueden verificar los datos que introducimos, impidiendo incluso guardar los datos si no satisfacen una serie de reglas. Este proceso se
denomina validacin, porque implica la comprobacin de los datos para
determinar si son vlidos.
Hay varias formas de comprobar datos con Access y la mayora no implican
programacin alguna. Para un formulario de entrada de datos complejo, utilizaremos normalmente una o varias de las siguientes posibilidades de validacin.

Tipos de datos Es la forma de validacin ms sencilla, siendo utilizada en


todas las bases de datos. Simplemente, Access no permite guardar datos en
un campo si los datos no son apropiados al tipo de datos definido para dicho
campo. Por ejemplo, Access se asegura de que un campo de tipo Fecha
siempre contenga fechas.
Propiedad Mscara de entrada (InputMask) Esta propiedad ayuda a los
usuarios a introducir datos en campos que tienen caracteres de formato, tales
como los espacios, guiones o parntesis de los campos de nmeros de telfono. Access slo permite valores que se ajusten a la mscara. Los campos
de nmeros de telfono y el de cdigo postal de la base de datos Contactos
tienen mscaras de entrada (el Asistente para bases de datos crea mscaras
automticamente).

Propiedad Requerido (Required) Con esta propiedad activada en los


campos de una tabla se puede estar seguro de que esos campos no quedarn
vacos. Si un usuario intenta dejar vaco un campo requerido o guardar un
registro sin haber introducido datos en algn campo requerido, Access le
muestra un mensaje adecuado.
Propiedad Regla de validacin (ValidationRule) Activando esta propiedad para un campo, una tabla o un control de un formulario, podemos asegurar que los datos satisfarn unas reglas establecidas. Cuando el usuario
actualiza un campo o guarda un registro, Access analiza los datos para asegurarse de que satisfacen las expresiones de validacin que se hayan establecido, mostrando un mensaje si no es as. Podemos especificar el mensaje que ha de mostrar Access estableciendo la propiedad Texto de validacin
(ValidationText).
Procedimiento para el evento BeforeUpdate Si deseamos proporcionar
una validacin de campos tan compleja que no se pueda escribir como una
expresin de validacin, escribiremos un procedimiento de evento que verifique los datos. A diferencia de otras formas de validacin en las que Access
muestra un mensaje automticamente, ese procedimiento para el evento
BeforeUpdate deber ser el que muestre un mensaje y cancele la actualizacin.
El formulario Contactos ya utiliza mscaras de entrada. En esta seccin
incluiremos otro tipo de validacin, estableciendo primero propiedades de
la tabla Contactos y creando luego un procedimiento para el evento
BeforeUpdate que compruebe los datos cada vez que un usuario guarde un
registro.
Obligue a que cada registro tenga un nombre completo

Para asegurarnos de que un campo siempre tenga valor, utilizaremos la propiedad Requerido de la tabla.

1. Cierre el formulario Contactos.


Tiene que cerrar el formulario Contactos porque no se puede modificar
el diseo de una tabla cuando un formulario que la usa est abierto.
Ventana Base
de datos

2. Pulse el botn Ventana Base de datos en la barra de herramientas.


3. En la ventana Base de datos pulse el acceso directo Tablas, seleccione la
tabla Contactos y pulse el botn Diseo.
Access abrir la tabla en vista Diseo.

4. Pulse el campo Nombre-.

Establezca para la
propiedad Requerido
-------A
el valor Si

5. En la parte inferior de la ventana, asigne a la propiedad Requerido el


valor S.

6. Pulse el campo Apellidos y asigne a su propiedad Requerido el valor S.


Ahora Access no permitir a los usuarios guardar contactos sin haber
introducido tanto el nombre como los apellidos.
Haga que todos los registros tengan que incluir un nmero de telfono

A menudo imprimimos listas de telfonos, por lo que debemos asegurarnos


de que los usuarios incluyan en todos los contactos el nmero de telfono
del trabajo o el de un telfono mvil. Si quisiramos requerir la presencia de
los dos nmeros, activaramos la propiedad Requerido tal como hicimos
antes. Pero como no todo el mundo tiene ambos telfonos, necesitaremos
utilizar una estrategia diferente. Para proporcionar una regla de validacin
que implique a ms de un campo de la tabla, utilizaremos la propiedad Regla
de validacin de la tabla.

d
M$
Propiedades

1. Pulse el botn Propiedades de la barra de herramientas.


2. En la hoja de propiedades, pulse la propiedad Regla de validacin y
escriba ([TelfTrabajo] & [TelfMvil]) Es Negado Nulo.
Esta expresin de validacin combina ambos campos de telfono y
luego comprueba que el valor resultante no sea nulo (vaco). Podemos
pensar en la expresin como si dijera Contiene la combinacin de los
campos TeljTrabajo y TelJnvil algn texto?
Si ambos campos estn vacos, entonces la expresin completa ser falsa, lo
que indica a Access que el registro no es vlido. Fjese en que hay que poner
corchetes encerrando cada nombre de campo que se utiliza en la expresin
de validacin, ya que si no se hace la hoja de propiedades los interpretara
como expresiones de cadena, en lugar de como nombres de campo.

3. Pulse la propiedad Texto de validacin y escriba Se debe introducir un


telfono de trabajo o un telfono mvil.

Este es el mensaje que Access mostrar si el registro no es vlido.

4. Cierre la hoja de propiedades.

5. Cierre la tabla Contactos, seleccionando S cuando Access le pregunte si


desea guardar los cambios en la tabla y seleccionando No cuando pregunte si se desea comprobar que los datos existentes satisfacen las nuevas reglas.

6. Minimice la ventana de base de datos.


Pruebe la regla de validacin

En el formulario Panel de control principal, pulse IntroducirNer contactos.

1. Pulse el botn Nuevo registro en la barra de herramientas.


Nuevo
reuistro
-

2. En el campo Nombre, escriba Carlos.


3. Pulse MAYUS+INTRO para guardar el registro.
4. Access mostrar un mensaje indicando que el campo Apellidos no puede
contener un valor nulo, y no permitir que ;e guarde el registro.

1 !j

El campo 'Contactos Apell~dos'nc puede mntener un ralor Null poiqut le propiedad


Rrquired Js este campo er True Escriba un valor en este campo

5. h l s e Aceptar.
6. Pulse en el campo Apellidos y escriba Garca Lpez.

7. Pulse MAYUS+INTRO para guardar el registro.


Esta vez, Access mostrar nuestro mensaje de validacin de telfonos, y
seguir sin permitirnos guardar el registro.

!\

5a debe ir,ttudurir un ielfmo de hobain n uii relefoi~om

8. Pulse Aceptar.
9. Pulse el campo Telfono trabajo y escriba 938 55 55 44 (debido a la mscara de entrada no tendremos que escribir los espacios del nmero de
telfono).

10. Pulse MAYUS+INTRO para guardar el registro.


Esta vez s podemos guardar el registro en la tabla Contactos.

Validacin de datos mediante un procedimiento de evento


Hasta ahora, la validacin que hemos incluido no ha requerido la escritura
de cdigo. Pero, qu pasa si queremos establecer un mtodo de validacin
que funcione de forma diferente en situaciones distintas? Podramos querer
recordar a los usuarios que las direcciones siempre deben incluir el cdigo
postal. Activando la propiedad Requerido del campo CdPostal de la tabla
Contactos haramos que todos los registros estn obligados a incluirlo. Pero
esto podra ser demasiado estricto -algunos registros de contacto no contendrn nada sobre sus direcciones, por lo que no necesitan cdigo postal.
Para proporcionar este tipo de validacin personalizada escribiremos un
procedimiento de evento que se ejecute cada vez que se guarde un registro.
El procedimiento comprobar si hay cdigo postal y mostrar un mensaje
cuando sea oportuno.
Nota Cuando el asistente crea una base de datos de contactos, le da al campo CdPostal el formato correspondiente a los cdigos postales espaoles,
que puede ser diferente de los formatos utilizados en otros pases. Por esta
razn, el cdigo que escribiremos en esta seccin slo es aplicable a los cdigos postales que se ajusten a este formato.

Cree un procedimiento de evento que compruebe el cdigo postal

Cuando el usuario intenta guardar un registro en la tabla Contactos, se activa el evento BeforeUpdate. En un procedimiento de evento BeforeUpdate,
el cdigo puede permitir que el registro se guarde o puede cancelar el evento, obligando al usuario a reparar el problema y volver a intentarlo.

1. Pulse el botn Vista Diseo.

2. Con el botn derecho del ratn pulse el cuadro de seleccin del formuEsta
Diseo

lario y elija Propiedades en el men contextual.

3. Pulse la solapa Eventos de la hoja de propiedades.


4. Pulse la propiedad Antes de actualizar (BeforeUpdate) y pulse el botn
Generar.

5. Seleccione Generador de cdigo y pulse Aceptar.


Visual Basic muestra el procedimiento de evento Fo-BeforeUpdate.

are Sub F a r ~ B e i D r e U p d ~ t C ( C i n c eAs


l Intcgcr)

-P r i v e t c Sub ?or~KeyDoun(KtgCodeAs Inccgcr, S h i f t A3 Infeger)


51 30 P U I S CL~T R L + l 3 e inrroduen valores de Iladrid

49 And S h i f r
2 Then
Ciudad = "Wadrid"
E s t a d o O P r ~ v l n ~ l=a '"nadrid"

Ii KeyCode

' Se

,"

Iia pulnado C T R L + l .

Observar que el encabezamiento del procedimiento BeforeUpdate


incluye un argumento Cancel. Utilizaremos este argumento del procedimiento de evento para indicar a Access si ha de permitir o no al usuario
guardar el registro.

6. Introduzca el siguiente cdigo Visual Basic en el procedimiento:


Private Sub Form-BeforeUpdate(Cance1 As Integer)

' Si el usuario ha escrito una direccin, comprueba el cdigo


postal.
If Not IsNull(Direccin) And IsNull(CdPosta1) Then

MsgBox "Debe introducir un cdigo postal.", vbExclamation


CdPostal.SetFocus' Ir al campo Cdigo postal.

Cancel = True

' N o s e guardar e l registro.

End If
End Sub

Exploremos el procedimiento lnea por lnea.


La primera lnea usa una condicin compuesta -Not IsNull(Direccin)And
IsNull(CdPosta1)- para determinar si el registro a guardar es aceptable.
Esta condicin utiliza la funcin IsNull, que devuelve False si el campo
entre parntesis contiene algn valor y True si no contiene nada (o lo que es
lo mismo, contiene el valor Null). Podemos interpretar la instruccin como
Si el campo Direccin no contiene Null (tiene un valor) y el campo
CdPostal contiene Null (no tiene ningn valor), entonces ejecutar las instrucciones del bloque.
Si el usuario introduce una direccin sin cdigo postal, se ejecutan las tres
lneas siguientes:
i

La primera lnea utiliza la instruccin MsgBox para mostrar un mensaje


sencillo al usuario. Ya hemos utilizado esta instruccin antes, pero en
este caso hay un segundo argumento que se utiliza para indicar a Access
el tipo de cuadro de mensaje que debe mostrar. El valor constante
vbExclamation indica a Access que ha de mostrar un cuadro de mensaje con un icono de signo de exclamacin.

i Se debe situar al usuario en el campo

CdPostal para que lo rellene antes


de guardar el registro. Como resulta conveniente, la segunda lnea utiliza el mtodo SetFocus para poner el foco en el campo automticamente, de forma que el usuario slo tenga que escribir el cdigo.

La ltima instruccin asigna el valor True al argumento Cancel para


cancelar el evento BeforeUpdate. Todos los procedimientos de evento
BeforeUpdate -al igual que muchos otros- incluyen el argumento
Cancel. Asignar el valor True a este argumento es como decir haz
como si la accin del usuario que provoc este evento nunca se hubiera producido. En este caso, el usuario est intentando guardar el registro, por lo que al cancelar este evento, el registro no se guardar. En
lugar de ello, el usuario deber introducir un cdigo postal y volver a
intentarlo.

Pruebe el nuevo procedimiento de evento

Ver
Microsoi?
Access

1.
2.
3.
4.

Cambie a Access.
Cierre la hoja de propiedades.
Pulse el botn Vista Formulario de la barra de herramientas.
Pulse el botn Nuevo registro de la barra de herramientas.

5. Rellene los campos tal como se indica a continuacin:


Vista
Formulario

Nuevo
registro

Nombre de campo

Valor

Nombre

Pedro

Apellidos

Gonzlez Calero

Direccin

Buenavista 32

Ciudad

Las Rozas

EstadoProvincia

Madrid

Telfono trabajo

918 99 45 67

6. Pulse MAYUS+INTRO para guardar el registro.


Se activar el evento BeforeUpdate, ejecutando el cdigo de nuestro procedimiento de evento. Al haber rellenado la direccin pero no el cdigo
postal, el cdigo de nuestro procedimiento mostrar el mensaje -junto
con el signo de exclamacin- indicando por qu no puede guardarse el
registro.

7. Pulse Aceptar.
El cdigo de nuestro procedimiento seguir ejecutndose y cancelar
el evento BeforeUpdate. Se vuelve al formulario sin haber guardado el
registro -ahora habr que anular el registro o introducir un cdigo
postal.

8. En el campo Cdigo postal, escriba 28999.


9. Pulse MAYUS+INTRO.

Formulacin de una pregunta al usuario


Nuestro procedimiento funciona bastante bien -si el usuario escribe una
direccin pero no incluye el cdigo postal, no podr guardar el registro. Sin
embargo, esto todava es demasiado restrictivo. Para aumentar la flexibilidad, sera suficiente con advertir al usuario de la ausencia de cdigo postal
y dejar que. l decida si desea o no guardar el registro.
Para hacer eso aprenderemos una tcnica muy importante: el uso de la funcin MsgBox para obtener una respuesta del usuario y tomar decisiones de
acuerdo con dicha respuesta.
Permita al usuario dejar en blanco el cdigo postal

1. Cambie a Visual Basic.


2. Edite el cdigo del procedimiento BeforeUpdate para que quede de esta
forma:
Private Sub Fom-BeforeUpdate(Cance1 As Integer)
' Si el usuario ha escrito una direccin, comprueba el cdigo

postal.
Dim strMensaje As String
Dim intopciones As Integer
Dim bytEleccion As Byte
If Not IsNull(Direccin) And IsNull(CdPostal) Then
strMensaje = "No se ha introducido el cdigo postal.
Guardar?"
intopciones

vbQuestion + vbOKCance1

bytEleccion

MsgBox(strMensaje, intopciones)

If bytEleccion = vbCancel Then


CdPostal.SetFocus
Cancel = True
End If
End If
End Sub

' Vuelve al campo CdPostal.

' No se guardar el registro.

El procedimiento utiliza ahora varias tcnicas nuevas de Visual Basic:


i

Las tres primeras lneas utilizan instrucciones Dim para indicar a


Visual Basic las tres variables que se van a usar en el procedimiento.
Una variable es una ubicacin temporal en la que guardar informacin
en la memoria de la computadora -similar a la funcin memoria de
una calculadora. Cada una de las instrucciones Dim incluye el nombre de una variable, junto con el tipo de datos que mantendr. En el
resto del procedimiento el cdigo podr asignar valores a las variables, recuperando despus los valores en cualquier punto posterior del
procedimiento.
Observar que el nombre de cada variable incluye un prefijo que indica
el tipo de datos que contendr: str para datos de cadena, int para
enteros y byt para datos de byte. Utilizaremos este convenio para los
nombres de las variables en el resto del libro.

La instruccin If ...Then es la misma que antes, pero el bloque de cdigo


que ejecutar si el usuario introduce una direccin sin cdigo postal es
diferente. La primera lnea del bloque asigna un valor a la variable
strMensaje. Esta variable guardar el mensaje que queremos que se
muestre para avisar al usuario de la ausencia de cdigo postal y pedirle
que conteste a una pregunta. Cuando asignamos un valor a una variable
de cadena, dicho valor debe ir encerrado entre comillas.
siguiente lnea asigna un valor a la variable intopciones. Esta variable guardar un nmero que representa opciones deseadas para la funcin MsgBox. Podemos sumar los valores de varias constantes para
especificar ms de una opcin -en este caso, por ejemplo, hemos especificado que queremos que aparezca el icono del signo de interrogacin
(vbQuestion) y queremos incluir los botones Aceptar y Cancelar
(vbOKCance1).

i La

siguiente lnea utiliza la funcin MsgBox para mostrar la pregunta al


usuario. Cuando utilizamos anteriormente la instruccin MsgBox colocamos los argumentos de la instruccin - e 1 mensaje y las opcionesdespus de la instruccin, separados por una coma. Al utilizar la funcin
hacemos lo mismo, pero como se trata de una funcin, debemos Colocar
los argumentos entre parntesis. Adems, la funcin devuelve un valor
que queremos almacenar en la variable bytEleccion. Para asignar el valor
de la funcin a la variable, colocamos la funcin despus de la variable,
separadas por un signo igual (=). De hecho, la lnea de cdigo podra
leerse como Muestra el mensaje de texto de la variable strMensaje utilizando las opciones de la variable intopciones y coloca el resultado en
la variable bytEleccion. El resultado devuelto por la funcin MsgBox es
un nmero que representa el botn pulsado por el usuario en el cuadro
de mensaje, Aceptar o Cancelar.

i La

lneas siguientes utilizan otra estructura If ...Then para llevar a cabo


una accin, dependiendo de la respuesta del usuario. Si el usuario ha elegido el botn Cancelar, el valor guardado en la variable bytEleccion ser
igual al valor constante vbCancel y se ejecuta el bloque de cdigo.

i Las

i Si

el usuario responde pulsando el botn Cancelar, debemos pasar el


foco al campo CdPostal y cancelar el evento para que el usuario introduzca el cdigo postal. Si el usuario responde con Aceptar, el procedimiento saltar el bloque de cdigo; permitiendo que el registro se guarde sin cdigo postal. Observe que cada estructura If ...Then termina con
su propia instruccin End If, para indicar el final de la estructura.

Consejo Puede que se pregunte cmo saber qu valores constantes debe


utilizar para especificar opciones en la funcin MsgBox y para interpretar la
respuesta. Puede consultar en la ayuda interactiva la funcin MsgBox pulsando sobre la palabra MsgBox en la ventana de cdigo y pulsando despus
la tecla FI.
Vuelva a probar el procedimiento
1. Cambie a Access.

2. Pulse la etiqueta del campo Cdigo postal y luego la tecla


Ver
Microsofi
Access

SUPR

para

borrar el valor.

3. Pulse MAYUS+INTRO para guardar el registro.


Se activar el evento BeforeUpdate, que ejecutar nuestro cdigo. Esta
vez, el cdigo del procedimiento mostrar la pregunta -e incluir los
botones Aceptar y Cancelar para obtener una respuesta.

4. Pulse Cancelar.
El cdigo del procedimiento continuar, cancelando el evento
BeforeUpdate. Pero suponga que se da cuenta de que no tiene el cdigo
postal y desea guardar el registro en cualquier caso.

5. Pulse MAYUS+INTRO.

6. Pulse Aceptar.
Esta vez, nuestra respuesta har que el cdigo que cancela el evento
BeforeUpdate sea ignorado, permitiendo que el registro se guarde como
si no hubiera habido procedimiento.
Como puede observar, la validacin puede ser tan simple o tan compleja como nuestra aplicacin requiera. Este procedimiento podra ampliarse para cubrir otros casos: si tenemos otras reglas para limitar la entrada
de contactos, bastar con que las aadamos en forma de bloques de cdigo al mismo procedimiento de evento BeforeUpdate, que comprobar
todas las reglas antes de permitir que el registro sea guardado.
Cierre el formulario y salga de Access

1. Cierre el formulario Contactos y pulse S cuando Access le pregunte si


desea guardar los cambios.

2. Cierre Access.

Resumen del captulo


Para

Haga esto

Cambiar las propiedades


de un control cuando un
usuario entra y sale
del mismo

Escriba procedimientos de evento para los


eventos Enter (Al entrar) y Exit (Al salir)
del control.

Escriba un procedimiento de evento para el


Llevar a cabo acciones
despus de que un usuario evento AfterUpdale (Despus de actualizar)
cambie el valor
del control.
de un control
Llevar a cabo acciones
cuando el usuario pulse una
tecla o una combinacin de
teclas en un formulario

Escriba un procedimiento de evento para el


evento KeyDown (Al bajar una tecla) del
formulario y asigne el valor S a la propiedad
Tecla de vista previa del forriiulario.

Validar datos desde el


cdigo antes de aceptar el
valor de un control o
guardar un registro

Escriba un procedimiento de evento


BeforeUpdate (Antes de actualizar) para el
control o el formulario. Para cancelar la
actualizacin, asigne el valor True al
argumento Cancel.

Para

Haga esto

Formular una pregunta


al usuario

Utilice la funcin MsgBox, junto con


constantes que definan sus opciones. Guarde
el valor de la opcin del usuario en una
variable.

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y pida ayuda sobre

Ayuda

Declaracin y uso
de variables

variables y tipos de datos de Visual Basic

Creacin y uso de
cuadros combinados

cuadros combinados

Referencia a campos,
controles y propiedades
en el cdigo Visual Basic

expresiones
5

En este captulo hemos explorado bastantes eventos y de paso hemos aprendido ms sobre Visual Basic. Hemos utilizado distintas tcnicas de programacin de Visual Basic, pero an tenemos que aprender bastantes ms. En
la siguiente parte de este libro -Captulos 5 a 7- profundizaremos ms en
el lenguaje de programacin de Visual Basic y en las herramientas que
podemos utilizar para obtener el mximo rendimiento del mismo.

PARTE II
Programacin
en Visual Basic

Escriba sus propias


tunciones
Objetivos del captulo
En este captulo aprender a:
Tiempo estimado:
40 minutos.

iCrear un
iEscribir

mdulo estndar.

procedimientos generales Sub y Function.

iProporcionar

informacin a un procedimiento por medio de argumentos.

iUtilizar' procedimientos

generales en el cdigo y las expresiones de un

formulario.

Observar a un nio cuando est aprendiendo a hablar es fascinante. Mucho antes de tener la ms mnima idea de gramtica o de la estructura de las frases,
son capaces de construir frases. Sin tener conocimiento de las reglas del lenguaje, llegan a comunicarse. Como es lgico, antes de poder leer o escribir, necesitamos saber algo acerca del lenguaje -aunque se puede salir adelante con
un lirnitadsimo conocimiento de la gramtica y un vocabulario reducido.
Aunque distan mucho de la lengua nativa de cualquiera, los lenguajes de programacin comparten muchas caractersticas del lenguaje humano. Ambos
tienen un amplio vocabulario y complejas reglas de gramtica a las que ceirse. Pero, como ya hemos visto en los captulos anteriores, podemos llegar
a obtener cosas a travs de Microsoft Visual Basic e incluso crear aplicaciones personalizadas sin necesidad de aprender demasiado sobre el lenguaje de
programacin. Hasta ahora, hemos estado hablando un idioma sin conocer
sus reglas subyacentes.

Podemos ir aprendiendo un idioma antes de estudiar su gramtica, pero nunca seremos capaces de escribir Guerra y paz. Para poder utilizar un idioma
con cierta confianza, debemos saber cmo funciona -sus componentes y reglas bsicas y cmo combinarlos adecuadamente. Ahora que ya hemos probado lo que se puede hacer programando Microsoft Access, es el momento
de descubrir toda su potencia.
En este captulo aprenderemos acerca de los bloques de construccin bsicos
de Visual Basic -mdulos y procedimientos- y cmo unirlos para construir aplicaciones flexibles y bien organizadas. Estudiaremos un nuevo vocabulario y lo probaremos en varios contextos diferentes. Despus, durante
el resto de la Parte 11, continuaremos explorando las reglas de la programacin en Visual Basic y probaremos todas las herramientas que proporciona
Access para mejorar nuestros mdulos.

Inicie la leccin
i Inicie Access y abra la base de datos Cap05 Contactos de la carpeta de

prcticas.

FUNCIONAMIENTO DE LOS MDULOS Y LOS PROCEDIMIENTOS


En la Parte 1, hemos trabajado exclusivamente con procedimientos de evento
sobre formularios existentes. La importancia de los formularios en las aplicaciones de Access convierten a este tipo de procedimientos en los ms utilizados para introducir cdigo. No obstante, existe otro importante tipo de procedimiento que crearemos en este captulo, llamado procedimiento general. Los
procedimientos generales no se ejecutan automticamenteen respuesta a eventos -debemos ejecutarlos nosotros, bien haciendo referencia a los mismos en
una expresin de un formulario o de un informe o bien utilizndolos en cdigo de Visual Basic. Los procedimientos generales se dividen en dos tipos: procedimientos Sub y procedimientos Function. Los procedimientos de evento,
por contra, son todos procedimientos Sub.

Por qu crear procedimientos generales?


Podemos imaginar los procedimientos generales como un soporte en nuestras aplicaciones. Mientras que los procedimientos de evento son la fuerza central de la
programacin en Access, los procedimientos generales son la ayuda constante. Podramos realizar casi cualquier cosa en Access utilizando procedimientos de evento, pero, como veremos ms adelante, el uso de procedimientos generales proporciona soluciones mucho mejores a medida que aumenta la complejidad de nuestras
aplicaciones. Podemos utilizar procedimientos generales de distintas formas.

Realizar operaciones complicadas que no se adaptan a una expresin.


Si ha utilizado expresiones para la asignacin de propiedades en formularios
e informes, sabr que pueden volverse imposibles de manejar. Para evitar
esta complejidad, podemos crear nuestras propias funciones que realicen las
operaciones que necesitemos y llamarlas despus desde las expresiones.
Adems, el cdigo de Visual Basic puede realizar operaciones complejas que
no son posibles utilizando expresiones.
Reutilizar cdigo de programa para repetir una tarea. Nuestros procedimientos de evento realizan a menudo las mismas acciones o acciones similares varias veces. Por ejemplo, habitualmente mostramos mensajes a los
usuarios. Aunque podemos copiar el mismo cdigo en cada procedimiento
de evento que lo utilice, eso no es nada ineficiente. En cambio, podemos
crear un procedimiento general que realice una tarea comn y reutilizarlo
en cada procedimiento que realice dicha tarea.
Dividir las tareas de programacin en unidades ms manejables. Si tuviramos que introducir todo nuestro cdigo en procedimientos de evento,
estos seran muy grandes, complicados y difciles de entender. Al crear procedimientos independientes para cada parte de una tarea grande podemos
simplificar el trabajo y facilitar la legibilidad y comprensin de cada procedimiento por separado.

Mdulos estndar y mdulos de formulario


Los procedimientos generales pueden colocarse en dos sitios: en un mdulo
de informe o de formulario, donde compartirn espacio con cualquier procedimiento de evento que se incluya; o en un mdulo estndar. Los mdulos
estndar son objetos de la base de datos independientes que contienen uno o
ms procedimientos. A menudo contienen funciones de utilidad, llamadas
as porque son tiles en muchas circunstancias distintas. Por ejemplo, un mdulo estndar podra contener varias funciones generales para trabajar con
fechas en Visual Basic -podemos copiar un mdulo como ese en cualquier
aplicacin que utilice fechas.
Si aadimos un procedimiento general a un mdulo de informe o de formulario, pertenecer a dicho informe o formulario. Lo ms probable es que utilicemos ese tipo de procedimiento nicamente en el propio informe o formulario, ya sea en expresiones del formulario o en otros procedimientos del
mismo mdulo. Crearemos este tipo de procedimientos para realizar una tarea que se aplique directamente en el formulario -por ejemplo, para trabajar con la informacin de los campos de dicho formulario.
Los procedimientos generales que estn en mdulos estndar normalmente pertenecen a la aplicacin como un todo. Crearemos este tipo de procedimientos
para realizar una tarea que se pueda aplicar a ms de un formulario o informe
-a menudo, una tarea que se pueda aplicar a cualquier formulario o informe.

CREACIN DE PROCEDIMIENTOS GENERALES


EN UN MDULO ESTNDAR
Una base de datos puede contener uno o ms mdulos estndar, cada uno de
los cuales puede albergar varios procedimientos. Normalmente agruparemos
todos los procedimientos de un propsito especfico e11 el mismo mdulo. En
esta seccin, crearemos un mdulo para mantener dos procedimientos que se
utilizarn para mostrar mensajes al usuario.
Cree un mdulo estndar nuevo
1. En la ventana Base de datos, pulse el acceso directo Mdulos.

Los mdulos estndar son objetos normales de la ventana Base de datos,


igual que las tablas o los formularios.

2. Pulse el botn Nuevo.

Access crear un mdulo estndar nuevo y lo mostrar en Visual Basic. A


partir de aqu, podemos introducir cdigo Visual Basic y generar procedimientos.

Uso de la seccin de declaraciones


Un mdulo nuevo no contiene ningn procedimiento. Sin embargo, como el
resto de los mdulos, tiene una seccin especial llamada seccin de declaraciones. En esta seccin, declararemos las constantes y variables, adems de
introducir cdigo preliminar que se aplicar a todo el mdulo. En un mdulo estndar, el cdigo de la seccin de declaraciones puede aplicarse a todos
los mdulos de la aplicacin.
Como podr ver, Visual Basic ha aadido automticamente la instruccin
Option Compare Database en la seccin de declaraciones de nuestro mdulo. Esta instruccin utiliza la palabra clave Option para establecer una opcin
que afectar a todo el mdulo. Es una de las muchas instrucciones disponibles que comienzan con la palabra clave Option.
La opcin Compare determina el mtodo que utilizar Visual Basic para
comparar cadenas en el mdulo, y sus valores pueden ser Database, Text o
Binary. El uso de la opcin Database le indica a Visual Basic que compare
las cadenas utilizando el mtodo de ordenacin establecido en la base de datos, frente al mtodo tradicional utilizado por Visual Basic que distingue entre letras maysculas y minsculas. Esta opcin tiene sentido utilizarla en la
mayora de aplicaciones de Access, por lo que la dejaremos tal cual.

Establezca una opcin de Visual Basic para el mdulo


Hay otra opcin que se puede querer establecer utilizando la palabra clave
Option: la opcin Explicit. Esta opcin le indica a Visual Basic que compruebe todos los nombres de variables utilizados en el mdulo, para asegurarse de que las hemos declarado. Si no incluimos esta opcin en la seccin
de declaraciones de un mdulo, Visual Basic nos permitir introducir cualquier cosa en el cdigo -aunque al hacerlo el cdigo ser ms propenso a
errores, ya que los errores mecanogrficos no se detectarn mientras que no
se ejecute el cdigo. La presencia de la instruccin Option Explicit en los
mdulos ayudar a evitar muchos quebraderos de cabeza. De hecho, como
es una buena idea, tambin estableceremos una opcin especial para todo Visual Basic de forma que cualquier mdulo que se cree tenga establecida esta
opcin.

1. Pulse la tecla RETROCESO para ir a la lnea anterior del mdulo.


2. Escriba Option Explicit y luego pulse INTRO dos veces.
Hemos establecido la opcin para este mdulo. A continuacin la estableceremos para todos los mdulos que se creen en adelante.

3. En el men Herramientas, seleccione Opciones.

4. En la ficha Editor, pulse el cuadro Requerir declaracin de variables para


seleccionarlo.

5. Pulse Aceptar.
Ahora, cualquier mdulo que se cree incluir la lnea Option Explicit, de
forma que siempre se informar de los nombres del cdigo errneos o no
declarados.

Declaracin de valores constantes


Una de las instrucciones que podemos colocar en la seccin de declaraciones es la instruccin Const, que declara una constante para utilizarla en el cdigo. Una constante es como una variable, excepto en que no podemos cambiar su valor despus de haberla declarado. Ya hemos utilizado constantes
predefinidas, como vblancel, en captulos anteriores. Nuestras propias
constantes funcionarn igual, aunque deberemos decidir el nombre y el valor que les asignaremos. Podemos pensar en una constante como un contenedor en el que hay un valor, facilitando as su referencia en el cdigo.
Declare una constante para el nombre de su aplicacin

Nos puede interesar declarar una constante que guarde el nombre de la aplicacin, para luego utilizarla en los procedimientos del mdulo.

Const conNombreAp1 = Administracin de contactos* y


pulse INTRO.

i Escriba

Esto le indicar a Visual Basic que cada vez que aparezca conNombreApl en el cdigo, deber reemplazarlo por el valor de la cadena. Si desea
cambiar ms adelante el nombre de la aplicacin, slo tendr que hacerlo en un sitio, no por todo el mdulo.
Este es el aspecto que presentar la seccin de declaraciones:

Const conNombreAp1

"Administracin de c o n t a c t o s w

Nota Cuando declaramos una constante en la seccin de declaraciones la


ponemos a disposicin de todo el mdulo. Si piensa utilizar un valor constante en un nico procedimiento, lo ms lgico es que lo declare dentro del
propio procedimiento.

Por otra parte, si piensa utilizar una constante en ms de un mdulo, puede


ponerla a disposicin de toda la base de datos utilizando la instruccin Public Const en lugar de Const. Coloque esa instruccin nicamente en la seccin de declaraciones de un mdulo estndar.

Creacin de un procedimiento Sub


Ya hemos visto cmo crear procedimientos de evento y escribir cdigo
para ellos en Visual Basic. La creacin de procedimientos generales es
muy similar, excepto en que tenemos ms flexibilidad. Mientras que los
atributos de un procedimiento de evento -su nombre, tipo y argumentos- estn predefinidos por Visual Basic, en los procedimientos generales
los elegimos nosotros.

Cree el procedimiento MostrarMensaje

Vamos a crear un procdimiento general que podamos utilizar para mostrar un mensaje al usuario -una &ea muy comn que el procedimiento nos va a facilitar.
Agregar
mdulo

1. Pulse la flecha que aparece junto al botn Agregar mdulo de la barra de


herramientas (que muestra el icono del ltimo botn seleccionado ah) y
a continuacin pulse Procedimiento.
Visual Basic mostrar el cuadro de dilogo Agregar procedimiento, en el que
especificaremos el nombre y el tipo del procedimiento que queremos crear.

2. En el cuadro Nombre, escriba MostrarMensaje.

3. Pulse Aceptar.

Option Compare Database


Option E x p l i ~ i t
de contactos"
Const corJJon$reApl = 11Admin1st~a~16n

Como el tipo de procedimiento por defecto es Sub (Procedimiento), Visual Basic crea un nuevo procedimiento Sub y muestra sus lneas Sub
y End Sub en la ventana Cdigo, justo debajo de la seccin de declaraciones del mdulo.
Aada cdigo al procedimiento

1. Introduzca el siguiente cdigo en el procedimiento:


' Muestra un mensaje importante al usuario.

MsgBox "Esto es importante.", vbExclamation, conNombreAp1

Este cdigo utiliza la instruccin MsgBox para mostrar el mensaje. Especifica una opcin de MsgBox incluyendo la constante vbExclamation
como segundo argumento, de forma que el cuadro de mensaje incluir el
icono del signo de admiracin.Adems, especifica un ttulo para el cuadro
de mensaje incluyendo un tercer argumento - e l valor constante que contiene el nombre de la aplicacin.

2. Pulse el botn Guardar de la barra de herramientas.

3. Escriba Mensajes en el cuadro Nombre del mdulo y pulse Aceptar.


Guardar

Visual Basic guardar el mdulo en la base de datos Contactos.


Pruebe el procedimiento desde la ventana Inmediato

Los procedimientos generales como el procedimiento MostrarMensaje pueden probarse utilizando la ventana Inmediato.

1. En el men Ver seleccione Ventana Inmediato.


La ventana Inmediato se puede anclar en uno de los cuatro lados de la
ventana de Visual Basic o dejarla como una ventana flotante independiente. Para tener ms sitio para la ventana del mdulo, haremos que la
ventana Inmediato flote sobre Visual Basic.

2. Arrastre la barra de ttulo de la ventana Inmediato hasta el centro de la


ventana de Visual Basic y luego ajuste su posicin y su tamao de forma
que pueda ver la mayor cantidad de cdigo psible.
La ventana Inmediato siempre queda por encima del cdigo cuando est
abierta.

3. En la ventana Inmediato, escriba MostrarMensaje.

4. Pulse INTRO.
El procedimiento se ejecutar en Access, mostrando un mensaje en el
centro de la pantalla.

5. Pulse Aceptar.
Ahora que ya ha terminado la ejecucin del procedimiento, Visual Basic
vuelve a aparecer.

Inclusin de argumentos en un procedimiento


Nuestro procedimiento ya funciona bastante bien, pero deja sin hacer algo que
sera recomendable. El mensaje que muestra es siempre el mismo -y el usuario se hartar de verlo si siempre es as. Lo que necesitamos es un procedimiento
flexible que nos permita especificar cul de los distintos mensajes posibles queremos mostrar. Para lograrlo aadiremos un argumento al procedimiento.
Aada un argumento al procedimiento MostrarMensaje

1. En la ventana Cap05 Contactos -Mensajes

(Cdigo), pulse entre los parntesis de la instruccin Sub y luego escriba strMensaje As String.
Public Sub MostrarMensaje(strMensaje As String)

Esto le indica a Visual Basic que queremos poder proporcionar cierta informacin al procedimiento MostrarMensaje, concretamente el mensaje
que queremos mostrar. Tambin le estamos diciendo que la informacin
que proporcionaremos al procedimiento ser una cadena y que se llamar strMensaje.

2. Edite la lnea MsgBox, reemplazando la cadena de mensaje por el argumento -la variable strMensaje que declaramos en la cabecera del procedimiento:
MsgBox strMensaje, vbExclamation, conNombreAp1

Ahora, cuando Visual Basic ejecute la instruccin MsgBox, utilizar el


valor de strMensaje en lugar de utilizar siempre la misma cadena.
Ejecute su procedimiento utilizando un argumento

Cuando ejecutamos un procedimiento y le proporcionamos un argumento, se


dice que pasamos el argumento al procedimiento.

1. Cambie a la ventana Inmediato (pulse sobre su barra de ttulo).

2. Escriba MostrarMensaje Puedo decir lo que quiera* y pulse INTRO.


El procedimiento se ejecutar utilizando el valor de cadena pasado como
argumento para strMensaje.

Fue&

~ P L I /u
I que

3. Pulse Aceptar.
Creacin de una funcin

El procedimiento que hemos creado realiza una accin, pero no proporciona


informacin de vuelta al programa - e s el funcionamiento normal de un procedimiento Sub. Un tipo de procedimiento mucho ms habitual es la funcin.
El uso de un procedimiento de funcin nos permite devolver un valor al procedimiento que ejecuta la funcin. Probablemente ya habr utilizado multitud de funciones propias de Access, como la funcin ZsNull, para obtener informacin sobre cualquier cosa. Ahora crearemos una fyncin propia para
usarla en Access o en el cdigo Visual Basic.

Cree un procedimiento que formule una pregunta

3
i)+

En el Captulo 4 utilizamos la funcin MsgBox para pedir confirmacin antes de guardar un registro. Ahora crearemos una funcin general, llamada
Confirmacin, que realice la misma tarea para cualquier accin que precise
una confirmacin. Esta funcin devolver un valor diferente dependiendo de
la opcin tomada por el usuario en el cuadro de mensaje.

1. Cambie a la ventana Cap05 Contactos - Mensajes (Cdigo).


2. Pulse el botn Agregar procedimiento de la barra de herramientas.

Agregar
procedimiento

3. Escriba Confirmacin en el cuadro Nombre.


4. En el cuadro Tipo, seleccione Funcin y pulse Aceptar.
Visual Basic crea una funcin nueva y muestra sus instrucciones Function y End Function.

Option Compare Database


Option Explicit
Const conNombreAp1 = "A_dnii~istraclnde contactos"

P u b l i ~Sub M o s t r a r M e n ~ a j e ( ~ t r M e n s aA3
~ e String)
' Muestra un mensiile importante al usuario.

Public Function ConfirmacinO


End Function

5. Escriba strMensaje As String entre los parntesis de la instruccin


Function y escriba As Boolean al final:
Public Function Confirmaci6n(strMensaje As String) As Boolean

Estudiemos detenidamente esta declaracin de funcin:


La palabra clave Public que aparece antes de la instruccin Function
indica que esta funcin puede utilizarse desde cualquier parte de la
aplicacin. Si hubiramos utilizado en su lugar la palabra clave Private, slo podramos ejecutar la funcin Confirmacin desde dentro del
mdulo Mensajes.

iLa declaracin del argumento entre parntesis le indica a Visual

Basic
que pasaremos el mensaje al procedimiento, tal como hicimos con el
procedimiento MostrarMensaje.

iLa

clusula As al final de la instruccin Function indica a Visual Basic que queremos que la funcin devuelva un cierto tipo de valor.
Como lo que queremos que devuelva la funcin Confirmacin es True
o False, dependiendo de la seleccin del usuario, utilizaremos el tipo
de datos Boolean para la funcin -las variables de tipo Boolean slo
pueden tomar uno de dos valores, True o False.

6. Escriba el siguiente cdigo en el procedimiento, entre las instrucciones


Function y End Function:
' Pide al usuario que confirme una accin, devolviendo True o False.
Dim bytEleccion As Byte

If bytEleccion = vbOK Then


Confirmacin = True
Else
Confirmacin = False
End If

. Esto es lo que hace el cdigo:


iPrimero,

utiliza la instruccin Dim para declarar la variable bytEleccion, en la que guardar el nmero devuelto por la funcin MsgBox.

iA

continuacin llama a la funcin MsgBox, pasndole el argumento


strMensaje y especificando las opciones mediante las constantes vbQuestion y vbOKCance1, que le indican a Visual Basic que muestre el
mensaje con el icono de ayuda (un signo de interrogacin) y que#ncluya los botones Aceptar y Cancelar.
la funcin utiliza una estructura If ...Then para comprobar
si el usuario ha pulsado o no Aceptar -la condicin de la instruccin
compara la variable bytEleccion con la constante predefinida vbOK.
Si la condicin es verdadera, el valor de retorno de la funcin Confirmacin pasa a ser True; si no, ser False. Para especificar el valor de
retorno de la funcin, todo lo que tendremos que hacer ser escribir el
nombre de la funcin seguido del signo igual y del valor que queremos
que devuelva. Como es lgico, el valor devuelto deber ser consistente con el tipo de datos de la funcin -en este caso Boolean.

iPor ltimo,

Pruebe la funcin Confirmacin

Ahora puede probar la funcin Confirmacin. Para mostrar el valor de una


funcin en la ventana Inmediato, escribimos un signo de iriterrogacin (?)
delante del nombre de la funcin. Adems, recuerde escribir los argumentos
de la funcin entre parntesis.

1. Cambie a la ventana Inmediato.


2. Escriba ?Confirmacin(iEs correcto?) y pulse INTRO.
El procedimiento se ejecutar, utilizando el valor de cadena que hemos
pasado al argumento strMensaje y mostrando el cuadro de mensaje de
acuerdo con las opciones especificadas en la funcin.

3. Pulse Aceptar.
La ventana Inmediato mostrar el valor de retorno de la funcin Conjirrnacin.
Al haber seleccionado
Aceptar, la funcin
Confirmacin
devuelve Verdadero
(True)

4. Pulse once veces la tecla RETROCESO para volver al final de la lnea que
llama a la funcin Confirmacin y pulse INTRO.
5. Pulse Cancelar.
Esta vez la funcin devuelve Falso (False), indicando que no hemos confirmado la accin.

6. Cierre la ventana Inmediato.


7. Pulse el botn Guardar en la barra de herramientas.
Guardar

Hemos creado dos procedimientos generales de utilidad, MostrarMensaje y


Confirmacin, que podremos utilizar en el cdigo de nuestra base de datos.
Adems, podremos copiar el mdulo Mensajes a cualquier otra base de datos quc
creemos, de forma que no tendremos que repetir el trabajo en futuras aplicaciones. Esta es la ventaja de los mdulos estndar -son como una caja de herramientas que podemos utilizar cuando las necesitemos y llevarlas all donde vayamos, incrementando notablemente la productividad de nuestra programacin.

USO DE PROCEDlMlENTOS GENERALES E N U N FORMULARIO


El siguiente paso ser poner a trabajar nuestros nuevos procedimientos. Al
tratarse de procedimientos generales, declarados como pblicos, podremos
utilizarlos en cualquier parte de la aplicacin. En esta seccin, simplificaremos el cdigo del mdulo del formulario Contactos utilizando procedimientos generales donde proceda.
Abra el mdulo del formulario contactos

En la Parte 1 abramos el mdulo del formulario Contactos estableciendo


propiedades de evento en la hoja de propiedades. No obstante, un mtodo
ms sencillo para ver el cdigo Visual Basic es pulsar el botn Cdigo.
Ver
Microso~?
Access

1. Cambie a Access (pulse el botn Ver Microsoft Access).


Access pasa a primer plano.

2. En la ventana Base de datos, pulse el acceso directo Formularios y despus pulse sobre el formulario Contactos.

3. Pulse el botn Cdigo en la barra de herramientas.


Cdigo

Access abre el formulario Contactos en vista Diseo y despus abre su


mdulo en Visual Basic y muestra los procedimientos que contiene el
mdulo. Ah podemos examinar los procedimientos existentes o aa-&r
nuevo cdigo Visual Basic.

P r ~ v a t esub Form-BcToreUpdate(Cincc1 As Inregerl


S
SI el USUUCIO ha e s c r i t o una direccin, compruebe el cdrgo

PO

~ r mscrnensaje As Scrlnq
D l m intopciones *S Integer
Dim byfEltcclon As ByLc

If Not IsNull(Direccinl knd IsNull(CdPosce1) Thcn


3 t r H e ~ a l e= "NO se ha lnrroducido cl c d ~ ~
postal.
o
Guer
intOpcxone3

vbQuestlon

vbOKCancel

~ ~ C E I ~ C C I=O K
D S ~ B O X ( S ~ C I ~ ~InLOpclonea)
~ S ~ ~ E .
If byrElerJclon = vbcancel Then

CdPostsl.sef?ocus
Canccl = True

' Vuelve al campo CdPostal.


' No se guardar& el reg-istra.

El primer procedimiento de evento que se muestra en el mdulo es el


procedimiento Form-BeforeUpdate, al que aadimos cdigo en el Captulo 4. Este procedimiento muestra un mensaje si el usuario no introduce el cdigo postal para una direccin. Si el usuario pulsa Cancelar
en el cuadro de mensaje, se cancela la actualizacin y el registro no se
guarda.
Edite el cdigo para que utilice la funcin Confirmacin

Este procedimiento realiza una accin muy simple, pero usa varias variables
y lneas de cdigo que no tienen que ver con la tarea en s -se encargan de
mostrar un cuadro de mensaje que pregunta algo al usuario. Ahora que tenemos una funcin general que se encarga de esto, podremos simplificar el
procedimiento de evento.

1. Sustituya las tres lneas Dim por una nica instruccin Dim.
Dim blnAceptar As Boolean

Esta lnea de cdigo declara una variable llamada blnAceptar, que guardar la respuesta obtenida de la funcin Confirmacin. La funcin Confirmacin devuelve un valor Boolean (verdadero o falso), por lo que la
variable se declara de tipo Boolean.

2. Sustituya las tres lneas que configuran y muestran el mensaje (despus


de la primera instruccin If ...Then) por la lnea que sigue.
blnAceptar = Confirmacin("No se ha introducido el cdigo postal.
Guardar?")

Esta lnea llama a la funcin Confirmacin,pasndole el mensaje que queremos mostrar y guardando su valor de retorno -verdadero si el usuario
pulsa Aceptar y falso si pulsa Cancelar- en la variable blntlceptar.

3. Sustituya la segunda instruccin If ...Then, que comprueba la respuesta


del usuario, por la siguiente lnea:
If Not blnAceptar Then ' El usuario seleccion Cancelar.

Esta lnea comprueba si el usuario ha pulsado el botn Aceptar o el botn Cancelar. Si el usuario pulsa el botn Aceptar el valor de blnAceptar
ser verdadero, por lo que la condicin Not blnAceptar ser verdadera si
el usuario pulsa Cancelar. Si el usuario pulsa Cancelar, se ejecutar el
bloque de cdigo de la instruccin If ...Then, pasando el foco al campo
CdPostal y cancelando la actualizacin.

La siguiente ilustracin muestra el procedimiento BeforeUpdate ya muy


simplificado:

te Sub For~BeforeUpdate(Cance1is Inreger)

D i m blnlcepcar As Boolcan
If Not IsNull(Direccin1 And IsNull(C6dPoscal) Then
blniceptar = Confirmacin("No se ha rntroducido el c6d
If Not blnlceptar Then ' El usuario seleccion Cancel
CdPostal.SetFoaus
' Vuelve al campo CdPostsl.
Cancel = Tiue
' NO se guardara el regisreo.

Pruebe el procedimiento

-M

1. Cambie a Access.
2. Pulse el botn Vista Formulario en la barra de herramientas.
Ver
Microsofi
Access

Vista
Formulario

3. Pulse la etiqueta del campo Cdigo postal y pulse SUPR para borrar el cdigo.
4. Pulse MAYUS+INTRO para guardar el registro actual.
Se activar el evento BeforeUpdate, que ejecutar nuestra nueva versin
del procedimiento de evento. El procedimiento funcionar igual que antes, mostrando el mensaje que pregunta si se quiere guardar el registro.
No obstante, esta vez es el procedimiento general Confirmacin el que
muestra el mensaje.

5. Pulse Aceptar.

CREACIN DE FUNCIONES GENERALES


Ya hemos creado funciones generales y estamos usando una de ellas en el
formulario Contactos. Ahora, supongamos que nos surgen algunas ideas para
crear funciones que resultaran tiles en el formulario Contactos, pero que
slo son aplicables en el propio formulario. Por ejemplo, podramos escribir
funciones que manipulen valores de texto en el formulario.
No hay por qu colocar estas funciones en mdulos estndar, ya que ningn
otro formulario las utilizar. Adems, desde un mdulo estndar, sera ms
difcil trabajar con los valores del formulario: cada vez que hagamos referencia al mismo, deberemos especificar el nombre del formulario para que
Visual Basic pueda saber a qu controles nos referimos. Lo que haremos ser
colocar este tipo de procedimientos en el mdulo del formulario.
En esta seccin crearemos dos funciones generales diseadas especficamente para el formulario Contactos.

Cree la funcin NombreCompleto

w-

La tabla Contactos tiene campos separados para el nombre y los apellidos,


por un motivo evidente: en una base de datos con un nico campo para el
nombre, resulta muy difcil buscar y ordenar por apellidos. Pero supongamos
que habitualmente hacemos referencia al nombre completo del contacto actual, tanto en expresiones como en el cdigo. Podemos escribir una funcin
general muy simple que devuelva el nombre completo, para poder referirnos
al mismo como una sola unidad.

1. Cambie a Visual Basic (pulse Microsoft Visual Basic en la barra de tareas de Windows).
Hasta ahora, para crear un procedimiento pulsbamos un botn de la barra de herramientas. Pero no necesitamos utilizar una orden para crear un
procedimiento nuevo -tambin podemos hacerlo escribiendo su encabezamiento en la ventana Cdigo.

2. Pulse CTRL+FIN
para ir al final del mdulo.

3. Escriba el siguiente encabezamiento de funcin:


Private Function NombreCompleto() As String

Cuando pulse INTRO,se crear el nuevo procedimiento y Visual Basic


aadir automticamente la instruccin End Function (es posible que tengamos que desplazar la ventana para ver esta lnea). Tal como declara su

encabezamiento, la funcin NombreCompleto devuelve un valor de cadena. Esta funcin es privada para el mdulo del formulario Cont~tctos,
ya que no necesitamos llamar a la funcin desde fuera del formulario.

4. Escriba la siguiente lnea de cdigo para la funcin.


NombreCoinpleto = Nombre & " " & Apellidos

Esta lnea concatena el valor del campo Nombre con un espacio en blanco y con el valor del campo Apellidos, especificando que ese ser el valor devuelto por la funcin.
Utilice la funcin Nombrecompleto en una expresin

El formulario Contactos tiene un campo calculado que muestra el nombre


completo del contacto -al comienzo de la pgina 2 del formulario. La prppiedad Origen del control de este campo tiene el valor de una expresin que
combina los dos campos que componen el nombre. Pero ahora que ya tenemos una funcin para realizar esta tarea, podemos hacer referencia a la funcin como origen del control. Esta es una de las situaciones habituales en las
que incluiremos una funcin privada en un mdulo de formulario -cuando
necesitemos hacer referencia a un clculo en expresiones del formulario.
Ver
Microsofi
Access

1. Cambie a Access.
2. Pulse el botn Pgina 2 en el pie del formulario Contactos.

Nonlbre del iontacto

\LI~ISCanchez Lopai

Tipo de S S sribarto
Correo eli~irntiico

Este campo muestra el nombre


completo del contacto actual
del formulario

Ahora cambiaremos el control para que utilice nuestra funcin.


Vista
Diseo

3. Pulse el botn Vista Diseo de la barra de herramientas.


4. Desplcese un poco hacia abajo en el formulario y pulse el cuadro de texto Nombre de1 contacto.

5. Si la hoja de propiedades no est abierta, pulse el botn Propiedades en


Propiedades

la barra de herramientas.

6. En la hoja de propiedades, pulse la ficha Datos.


La propiedad Origen del control contiene un valor complejo, que podremo; simplificar utilizando la nueva funcin.

Datos
Eventos
Otras j %das
[NornbreJ&';
Ongeri del co-,trol
Mascara de entrada
Vdor prsdeterriiiriado . . . . . . . . . . .
Pegla de validac16n. . . . . . . .
Testo de validaciort
t%ct~,~ado
. . . . . . . . . . . . . . . . . . . . 1.10

Formato

&[~~ellic_l.irl

-- ------

..............

...... " .

-",.

7. Cambie la propiedad Origen del control por =Nombrecompleto().


Este valor le indicar a Access que ejecute la funcii cada vez que actualice este control y que muestre en el control el valor devuelto por la funcin.
Vista
Formulario

#-

8. Cierre la hoja de propiedades.


9. Pulse el botn Vista Formulario en la barra de herramientas.
10. Pulse el botn Pgina 2 en el pie del formulario.
El control Nombre del contacto mostrar el nombre completo, pero esta
vez utiliza nuestra funcin para obtenerlo.
En este caso, podramos haberlo hecho sin utilizar la funcin -despus de
todo, el asistente haba escrito ya la expresin del control. Pero ahora que tenemos una funcin, podemos utilizarla en expresiones o en cdigo por todo
el formulario.
Cree la funcin DireccinCompleta

Puede que nos interese combinar en un solo valor los campos de direccin
de un contacto, para as obtener la direccin que escribiramos en un sobre.
Pero a diferencia de la funcin NombreCompleto, que slo se utiliza dentro
del propio formulario Contactos, nos interesa poder llamar a esta funcin
desde fuera del formulario -para colocar la direccin en otro formulario o
informe, por ejemplo. Para permitir esto, declararemos la funcin utilizando
la palabra clave Public.

1. Cambie a Visual Basic.


2. Pulse debajo de la lnea End Function de la funcin NombreCompleto y
escriba la siguiente expresin (excluyendo la lnea End Function, que
ser introducida automticamente por Visual Basic despus de que escribamos el encabezamiento de la funcin):
Public Function DireccinCompleta() As String
' Devuelve una cadena que contiene el nombre completo y la
direccin.

' Si no hay nombre o direccin devuelve una cadena vaca.


If IsNull(Apellidos) Or IsNull(Direccin) Then
DireccinCompleta = " "
Else
' Se construye la cadena con la direccin.
DireccinCompleta = NombreCompleto & vbNewLine & Direccin & vbNewLine & Ciudad & ", " & EstadoOProvincia & " " & CdPostal
End If
End Function

Estudiemos algunos aspectos de la funcin.


primer lugar, la funcin utiliza una estructura If ...Then para determinar si el formulario contiene valores de Apellidos y Direccin. Si no
es as, devuelve una cadena vaca (e). Si estos valores existen, construye la cadena de direccin concatenando el nombre, la direccin, la
ciudad, la provincia y el cdigo postal del contacto. (Observe que la
direccin se construye con el formato que se suele utilizar en EE.UU.)

iEn

iObservemos

detenidamente la instruccin Else, que construye la cadena de direccin. Debido a la gran longitud del cdigo, lo hemos dividido en cuatro lneas utilizando el carcter de continuacin de lnea
de Visual Basic, el guin bajo (-). Cada vez que queramos continuar
una lnea de cdigo en la lnea siguiente, escribiremos un espacio seguido de este carcter, y despus continuaremos en la lnea siguiente
-Visual Basic interpretar el cdigo como si estuviera en una nica
lnea.

La instruccin Else utiliza la funcin NombreCompleto que creamos


antes para mostrar el nombre y los apellidos. Recordar que en la expresin del control NombreContacto tuvimos que incluir un signo
igual antes de la funcin y despus de la misma colocamos un par de
parntesis; en cdigo, por contra, podemos ejecutar una funcin sin argumentos con slo escribir su nombre.

iEl cdigo

pasa despus a concatenar los campos de la direccin, separndolos con el formato adecuado. Para que la direccin se escriba en
tres lneas sucesivas, se utiliza la constante vbNewLine de Visual Basic, que es una forma abreviada de especificar el carcter retorno de
carro seguido del carcter lnea nueva. Se coloca el valor vbNewLine
despus del nombre y de la direccin, una coma y un espacio despus
de la provincia y un espacio delante del cdigo postal. Esta cadena
completa se asigna como valor de retorno de la funcin DireccinCompleta.

Pruebe la funcin DreccinCompletadesde la ventana Inmediato

Ahora que la funcin est completa, podemos utilizarla en expresiones o en


cdigo del formulario. Por ejemplo, podramos crear un control en el formulario que muestre la direccin completa. Pero como hemos declarado la funcin DireccinCornpleta con la palabra clave Public, debemos poder utilizarla tambin desde fuera del formulario Contactos -por ejemplo, en la
ventana Inmediato.

1. En el men Ver, seleccione Ventana Inmediato.


En la ventana Inmediato todava est el texto introducido anteriormente.

2. Escriba ?Forms!Contactos.DireccinCompleta.
La expresin Forms!Contactos identifica al formulario Contactos. Para
utilizar una funcin pblica de un formulario, escribiremos la referencia
al formulario seguida de un punto (.) y del nombre de la funcin (con sus
argumentos, si los tiene, entre parntesis).

3. Pulse INTRO.
Se ejecutar la funcin DireccinCornpleta, que combinar los campos
adecuados del registro actual del formulario Contactos para mostrar el
valor de retorno en la ventana de depuracin.

Nota Dado que la funcin DireccinCompleta hace referencia a los valores de varios campos del formulario Contactos, ste debe estar abierto en la
vista Formulario siempre que se utilice la funcin. Si el formulario Contactos estuviese abierto en la vista Diseo, el procedimiento producira un error.
Si se produce un error mientras ejecuta la funcin DireccinCornpleta, pase
el formulario Contactos a la vista Formulario, vuelva a la ventana de depuracin e intntelo de nuevo.
Pruebe la funcin NombreCompleto desde la ventana Inmediato

Ya hemos visto que no hay problema en ejecutar una funcin pblica desde
fuera del formulario. Pero qu ocurre con la funcin NombreCompleto que
hemos declarado utilizando la palabra clave Private?
1. Escriba ?Forms!Contactos.NombreCompleto y pulse INTRO.

Aparecer un mensaje de error indicando que se ha producido un error


definido por la aplicacin o el objeto. Hablando claro, lo que viene a decir es que hemos pedido al formulario que haga algo para lo que no tiene
permiso -y ha contestado Lo siento, eso es privado.

2. Pulse Aceptar.
3. Cierre la ventana Inmediato.
Como hemos visto, no podemos hacer referencia a una funcin privada desde fuera de su mdulo. Tenga en cuenta, no obstante, que si una funcin pblica del mdulo utiliza la funcin privada, s se puede ejecutar desde cualquier parte. Este es el caso de la funcin DireccinCompleta, que utiliza la
funcin NombreCompleto en su cdigo -por lo que, aunque NombreCompleto no est directamente accesible en la ventana Inmediato, realmente se
ejecuta por cortesa de la funcin DireccinCompleta, puesto que NombreCompleto est disponible para todas las funciones del mdulo del formulario Contactos.

Distintas formas de declarar variables


Al igual que los procedimientos, las variables tambin pueden ser pblicas o privadas y pueden ubicarse en distintos lugares de la base de
datos. El funcionamiento de las variables depender por completo de
dnde y cmo las declaremos. Hasta ahora, todas las variables que hemos utilizado eran privadas, declaradas utilizando la palabra clave
liz
n dicho

(Continurr)

(Continuacin)
rocedimiento. Cuando finaliza la ejecucin del procedimiento, esas
ariables desaparecen junto con su contenido.
Existen otras formas de declarar variables que conviene tener presentes.

ivel de mdulo Para declarar una variable que se usar por todo
mdulo, se utiliza la instruccin Dim en la seccin de declaracio1mdulo -fuera de cualquier procedimiento.La variable mansu valor entre las llamadas a los procedimientos. Utilice este
ariable cuando varios procedimientos de un mdulo trabajen
licas Para declarar una variable que se usar en toda una aplicase utiliza la instruccin Public en lugar de Dim, colocndola en
seccin de declaraciones de cualquier mdulo. La variable mantendr su valor durante todo el tiempo que est en ejecucin la aplicacin. Se puede declarar una variable pblica en un mdulo de informe o de formulario, pero si se hace se debe incluir el nombre del
objeto cada vez que se referencie la variable fuera del mdulo. Las variables pblicas son tiles para mantener informacin global de la
aplicacin, como por ejemplo los nombres de los usuarios.
Estticas Lo normal es que las variables que se declaran en un procedimiento pierdan su valor al finalizar el procedimiento. No obstante, si queremos que Access mantenga el valor de una variable entre
llamadas del procedimiento, basta cambiar la palabra clave Dim por
la palabra clave Static. Las variables de este tipo resultan tiles en
procedimientos que acumulan un valor en cada llamada.
En posteriores captulos utilizaremos alguna de estas tcnicas. Sin embargo, salvo casos especiales, se debe mantener la costumbre de utilizar nicamente variables privadas a nivel de procedimiento -slo
ocupan espacio en memoria mientras se ejecuta el procedimiento y evitan conflictos con variables homnimas de otr

TANTAS OPCIONES Y TAN POCAS REGLAS


Visual Basic nos proporciona a los programadores una libertad casi total a la
hora de colocar el cdigo - e n mdulos estndar, en mdulos de formulario
o informe y en procedimientos de evento- y de especificar varias opciones,
como que los procedimientos sean pblicos o privados. Cmo decidir dnde colocar el cdigo y cmo declararlo? Estas son algunas directrices que se
pueden seguir:

Dividir los procedimientos por tareas. Pruebe a seguir la regla de un procedimiento por tarea -la aplicacin ser mucho ms fcil de mantener. Si
est escribiendo cdigo para un procedimiento de evento y empieza a ser
complicado, considere escribir una funcin general para cada subtarea.
Generalizar los procedimientos siempre que sea posible. Siempre que
podamos escribir procedimientos aplicables a cualquier formulario o informe, debemos hacerlo -y colocarlos en mdulos estndar. Una forma de generalizar es agregar argumentos al procedimiento para poder proporcionar
los datos especficos a la hora de invocar el procedimiento.
Colocar los procedimientos especficos de un objeto en el mdulo de dicho objeto. Para aquellas tareas o procedimientos que sepamos que slo se
van a utilizar en un formulario o en un informe, nos aseguraremos de colocarlos en el mdulo del formulario o informe que corresponda. Evitaremos
tener procedimientos extraviados y ser ms fcil hacer referencia a los objetos, las propiedades y los controles del formulario.
Usar Private en lugar de Public para evitar conflictos. En un mdulo de
formulario o de informe, declararemos los procedimientos con la palabra clave Private, a menos que tengamos un motivo para llamarlos desde fuera del
formulario. En un mdulo estndar, la mayora de los procedimientos debern declararse como Public, ya que normalmente los llamaremos desde cualquier lugar de la base de datos; no obstante, si slo se utilizan para realizar
subtareas para otros procedimientos del mdulo, nos aseguraremos de declararlos como Private. La declaracin de procedimientos privados siempre
que sea posible utiliza menos memoria y puede ayudar a evitar conflictos.
Cierre las ventanas abiertas y salga de Access
1. Cierre Visual Basic.

2. Cierre el formulario Contactos, pulsando S cuando Access le pregunte si


desea guardar los cambios.

3. Cierre Access.

Resumen del captulo

Para

Haga esto

Crear un mdulo estndar

En la ventana Base de datos,


pulse el acceso directo Mdulos
y luego pulse el botn Nuevo.

Aadir un procedimiento
general a un mdulo

En Visual Basic, pulse el botn


Agregar procedimiento. O bien,
pulse en la ventana Cdigo fuera
de cualquier procedimiento y escriba
una instruccin Sub o Function para
declarar el procedimiento.

Proporcionar informacin
a un procedimiento

Incluya argumentos, junto con sus


tipos de datos, entre los parntesis
de la instruccin Sub o Function
del procedimiento.

Devolver informacin
en una funcin

Incluya el tipo de dato devuelto por


la funcin en la declaracin. En la
funcin, asigne al nombre de la funcin
el valor que quiera devolver.

Botn

Llamar a un procedimiento Asigne el nombre de la funcin a una


variable, colocando los argumentos,
Function y pasarle
si los hay, entre parntesis tras el
argumentos
nombre de la funcin.
Llamar a un procedimiento Escriba el nombre del procedimiento
Sub y pasarle argumentos seguido por los argumentos
(sin parntesis).
Escriba un signo igual seguido del
Utilizar una funcin
general como valor de una nombre de la funcin, incluyendo los
argumentos entre parntesis (o solamente
propiedad
los parntesis si no hay argumentos).
Declarar y utilizar
una constante

Escriba la instruccin Const, seguida


de un nombre, el signo igual y el valor
de la constante. Para utilizar la
constante, basta con incluir su nombre
en lugar de su valor.

Ayuda

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Uso de variables

declaracin y uso de variables

Uso de constantes

declaracin y uso de constantes

Declaracin de
procedimientos Sub
y Function

declaracin de procedimientos

Trabajo con valores


de cadena y otros tipos
de datos

tipos de datos (o algn tipo de datos


especfico, como String o Integer)

Hasta ahora hemos escrito cdigo y hemos visto el resultado de nuestro trabajo, pero en realidad no hemos visto trabajar al cdigo. En el siguiente captulo probaremos herramientas de Visual Basic que nos permitirn ver a
nuestro cdigo en accin -y nos ayudarn a detectar los errores cometidos.
Adems, aprenderemos a manejar los errores y los eventos inesperados que
se produzcan mientras se ejecuta la aplicacin.

Seauimiento v deauracin
del cdigo
Objetivos del captulo
En este captulo aprender a:
Tiempo estimado:
35 minutos.

m Ver la ejecucin de cdigo Visual Basic lnea a lnea.


iVer

los valores de las variables del cdigo.

m Compilar procedimientos para verificar su funcionamiento.


iLocalizar

y corregir errores de programacin utilizando herramientas de


depuracin de Visual Basic.

Con el fin de no desviarse al ir hacia un destino, los navegantes utilizan distintas herramientas que les permiten ubicarse y mantener un rumbo -con un
ojo siempre puesto en las cartas de navegacin. Los posibles obstculos, corrientes o condiciones de viento obligan a variar continuamente el rumbo inicial, por lo q!Je cualquier navegante debe ser capaz de anticiparse a los problemas y actuar en consecuencia. Un cambio de rumbo no significa
necesariamente un error; es slo una parte del trabajo.
Cuando programamos en Microsoft Visual Basic debemos anticiparnos a los
posibles errores que puedan aparecer, tanto en el proceso de programacin
como durante la ejecucin de la aplicacin. Microsoft Access incluye muchas
herramientas que, igual que el comps o la brjula, nos ayudan a saber dnde
est nuestra aplicacin y adonde se dirige. En este captulo aprenderemos a
seguir la ejecucin de nuestro cdigo Visual Basic y a entender lo que realmente est ocurriendo dentro de la computadora en la que se ejecuta. Utiliza-

remos herramientas de Visual Basic para detectar errores y corregirlos, as


como para asegurarnos de que las correcciones realizadas han tenido xito.
Inicie la leccin
i Inicie Access y

abra la base de datos Cap06 Contactos de la carpeta de archivos de prcticas.

SEGUIMIENTO DEL CDIGO LINEA A LINEA


En los captulos anteriores hemos escrito algo de cdigo Visual Basic y hemos visto el resultado de la ejecucin de procedimientos. Pero hasta ahora,
no hemos visto realmente funcionar al cdigo -hemos dado por hecho que
el cdigo se estaba ejecutando entre bastidores. En esta seccin, veremos por
primera vez cmo se ejecuta el cdigo.
Visual Basic proporciona herramientas que nos permiten detener la ejecucin del cdigo y ejecutar las instrucciones una a una. De esta forma podemos ver lo que realmente pasa en el cdigo.
Abra el mdulo Mensajes

Para poder ver cdigo funcionando, necesitamos abrirlo antes e indicar a Visual Basic dnde queremos comenzar a inspeccionar. Primero abriremos el
mdulo Mensajes y nos colocaremos en la funcin Confirmacin que creamos en el Captulo 5. Tambin le indicaremos a Visual Basic que muestre la
barra de herramientas de depuracin, que contiene herramientas para ayudar
en el seguimiento del cdigo.

1. En la ventana Base de datos, pulse el acceso directo Mdulos.


2. Pulse dos veces sobre el mdulo Mensajes.
Access abrir Visual Basic y mostrar el cdigo.

3. Desplace el contenido de la ventana Cdigo hasta que vea la funcin


Confirmacin.

4. En el men Ver, abra Barras de herramientas y seleccione Depuracin.


Visual Basic muestra la barra de herramientas Depuracin, que contiene
botones que ayudan en el seguimiento del cdigo paso a paso.

5. Arrastre la barra de herramientas Depuracin a la parte superior de la


ventana de Visual Basic, fuera de los lmites de la ventana Cdigo.

Colocacin de un punto de interrupcin que detenga la ejecucin del cdigo


Cuando queramos que Visual Basic detenga la ejecucin normal de nuestro
cdigo para poder observarlo, colocaremos un punto de interrupcin en la
lnea de cdigo que queramos verificar. Un punto de interrupcin le indica
a Visual Basic: Cuando llegues a esta lnea -pero antes de ejecutarladetn todo y muestra el cdigo. Ocurre igual que en los tiempos muertos
de los partidos de baloncesto: la accin se detiene para permitirnos reagrupar, estudiar lo que estamos haciendo bien o mal y realizar algunos ajustes.
Despus, cuando finaliza el tiempo muerto, permitimos que nuestro cdigo
contine y que siga el juego.

Coloque un punto de interrupcin al comienzo de un procedimiento


Vamos a colocar un punto de interrupcin justo al principio de la funcin
Confirmacin, en la propia instruccin Function. De esta forma, podremos
echarle un vistazo a la funcin cada vez que se ejecute. Para colocar y quitar
puntos de interrupcin se utiliza el margen gris que hay en el lado izquierdo
de la ventana Cdigo.
i Pulse en el margen

gris a la izquierda de la lnea que contiene el encabezamiento de la funcin Confirmacin (la lnea que empieza por Public
Function Confirmacin).
Pulse en el margen para colocar un punto
de interrupcin en esta lnea

Dim bytElecclon A 3 Bycc


bytEleccion = H s g B o x ( t c ~ n e m a ~ v
e ,b m e s t i o n

+ vbOKCance1,

I f b y c i l e c c l o n = vbOK Thcn

Conflrmacmn

True

Con1irma~10n= I e l S e

End Funcclon

En el margen aparecer un punto rojo, y la lnea de cdigo aparecer en texto blanco sobre fondo rojo. Esto indica que Visual Basic se detendr cuando
llegue a esta lnea de cdigo - e n otras palabras, tan pronto como se intente
ejecutar la funcin Confirmacin.

Consejo Si coloca un punto de interrupcin en una lnea equivocada, pulse


sobre el punto rojo para eliminar el punto de interrupcin y vuelva a pulsar
junto a la lnea correcta.

Ejecute el procedimiento

Intente ahora ejecutar la funcin Confirmacin desde la ventana Inmediato.

1. Pulse el botn Ventana Inmediato.


2. Escriba ?Confirmacin("iNo es maravilloso?") y pulse INTRO.

Ventana
Inmediato

La funcin Confirmacin se ejecuta, pero tan pronto como empiece, Visual Basic encuentra el punto de interrupcin que hemos colocado. Entonces vuelve a la funcin Confirmacin en la ventana Cdigo. Cuando
inspeccionemos la ejecucin del cdigo, veremos cmo Visual Basic
muestra un indicador de instruccin actual: una flecha amarilla en el
margen y la instruccin actual resaltada sobre fondo amarillo.

C Pr+ilir: Iwnccirm C O m t l R l u z n ( ~ t r ~ a jAs


c Striop.)

)
I
. B(IuIm

P z d e el usuaria que confirme una s c c i a n , cievoi.riendo Tzue a

D l r n b y t l l e c c i o n As Byfe
bytEleccion

EsgBox(srrHensaje, v b W c s t l o n

El procedimiento se
detiene incluso antes
de haber comenzado

vhOKCanec1, e<*'

I f DytElcccion = vbOK Then


True
Confirmacin
Conf ir-in

ralse

End Funccion

Ejecute el cdigo Inea a Inea


'

Ahora mismo no est ocurriendo nada porque el cdigo est detenido -pero
en cierto sentido, an sigue ejecutndose. La informacin sobre el procedimiento, como los valores de las variables loca!es y los argumentos, est presente en la memoria de la computadora. Visual Basic est preparado para
continuar ejecutando la funcin tan pronto como se le pida. Utilizaremos la
orden Paso a paso por instrucciones, que indica a Visual Basic que ejecute
una lnea de cdigo y despus vuelva a mostrar la ventana Cdigo, devolvindonos el control.

1. Pulse el botn Paso a paso por instrucciones.


Paso a paso por
instrucciones

Al pulsar el botn, Visual Basic lleva el indicador de instruccin actual a


la instruccin que utiliza la funcin MsgBox. Observe que Visual Basic
ha pasado por alto dos lneas de cdigo: la lnea de comentarios y la instruccin Dim. Como en realidad estas dos lneas de cdigo no realizan
ninguna accin, nunca se convierten en la instruccin actual.
Lnea actual de cdigo

1 1

D l m bytEleccion A5 Byte

If bytEleccion = vbOK Then


Confirmacin = True
Else
Confirmacin = F a l s e
End If

End Function

Esta lnea de cdigo utiliza la funcin MsgBox para mostrar un mensaje


. al usuario y asigna a la variable bytEleccion el valor devuelto por la fun-

cin. Cuando reiniciemos la ejecucin del cdigo, esperaremos que en la


pantalla aparezca el mensaje.

2. Vuelva a pulsar el botn Paso a paso por instrucciones.


Access pasa a primer plano y se ejecuta la instruccin actual, que muestra el mensaje en la pantalla.
11

3. Pulse Aceptar.
Cuando contestamos a la pregunta del cuadro de mensaje, Visual Basic
asigna el valor a la variable bytEleccion y termina con esa instruccin.
Despus vuelve a la ventana Cdigo y desplaza el indicador de instruccin actual a la siguiente lnea de cdigo: la instruccin If ...Then que determina si hemos pulsado el botn Aceptar.

4. Vuelva a pulsar el botn Paso a paso por instrucciones.


La condicin de la instruccin If ...Then es verdadera -la

variable byt
Eleccion es igual a la constante vbOK- por lo que Visual Basic pasa a
la lnea de cdigo inmediatamente debajo de la instruccin If ...Then.

Dim b y t E l e c e i o n A s Byte
bytElcreion

E s s B o x ( s t r c n s a 3 e , vbQuestlon

+ vbOKCanec1,

ci-

If b y t E l e c c l o n = vbOK 1
comi-in
= Trw

Cuando la condicin
If... Then es verdadera,
sta es la siguiente
Inea que se ejecuta

Confirmacin = r a l s

5. Vuelva a pulsar el botn Paso a paso por instrucciones.


Visual Basic asigna el valor True al valor retorno de la funcin Confirmacin y pasa por alto el bloque Else, desplazando el indicador de instruccin actual a la instruccin End If.

Dim b y r r l e c c i o n 1s ycc

If b y t E l c c c i o n
vbOK Thcn
Confirmacibn = True

Visual Basic pasa por


alto esta lnea

Aqu es donde realmente vemos lo valioso de ejecutar el cdigo lnea a


lnea. Si la condicin de la instruccin If ...Then fuera falsa -si hubiramos pulsado Cancelar en lugar de Aceptar-Visual Basic habra seguido
un camino distinto en el cdigo. Al ejecutar el cdigo de esta forma, podemos ver exactamente qu lneas de cdigo se ejecutan realmente, en lugar de intentar adivinar lo que ocurre en los procedimientos.

6. Vuelva a pulsar el botn Paso a paso por instrucciones dos veces ms.

\
L.

Se ejecutan las dos ltimas instrucciones de la funcin. Cuando se pasa


la instruccin End Function, se vuelve a activar la ventana Inmediato.
Aqu es donde habamos comenzado a ejecutar el cdigo -antes de que
se detuviera en el punto de interrupcin- por lo que es aqu donde nos
vuelve a situar Visual Basic cuando finaliza la ejecucin del cdigo.

La ventana Inmediato muestra el valor devuelto por la funcin, que en


este caso es Verdadero.

7. Cierre la ventana Inmediato.


8. En el margen, pulse el punto rojo que aparece junto a la lnea donde est
colocado el punto de interrupcin (la lnea con el encabezamiento de la
funcin Confirmacin).
As eliminamos el punto de interrupcin que habamos colocado, de
forma que Visual Basic permitir que la funcin Confirmacin se ejecute en el futuro sin interrupciones.

Paso de un procedimiento a otro


Hasta ahora hemos ejecutado paso a paso el cdigo de un nico procedimiento. Pero en el Captulo 5 aprendimos a dividir el cdigo en un procedimiento por cada tarea. Cuando recorremos paso a paso el cdigo de nuestra
aplicacin, Visual Basic puede pasar automticamente de un procedimiento
a otro, de forma que podamos seguir perfectamente la evolucin del cdigo.
Para hacerlo, recorreremos paso a paso el procedimiento de evento
BeforeUpdate del formulario Contactos. Este procedimiento de evento
llama a la funcin Con.rmacin, de forma que veremos cmo Visual Basic
ejecuta ambos procedimientos.
Abra el mdulo del formulario Contactosy coloque un punto
de interrupcin
Antes de poder explorar la ejecucin del cdigo de un procedimiento de
evento, necesitamos colocar un punto de interrupcin en la funcin.

1. Cambie a Access (pulse el botn Ver Microsoft Access en la barra de herramientas).


Ver Microsoft
Access

b"l
Cdigo

2. En la ventana Base de datos, pulse el acceso directo Formularios.

3. Seleccione el formulario Contactos y pulse el botn Cdigo.


Visual Basic vuelve a estar en primer plano y muestra el mdulo del formulario. El primer procedimiento de la ventana es el procedimiento de
evento FormBeforeUpdate.

4. Modifique el tamao de la ventana Cdigo para que muestre la mayor


parte posible del cdigo del procedimiento (arrastre la esquina superior
izquierda de la ventana para agrandarla).

5. En el margen gris, pulse junto a la quinta lnea del procedimiento -la


que llama a la funcin Confirmacin.
Esto coloca un punto de interrupcin en la instruccin, por lo que la ejecucin del cdigo se detendr aqu.

CodPoscel.SetFocus
Cancel = True

'

vi1..ive

NO .se guardare el

-1 cmiigi<icdPasre<l.

Coloque un punto de
interrupcin en esta
lnea de cdigo

registro.

Ejecute paso a paso el procedimiento de evento

Para ejecutar un procedimiento de evento de un formulario no utilizaremos


la ventana Inmediato -haremos que se produzca, en Access, el evento en el
formulario, ejecutndose automticamente el procedimiento.
B

km 1

Formulario

1. Cambie a Access.
2. Pulse el botn Vista Formulario.

3. Pulse el campo Cdigo postal y borre el valor que hay en el campo.


4. Pulse MAYUS+INTRO para guardar el registro actual.

iriveite sub F o r ~ B c o r e U p d a c e ( C a n e e lAs Inceqerl


S1 el i s u s r i o ha escrito una d i i % riun,
oniprii-ha el ~ " l i i j "pr,z41
D i m b l n h e e p t m *s Boalean

i r a c e p t a r
c o l r t i r i a c i b n l l o ae ha Imcmdy~%ao
el c6di
If Nor blneceptar Then
LI u s u u i i i -tic ~ i ~ i Cbii-cIa
i i
C0dPOSZa1,SerFocus
~ l i e i v ecal campo curl~uurai
Cancel = True
NO 3~ g u ~ i r d ~ real regiocro
I n d If
End 1f
End Sub

El procedimiento se
ejecutar hasta que
llegue a la lnea que
contiene el punto de
interrupcin

El procedimiento BeforeUpdate se ejecutar y cuando Visual Basic encuentre el punto de interrupcin que hemos colocado, mostrar el procedimiento de evento en la ventana Cdigo.
Esta lnea de cdigo, la siguiente instruccin que se ejecutar, llama a la
funcin Confirmacin del mdulo Mensajes. Cuando ejecutemos esta
instruccin, Visual Basic pasar el control a la funcin Confirmacin.

Gz!
Paso a paso por
instrucciones

5. Pulse el botn Paso a paso por instrucciones.


Visual Basic cambia a la ventana del mdulo Mensajes y muestra la funcin Confirmacin.

' ~ l d eal Iisueirin

que confirme

una a c c l r

d-bolviendo

Lrue o

Cuandosepasaa
un procedimiento
distinto, Visual
Basic lo muestra

D i m b y t ~ l e c o i o nIs Byre
bytElecciOn

I3gBox(strmensajije, v h a c s t l o n

+ vbOKCaneel,

r c

I f bytEleCClOn = vbOK Then


C o n f i m a c l o n = True
ElSe
Conf irmacibn
False
End I f

End i u n c t i o n

. Ahora que estamos en la funcin Confirmacin, podramos ejecutar una


a una las lneas que componen su cdigo. No obstante, utilizaremos una
tcnica distinta para ejecutar de una vez varias lneas de cdigo, recorriendo de un solo paso la funcin Confirmacin entera.

6. Pulse el botn Paso a paso para salir.


,
Paso a paso
para salir

Esta orden le indica a Visual Basic que ejecute cdigo hasta que llegue al
final del procedimiento actual, luego pare de nuevo y vuelva al procedimiento que hizo la llamada. Al pulsar el botn, el cdigo de la funcin
Confirmacin mostrar el mensaje, preguntndonos si deseamos guardar
el registro sin cdigo postal.

7. Pulse Cancelar.
Cuando termina la funcin Confirmacin, Access devuelve el control al
procedimiento de evento FormBeforeUpdate -recuerde que ste es el
procedimiento que llam a la funcin Conj-irrnacin. Siguiendo donde se
qued, coloca el indicador de instruccin actual en la instruccin
If ...Then que sigue a la lnea que llama a la funcin.

'
S

Private Sub For~BetoreUPdate(CencelAs Integer)


S1 el u s u a r i o ha e s c r i t o una direccion, comprueba el codiyo postal
DI^ blnACeptar 19 Boolcan

CdPascal.SctFocu3
cancel = True

' V i ~ r l v cal
m

c m p n ,'orlPnaral.

NO 31 guardara el r e g i s t r o .

Una vez que Visual


Basic vuelve de
otro procedimiento,
el cdigo seguir
ejecutndose
donde se qued

Ahora podemos seguir recorriendo el procedimiento de evento o indicar


a Visual Basic que contine.

b
Continuar

8. Pulse el botn Continuar.


El procedimiento de evento BeforeUpdate concluye su ejecucin.

9. Cambie a Access.
Al haber elegido el botn Cancelar en el cuadro de mensaje, el cdigo no
ha permitido que el registro se guardara -el icono del lapicero sigue apareciendo en el selector del registro. En la siguiente seccin intentaremos
volver a guardar el registro.
Nota Cuando ejecutamos paso a paso un procedimiento de evento, no podemos volver al formulario hasta que finalice la ejecucin del procedimiento. Si deseamos detener la ejecucin del cdigo, utilizaremos la orden Restablecer (del men Ejecutar) para finalizar el procedimiento y restablecer
todas las variables. La orden Restablecer tambin resulta til si se produce
un error durante la ejecucin paso a paso del procedimiento, cuando parece
que estamos bloqueados dentro del procedimiento. Si no logramos corregir el error y seguir ejecutando, deberemos utilizar la orden Restablecer (del
men Ejecutar) para detener la ejecucin de todo el cdigo.

Seguimiento de las variables y otros valores


La ejecucin paso a paso del cdigo puede ayudarnos a imaginar lo que est
pasando. Pero a medida que la aplicacin progrese, los valores de las variables
y los campos guardados en memoria cambiarn, afectando al funcionamiento
de nuestra aplicacin. Para entender realmente qu es lo que ocurre mientras
se ejecuta el cdigo, deberemos conocer el valor de las variables y los campos.
Necesitamos abrir una ventana hacia el cerebro de la computadora.

Mediante el uso de las herramientas de depuracin que incorpora Visual Basic podemos averiguar el valor de una variable, un control o cualquier otra
expresin. De hecho, ya lo hemos hecho: en el Captulo 3 utilizamos la ventana Inmediato para averiguar el valor de una propiedad. No obstante, existe un mtodo mejor para realizar el seguimiento de los valores durante la ejecucin del cdigo, la ventana Locales. En la ventana Locales, Visual Basic
muestra el valor de todas las variables y todos los objetos relacionados con
el procedimiento que se est ejecutando en ese momento -los denominados
objetos y variables locales. A medida que se vaya ejecutando el cdigo, se
reflejarn automticamente en la ventana Locales los cambios que se produzcan sobre los valores de las variables que en ella aparecen.
Ejecute paso a paso el procedimiento de evento otra vez

Para observar el funcionamiento de la ventana Locales volveremos a ejecutar el procedimiento BeforeUpdate del formulario, intentando guardar de
nuevo el registro con el campo Cdigo postal en blanco. Mientras tanto, inspeccionaremos el valor de una variable a medida que se ejecuta el procedimiento.

1. Pulse MAYUS+INTRO para guardar el registro actual.


Cuando Visual Basic encuentra el punto de interrupcin que colocamos
en el procedimiento de evento BeforeUpdate muestra la ventana Cdigo.
Ahora que el procedimiento est en ejecucin, podemos pasar a observar
. la ventana Locales para ver el valor de la variable blnAceptar, que se utiliza para determinar qu botn se ha pulsado en el cuadro de mensaje.

o!
i

Ventana
Locales

2. Pulse el botn Ventana Locales.


Al igual que la ventana Inmediato, la ventana Locales se puede anclar en
algn lateral de la ventana de Visual Basic o se puede dejar como ventana flotante.

3. Arrastre la barra de ttulo de la ventana Locales hacia el centro de la ventana de Visual Basic y luego ajuste su tamao y su posicin de forma que
se pueda ver la mayor cantidad de cdigo posible.
La ventana Locales muestra tres objetos, el tercero de los cuales es la variable blnAceptar. Como puede ver, el valor actual de la variable bln
Aceptar es Falso.

Dim blnlceprar As Boolcan

Cd~goen
ejecuc~n

If NOT I ~ N u l l ( D ~ r e ~ ~ lAnd
o n )IsNull(CodPostaI1 Then
lnllxpta.
Canfi$5%ibnI"lki sa Dr intrahinxdo cl c641Ao
f Not blnAcepcar Then
El u s i i a r i l srlt. a i o n n Carirelnl
C~dPoatalSetFocus
Vuelve al cainpo CudPoatal
CIIIICCI= True
NO se guardara a l registro

Ventana
Locales

El valor de la variable blnAceptar es Falso

Consejo Se puede ver que en la ventana Locales, encima de las dos variables, aparece la entrada Me. Esta entrada, que ser la primera de la ventana Locales siempre que se est ejecutando un procedimiento de evento, representa al objeto Formulario (Form) o Informe (Report) actual -en este
caso el formulario Contactos- junto con todos sus controles y propiedades.
Esta entrada nos permite consultar el valor de las propiedades y de los controles mientras realizamos el seguimiento de la aplicacin. Para que se muestren las propiedades del formulario se pulsa en el pequeo recuadro que contiene un signo ms y que aparece a la izquierda de la entrada Me. De esta
forma desplegamos la larga lista de propiedades y objetos pertenecientes al
formulario. Para ver las propiedades de un control del formulario, se localiza en la lista y se pulsa sobre su signo ms.

Es el momento de seguir paso a paso por el resto del procedimiento de evento y observar sus variables. En la ejecucin paso a paso anterior de este cdigo, entramos dentro del cdigo de la funcin Confirmacin. Esta vez,
aprenderemos a ahorrar tiempo saltando sobre los procedimientos que no requieran nuestra atencin. Para ejecutar una lnea de cdigo sin entrar en el
procedimiento al que se llama en ella usamos la orden Paso a paso por procedimientos -funciona igual que Paso a paso por instrucciones, pero no se
detiene dentro de los procedimientos.
Paso a paso
nor
-

procedimientos

4. Pulse el botn Paso a paso por procedimientos de la barra de herramientas.

Se ejecuta la funcin Confirmacin, mostrando su cuadro de mensaje.

5. Pulse Aceptar.
Visual Basic vuelve a mostrar el procedimiento de evento BeforeUpdate
-aunque hemos ejecutado la funcin Confirmacin sin detenernos dentro de ella, todava seguimos en el modo de ejecucin lnea a lnea. La
funcin Confirmacin, por la que acabamos de pasar, habr asignado a la
variable blnAceptar el valor correspondiente al botn elegido en el cuadro de mensaje.

6. Como se puede ver, en la ventana Locales la variable hlnAceptar tiene


ahora el valor Verdadero-indicando que se puls el botn Aceptar.

El valor de la variable blnAceptar ahora es Verdadero

Ahora podemos seguir recorriendo el procedimiento de evento.

7. Vuelva a pulsar el botn Paso a paso por procedimientos.


Como el valor de la variable es Verdadero -lo que significa que Not
blnAceptar es Falso- el bloque If ...Then no se ejecuta.

Privace Sub Form-BeforeUpdate(Cance1 As Inceger)


' 51 r l L ~ S U B T I O ha escrito une d i r e c i i o n , comprueba -1 codign p n s r s l

D i m blnAceptar *S Booleen
If Not IsNuII ( D ~ r e c c l o n )And IsNull (CodPostel) Then

il

c d ~ o s t a l . s e t F o c u ~ ' Vuelve al campo CorlPoscal.

El indicador de
instruccin actual
pasa a esta lnea

8. Pulse el botn Paso a paso por procedimientos tres veces ms.


Termina la ejecucin del procedimiento de evento BeforeUpdate, permitiendo que el registro se guarde en el formulario Contactos.

9. Cierre la ventana Locales (pulse la X de la esquina superior derecha).

Otras tcnicas de monitorizacin del cdigo


a ventana Locales resulta til cuando se quiere monitorizar contite el valor de una variable o de otro objeto durante la ejecucdigo. Pero existen otras tcnicas que se pueden utilizar para
nitorizar el progreso del cdigo.

Definicin de expresiones de inspeccin en la ventana Inspeccin.


La ventana Locales slo muestra las variables y los objetos del procedimiento actual. En algunas ocasiones puede que nos interese conocer
el valor de variables u objetos definidos fuera del procedimiento actual -variables compartidas por toda la aplicacin, por ejemplo. Las
rdenes Agregar inspeccin e Inspeccin rpida (men Depuracin)
permiten especificar los datos que se quiere monitorizar. Mientras se
ejecuta el cdigo, los valores que toman las expresiones especificadas
se van mostrando en la ventana Inspeccidn.
Envo de valores o mensajes a la ventana Inmediato. Si existe un
punto concreto del cdigo en el que se quiera verificar el estado del
procedimiento o el valor de una variable, se puede enviar un mensaje
a la ventana Inmediato utilizando el mtodo Print del objeto Dehug.
En cualquier parte desde la que se quiera enviar una salida a la ventana Inmediato, basta insertar una lnea con Debug.Print seguido de la
expresin que se quiera mostrar. Por ejemplo, podramos aadir la siguiente lnea de cdigo en el procedimiento BeforeUpdate, en lugar
de utilizar una expresin de inspeccin.
Debug.Print " ~ funcin
a
Confirmacin devuelta es:"; blnoK

De esta forma, cada vez que se ejecute, el procedimiento enviar el


valor de hlnAceptur a la ventana Inmediato. No ser necesario coloun punto de interrupcin ni explorar paso a paso el cdigo, bastaon mirar en la ventana Inmediato despus de que finalice el pro-

isualizacin de cuadros de mensaje. Si se quiere informar sobre la


volucin de un procedimiento mientras se ejecuta, pero sin tener que
onsultar la ventana Inmediato, se pueden mostrar mensajes propios
usando la funcin MsgBox. Por ejemplo, podramos colocar la siuiente lnea de cdigo en el procedimiento BeforeUpdate.

MsgBox "La funcin Confirmacin ha devuelto:

"&

blnAceptar

Modificacin del cdigo a medida que se ejecuta. En la mayora de


los sistemas de programacin, el cdigo no se puede modificar du-

I
(contina)

(Continuacin)
rante su ejecucin. Pero en Visual Basic tenemos la flexibilidad de
cambiar los valores de las variables o el mismo cdigo mientras ste
se ejecuta lnea a lnea. Supongamos que estamos realizando el seguimiento de una variable y nos damos cuenta de que no tiene el valor
que se esperaba. Si es necesario, podemos anadir una lnea de cdigo
al procedimiento y continuar con su ejecucin.
Establecer la instruccin actual. Normalmente, cuando se ejecuta 1nea a lnea el cdigo, no se altera el orden en el que se suceden las instrucciones de Visual Basic. No obstante, si se est recorriendo el cdigo y se quiere cambiar la instruccin que se ha de ejecutar a
continuacin, se puede utilizar la orden Establecer instruccin siguiente (men Depuracin). Resulta especialmente til cuando se modifica una lnea de cdigo que no ha funcionado como se esperaba y
se quiere volver a ejecutarla sin reiniciar el procedimiento.
La estrategia que se elija para monitorizar y depurar el cdigo de
der de los problemas que se estn intentando diagnosticar y
cuencia con la que se deba verificar el funcionamiento del cd
medida que se vaya ganando experiencia en la programacin c
sual Basic, se ir aprendiendo cules son las tcnicas ms apropia
para cada tarea de depuracin.

LOCALIZACIN Y CORRECCIN DE ERRORES E N EL CDIGO


Los procedimientos que hemos examinado hasta ahora funcionan -aunque
el seguimiento detallado nos ha ayudado a aprender ms sobre su funcionamiento, parecen funcionar bastante bien. Pero, qu ocurre cuando el cdigo
no funciona como se esperaba? Es en esos casos cuando las herramientas de
Visual Basic toman un protagonismo especial. En esta seccin aprenderemos
a verificar el cdigo de Visual Basic segn lo introducimos y a corregir los
errores que detectemos.
La mayora de nuestros contactos se encuentran en Madrid o en Sevilla, por
lo que nos gustara facilitar a los usuarios la introduccin de direcciones de
dichas ciudades. Una primera posibilidad es escribir un procedimiento de
evento que se ejecute despus de introducir un cdigo postal y que rellene en
consecuencia los valores Ciudad y Estado/Provincia. De esta forma, los
usuarios que conozcan este atajo pasarn por alto esos campos Ciudad y Estado/Provincia cuando estn introduciendo direcciones de Madrid o Sevilla.
De paso, haremos que el procedimiento rellene el campo Pas cuando el
usuario introduzca un cdigo postal de Espaa.

Escriba un procedimiento de evento que rellene automticamente campos

Queremos dar valor a los campos Ciudad, Provincia y Pas cada vez que
un usuario introduzca un valor en el campo Cdigo postal. Para hacerlo,
debemos crear un procedimiento de evento para el evento AfterUpdate del
control.

1. En el cuadro Objeto que hay en la parte superior de la ventana Cdigo (a


la izquierda), seleccione CdPostal.

2. En el cuadro Procedimiento (a la derecha), seleccione AfterUpdate.


La ventana Cdigo muestra el procedimiento de evento CdPostaL
AfterUpdate.
Cuadro
Objeto

' 51 no hay nombre o d i r e c a m n devuelve una cadena v a c a .

Cuadro
Procedimiento

I i I s N ~ l l ( & p e l l l d o s )Or I s N u l l ( D i c e c c l 6 n l Then


D ~ r e f c ~ n C ~ m p l e=f a"',
Else

S
se cunsrruyr l a cadr-iia i u i i l a d ~ i r c c i o n .
DirereinCornpleca
NombreCompleCo 6 YbNevLine 6
D 1 r e c ~ 1 6 n 6 YbNewLlne C Cl"dlld L ", " 6
rstadoo~rov~ncia-L
rq
fe L c d ~ o s t a l

E"d If
F"'?C?Ol__. .

- .

irivate Sub CdPostal_AiCerUpdaTcI)


F, d

Sub

3. Escriba el siguiente cdigo dentro del procedimiento de evento:


' Si el cdigo postal es el de Madrid o Sevilla, rellena ciudad y

provincia.
Select Case CdPostal
Case "28000" To "28099"
Ciudad = "Madrid"
Provincia = "Madrid"
Case "41000" To "41099"
Ciudad = "Sevilla"
Provincia = "Sevilla"
End Select

Hasta aqu todo bien. Este procedimiento nos presenta una nueva instruccin de Visual Basic para controlar el flujo del cdigo: la instruccin
Select Case. Esta instruccin se utiliza para ejecutar una accin de entre

varias, dependiendo del valor de una variable o una expresin. Cada instruccin Case (un caso) que va a continuacin contiene un bloqiic de
cdigo concreto -ser el valor de la expresin Select Case el que dctcrmine qu bloque de cdigo se ejecuta. Como ya hemos visto antes, el sangrado de los bloques de cdigo ayuda a comprender el funcionamiento de
la instruccin.
En este ejemplo, le estamos diciendo a Visual Basic: Comprueba el valor del campo CdPostal -si est entre 28000 y 28099 (los de la mayora de las direcciones de Madrid), ejecuta el primer bloque de cdigo; si
est entre 41000 y 41099 (los de la mayora de las direcciones de Sevilla), ejecuta el segundo bloque de cdigo. Podemos incluir tantos casos (Case) como queramos; y, si conviene, podemos terminar con la instruccin Case Else seguida de un bloque de cdigo, que se ejecutar si
ninguno de los casos anteriores se ajusta al valor de la expresin Select
Case.
Ahora aadiremos cdigo para comprobar si el cdigo postal es de Espaa, con el fin de rellenar tambin el campo Pas.

4. Justo encima de la lnea que incluye la instruccin End Select, introduzca la siguiente lnea de cdigo:
If CdPostal > "00000" And < "99999" Then

Cuando pulse INTRO, el texto de esta lnea cambiar a color rojo y se mostrar un mensaje de error. Ha cometido un error! (Por supuesto, slo estaba siguiendo las instrucciones que se le daban.) El mensaje de error,
Se esperaba: expresin indica que Visual Basic requiere una expresin
-como, por ejemplo, una variable- en algn punto de esta lnea.

5. En el cuadro de mensaje, pulse Aceptar.


Una vez cerrado el cuadro de mensaje, ver que el smbolo < aparece
resaltado - e s t e es el sitio de la lnea que no le gusta a Visual Basic- y
que el texto de la lnea est en color rojo.

1/

Privare Sub CdPoscal iirerUpdate0


5 2 el Codlgo p o s t a ~ i e se 1 de l a d r i d o seviila, rcliena ciudad y p-

Selerr Case Cod~ostal


Case '"28000"TO "28099"
Ciudad
"Hadrxd"
PrOvlnc~m = .'1ladr1d"
Case '"41000"TO "41099"
Cludad
*Sevillave

Y1

Visual Basic resalta


el punto en el
que identifica un
problema

Puede que no lo haya notado, sobre todo si se le da bien la mecanografa,


pero cada vez que introduce una lnea de cdigo en la ventana Cdigo,
Visual Basic la verifica para asegurarse de que cumple las reglas. En este
caso ha escrito algo que no est permitido, aunque a simple vista parece
estar bien. La lnea parece decir Si el campo CdPostal es mayor que cinco
ceros y menor que cinco nueves, entonces... Por qu no funciona? A diferencia del idioma castellano (o del ingls, la base del lenguaje de programacin), en el que se puede omitir el sujeto si ste se repite despus de una
conjuncin como <<y (and, en ingls) -como, por ejemplo, en
Superman fue a la luna y volvi- el lenguaje Visual Basic requiere que
se repita el sujeto. En otras palabras, lo que tenemos que decir es Si el
campo CdPostal es esto y el campo CdPostal es esto otro...
Corrija el error y termine el procedimiento
Antes de seguir adelante debemos corregir el error. Por cierto, si no se corrge una lnea que tiene un error de sintaxis, Visual Basic sigue mostrando la
lnea en rojo para indicar que no es vlida.

1. Pulse la tecla FLECHA IZQUIERDA, escriba CdPostal y luego pulse en la


siguiente lnea.
iYa no hay ningn error!

PrIvate sUi c o w o s t a < * < t e r u p h t e u


S I el codigo p o s m i es el de nadria n Sexliia

relier- ciudan y

prn

S e l ~ c tCase C o d P o ~ t d l
Case .'28000" TO "28099"

Cludad = "nadrid"
PrOV1nc1a = "nadzld*
Case "41000" To "41099"
C1Udad = "Sevilla"
P.OVliiCI*
= "SeV111a"
If C6dPosta1 > "00000" And CbdPoati1 < "99999" Then

2. Escriba las dos lneas siguientes debajo de la instruccin If ...Then.


Pas = "Espaa"

Estas dos lneas asignan valor al campo Pas y pasan el foco al campo
Cargo, dado que el usuario ya no tiene que introducir el valor del campo
Pas.

Estamos condenados a que se produzcan errores cuando escribin~os


cdigo o cuando lo ejecutamos -motivo por el cual Visual Basic proporciona tantas herramientas para corregirlos. An as, no siempre es
fcil adivinar qu es lo que va mal. Para saber dnde buscar, algo que
nos ayudar ser conocer los tipos de errores que se pueden presentar.
La mayora de los errores se encuentran en alguna de las categoras
que siguen.

Errores de sintaxis. Cuando en el cdigo se escribe incorrectamente


alguna palabra clave o se olvida algn signo de puntuacin. Visual Basic muestra un mensaje tan pronto como se intenta pasar a otra lnea.
Normalmente, el mensaje dice con precisin qu es lo que est mal en
el cdigo. Mientras no se corrija el error cometido, Visual Basic mostrar esa lnea en color rojo.
Referencias no vlidas. Si se escribe mal el nombre de una variable,
campo o procedimiento, o si se olvida declarar una variable que se utiliza, Visual Basic notificar el error al intentar ejecutar el cdigo.
Cdigo incompleto. Si el cdigo no est completo-por ejemplo, si
hay una instruccin If.. .Then sin su correspondiente End If- Visual
Basic notificar el error al intentar ejecutar el cdigo.
Errores lgicos. Si el cdigo se ejecuta sin errores pero no hace lo que
se esperaba, probablemente haya algn error en la lgica del programa. Recuerde que la computadora slo hace lo que se le indica -no
se pueden hacer suposiciones sobre el funcionamiento de las cosas!
Los errores lgicos son, con diferencia, los ms difciles de encontrar,
y hacen necesario ejecutar paso a paso el cdigo para observar lo que
ocurre y as poder corregir los errores que se encuentren.
Errores de tiempo de ejecucin. Hay bastantes errores que Visual
Basic no puede detectar hasta que se ejecuta la aplicacin. Por ejemplo, si el cdigo pasa un valor no vlido como argumento de una fun-

tarlos antes de que un mensaje de error interrumpa la aplicacin.


(contina)

(Continuacin)

En este captulo ver ejemplos de todos estos tipos de errores -y le


garantizo que seguir vindolos, prcticamente cada vez que se ponga
a programar. Sin embargo, a medida que vaya ganando experiencia
con la programacin en Visual Basic, ser cada vez ms hbil evitando errores y tratndolos cuando se produzcan.

Cmo indicar a Visual Basic que verifique el cdigo


Ya hemos visto cmo verifica Visual Basic cada lnea de cdigo que introducimos para asegurarse de que no contiene errores. Pero muchos de los
errores no se encuentran nicamente en el cdigo de una sola lnea. Para detectarlos, es necesario analizar la lnea de cdigo dentro del contexto del procedimiento que la contiene o de la propia aplicacin. Aunque no lo hace automticarnente a medida que escribimos el cdigo, Visual Basic comprueba
los procedimientos completos antes de ejecutarlos. Verifica distintos tipos de
consistencia -por ejemplo, que las variables utilizadas en el cdigo hayan
sido previamente declaradas y que los procedimientos a los que se llama
existen en la aplicacin. Este proceso se denomina compilacin, porque implica la recopilacin de toda la informacin relacionada con la aplicacin,
preparndola para poder ejecutar el cdigo.
Una forma de compilar un procedimiento es intentar ejecutarlo. Pero no
siempre queremos esperar a ejecutar el cdigo para comprobar que funciona correctamente -sera como esperar a comprobar la presin de los neumticos despus de salir de viaje. Afortunadamente, podemos pedirle a
Visual Basic en cualquier momento que compile los procedimientos.
Compile el procedimiento de evento y resuelva los errores

Lo crea o no, en el procedimiento CdPostal-AfierUpdate hay un par de errores. Si intentamos ejecutar el procedimiento tal como est ahora, no funcionar. Para localizarlos, le pediremos a Visual Basic que compile el cdigo.

1. En el men Depuracin, seleccione Compilar Cap06 Contactos.


Visual Basic muestra el mensaje de error No se ha definido la variable.
Este mensaje significa, ms o menos, que a Visual Basic no le resulta familiar una expresin del cdigo y no puede encontrar nada en la aplicacin de Access a lo que se pueda referir la expresin.

2. En el cuadro de mensaje, pulse Aceptar.

La expresin que no puede entender aparece resaltada en la ventana C6digo. En este caso, la variable que Visual Basic no puede reconocer es
Provincia.

Case "28000" TO "28099"

C ~ u d a d= "Sevilla"
PCOVI~CIC~
"SevIIla"
IL CbdPostal > "00000" And C6dPoscal < "99999" Then
Pas = "E3paiia"
Cargo.SecFoous

El cdigo que ha
provocado el error
aparece resaltado

En esta lnea de cdigo, realmente no estamos haciendo referencia a ninguna variable. Intentamos utilizar el campo Provincia del formulario
Contactos. Dnde est el error? Muy sencillo, el campo no se llama Provincia, sino EstOProv -un error muy simple, pero que debemos corregir si queremos seguir adelante. En casos como ste, en los que se ha escrito mal alguna expresin, Visual Basic no resulta tan til como cabra
esperar. Al menos no emite ningn juicio al respecto, se limita a notificar
los hechos.

3. Sustituya la palabra Provincia por EstOProv.

4. Tres lneas ms abajo, en la otra referencia a Provincia, sustituya la palabra por EstOProv.
Ahora que hemos corregido el error, debemos compilar de nuevo para
aseguramos de que todo est bien.

5. En el men Depuracin, seleccione Compilar Cap06 Contactos.


Sigue sin estar bien. Esta vez, el mensaje que muestra Visual Basic dice
End S-lect sin Select Case. Este mensaje indica que al menos un bloque
de cdigo del procedimiento no est dispuesto correctamente y que Visual
Basic encontr una instruccin Case o End Select cuando esperaba encontrar algo diferente. Este es el problema: hemos utilizado una instruccin
If ...Then y hemos puesto un bloque de cdigo tras ella, pero olvidando poner una instruccin End If que indique el final de ese bloque. Para compilar con xito el procedimiento y poder ejecutarlo debemos asegurarnos de
que cada bloque de cdigo tiene su principio y su final (igual que un comentario entre parntesis tiene sus parntesis de apertura y de cierre).

S e l e i c Ca3c CbdPostaL
Case "28000" To "

C a s e "41000" To

Ciudad

"se

LSCOPTOV = *
> "00000" And C 6 d P o s c a l
P a s = "Esliaiia"
CBc90.SetPOC"B

It C 6 d P o n t . l

<

"99999" Then

6. Pulse Aceptar.
La instruccin resaltada es la inmediatamente siguiente al lugar en el que
Visual Basic esperaba encontrar la instruccin End If.

7. Colquese en la lnea vaca que est encima de la instruccin End Select


y escriba End If.

8. En el men Depuracin, seleccione Compilar Cap06 Contactos.


Esta vez no hay sorpresas; todo est en orden.
-

Consejo En cualquier mensaje de error de Visual Basic se puede pulsar el


botn Ayuda para ver un tema de ayuda que muestre ms informacin sobre
el error y sobre cmo corregirlo.

Ejecute el procedimiento de evento desde el formulario Contactos

Ahora que la compilacin se ha completado satisfactoriamente, podemos


probar el procedimiento para ver si funciona correctamente. Colocaremos un
punto de interrupcin en el procedimiento de evento para poder ejecutarlo
paso a paso.

1. En la ventana Cdigo, pulse el margen gris junto a la lnea Select Case.


En el margen aparecer el ya familiar indicador de punto de interrupcin.
Nuevo registro

2. Cambie a Access.
3. Pulse el botn Nuevo registro en la barra de herramientas.
4. Rellene los campos del registro con los valores siguientes:

Campo

Valor

Nombre
Apellidos
Direccin
Cdigo postal

Catalina
Ruiz Comas
Ribera Baja 45
28024

5. Pulse TAB para abandonar el campo Cdigo postal.


Cuando dejemos el campo, se ejecutar el procedimiento de evento.
Cuando Visual Basic alcance el punto de interrupcin, detendr la ejecucin del cdigo y mostrar la instruccin actual en fondo amarillo.
Antes de recorrer paso a paso el cdigo, verificaremos el valor del CdPostal. Anteriormente, en esta misma leccin, hemos utilizado la ventana Inmediato para consultar valores. Aqu utilizaremos un mtodo an
ms sencillo. Cuando, como en este instante, est detenida la ejecucin
del cdigo se puede apuntar con el ratn sobre cualquier variable o campo del cdigo para que aparezca una Informacin sobre datos -un pequeo recuadro donde se indica el valor actual de la variable.

6. Ponga el cursor sobre cualquiera de las apariciones de la variable CdPostal en el procedimiento de evento.
Aparecer un recuadro de informacin sobre datos debajo de la variable,
mostrando el valor introducido en el campo CdPostal: 28024.

Cwe CMPoatal

Case "28000" To "28099"


C~uciad= "Xadrld"
ESTOPIDV = "Ua(1r1d"
Case '"41000" To "41099"
C ~ u d a d= "Sev111a"
EstOProv = " S e v i l l a "
If C6dPostaI > '"00000.' And c d ~ o s r & <
P a i s = "Espaa"
I~d~~il~l="28024..1
C-90. S ~ L F O C U S

Cuando el cdigo
est en ejecucin, la
Informacin sobre
datos muestra el
valor de las
variables o los
campos a los que
se apunte

Ahora que ya hemos verificado que el valor de la expresin Select Case


es 28024, recorramos el resto del cdigo y veamos qu ocurre.

7. Pulse el botn Paso a paso por instrucciones en la barra de herramientas.


Paso a paso por
instrucciones

El indicador de instruccin actual pasar a la instruccin Case del primer


bloque de cdigo, donde comprobar si el valor 28024 se encuentra en el
rango entre 28000 y 28099.

8. Vuelva a pulsar el botn Paso a paso por instrucciones.


Como caba esperar, el indicador de instruccin actual se desplaza al primer bloque de cdigo, ya que el valor 28024 se encuentra efectivamente
en el intervalo definido. Cuando le permitamos continuar, Visual Basic
ejecutar las dos lneas siguientes a la instruccin Case, para asignar automticarnente valores de Madrid de Ciudad y EstoProv.

5z e l c a d i g a poical e s e l de n a d r i d o Sevilla. r e l l e n a c i u d a d y pra*

ESLOPTOY = " l a d r i d "


Case "41000" T o "41099"
Ciudad = "Sevilla"
E3tOProv

'"Se~~lla''

If CodP~sCal> "00000" And CbdPosral


Pai. = '"E=paa"
~~rgo~SetTocus
Lnd Ii
Ind Select

b
Continuar

9. Pulse el botn Continuar de la barra de herramientas.


10. Cambie a Access.
Los campos Ciudad y EstadoIProvincia tendrn los datos que esperbamos. Sin embargo, nos sorprende el campo Pas. Se supone que nuestro
cdigo tena que asignarlo, pero no tiene ningn valor. Hay algo funcionando mal en el procedimiento.
Gorrija un error en el cdigo

Para encontrar el problema, deberemos ejecutar de nuevo el procedimiento


de evento. Esta vez, probaremos con un cdigo postal diferente y veremos
qu ocurre en el cdigo.

1. Pulse el campo Cdigo postal y escriba 02134.


2. Pulse TAB.
El procedimiento de evento CdPostal-AfterUpdate se ejecutar y se detendr en el punto de interrupcin.

3. Pulse dos veces el botn Paso a paso por instrucciones.


Paso a paso por
instrucciones

Visual Basic pasar por alto las instrucciones Case, ya que el cdigo postal no se ajusta a los intervalos.

4. Pulse el botn Paso a paso por instrucciones una tercera vez.

Como caba esperar, las dos lneas por debajo de la segunda instruccin
Case no se han ejecutado. Pero veamos a dnde ha saltado el indicador
de instruccin actual: no slo se ha saltado las dos lneas de la instruccin
Case, tambin ha saltado el bloque que asigna el valor del campo Pas y
ha pasado directamente a la instruccin End Select al final del procedimiento.

Case "28000" To "28099"


Ciudad = "Madrid"
EstOProv = "nadrld"
Case "41000" To "41099'
Ciudad = '"Sevilla"
E9tOProv
"levilla"
If C o d P o ~ ~ a>l "00000" Ind C6dPostal < "99999" Then

Visual Basic salta


desde aqu.. .

...hasta aqul:
pasando por alto el
bloque de cdigo
que queramos
ejecutar

Ya hemos encontrado el error en el cdigo. El cdigo que no se ejecuta


est entre la segunda instruccin Case y la instruccin End Select, por lo
que Visual Basic asume que es parte de dicho caso y slo lo ejecuta
cuando el cdigo postal est en dicho intervalo. Para que el bloque
If ...Then se ejecute independientemente, deberemos sacarlo entero fuera
de la estructura Case...End Select.

5. Si es necesario, desplace la ventana Cdigo para que se vea la instruccin


End Sub.

6. Pulse a la izquierda de la instruccin If ...Then (con cuidado de no hacerlo en el margen gris) y arrastre hasta la instruccin End If para seleccionar el bloque completo.
Las cuatro lneas aparecen resaltadas.

Priveice Sub CadPostal-*ftecUpdereo


' S1 F L c o d l g n 1rTLa1 es el de Lladrid o Sevilla, rellena ciudad y p-

Desplazaremos este
bloque de cdigo
desde aqu.. .

...hasta aqu

Para desplazar el cdigo basta con arrastrarlo a su nueva ubicacin.

7. Pulse sobre el bloque resaltado y arrstrelo hasta colocarlo debajo de la


lnea End Select, liberando entonces el pulsador del ratn.

Case "28000"
Ciudad =
EscOProv
Case "41000"
Ciudad =
EsfOProv

To "28099"
"ladrid"
= "lladrid"

To "41099"
"Sevills"
= "5evilla"

If C ~ P O S L B I> "00000" Ind CbdPoscal < "99999" m e


,
1
.
P
"Espea"

Ahora este bloque


se ejecutar
independientemente
del bloque Select
Case

Vuelva a probar el procedimiento

El proceso de depuracin del cdigo consiste en probar una y otra vez los
procedimientos -y ahora toca volver a probar ste. Sin embargo, antes tendremos que interrumpir la ejecucin del cdigo actual y eliminar el punto de
interrupcin para que el procedimiento se ejecute sin pausas.

1. Pulse el botn Restablecer en la barra de herramientas


Restablecer

Visual Basic terminar el procedimiento y restablecer el valor de las variables.

2. En el men Depuracin, seleccione Borrar todos los puntos de interrupcin.

3. Cambie a Access.

4. Pulse el campo Cdigo postal y escriba 28024.


5. Pulse TAB.
Esta vez, el campo Pas se rellena correctamente con el valor Espaa y
el foco pasa al campo Cargo. El error est corregido!
A medida que vayamos programando en Visual Basic, es seguro que nuestro
cdigo producir todo tipo de resultados inesperados: algunos por errores tipogrficos, otros por problemas en la lgica de los programas y algunos ms
por desconocimiento de la mecnica de Access y de Visual Basic.

Pero el uso de las herramientas disponibles en la ventana Inmediato -junto


con las correspondientes dosis de paciencia y diligencia para probar una y
otra vez los procedimientos- nos permitir resolver dichos problemas y
conseguir que nuestra aplicacin funcione tal y como esperamos que lo haga.
Cierre el formulario y salga de Access

1. Cierre el formulario Contactos y pulse S cuando Access le pregunte si


desea guardar los cambios.

2. En el men Archivo, seleccione Salir.

Resumen del captulo


Para

Haga esto

Interrumpir la ejecucin
de un procedimiento con
el fin de estudiar su
evolucin

Coloque un punto de interrupcin


en la lnea en la que desee
interrumpir la ejecucin.
(Pulse en el margen gris a la
izquierda de la lnea de cdigo.)

Mostrar la barra de
herramientas Depuracin

En el men Ver, abra Barras de


herramientas y seleccione Depuracin

Ejecutar el cdigo de un
procedimiento lnea a
lnea, entrando en los
procedimientos a los que
llame

Pulse el botn Paso a paso por


instrucciones (o pulse la tecla ~ 8 ) .

Ejecutar el cdigo de un
procedimiento lnea a
lnea saltando los
procedimientos a los que
llame

Pulse el botn Paso a paso por


procedimientos.

Continuar la ejecucin
hasta el final del
procedimiento actual,
volviendo a detener
entonces la ejecucin

Pulse el botn Paso a paso


para salir.

Botn

Para

Haga esto

Continuar la ejecucin
del cdigo hasta su
finalizacin (o hasta
encontrar un punto de
interrupcin o un error)

Pulse el botn
Continuar.

Ver el valor de una


variable mientras se
ejecuta el cdigo

Mientras se est ejecutando el


cdigo en la ventana actual,
apunte a la variable para ver
la Informacin sobre datos.
O, para ver todas las variables y
objetos locales, pulse el botn
Ventana.

Botn
*TI'
Y

4.

Ejecutar un bloque de
Utilice la instruccin Select.. .Case.
entre varios dependiendo
del valor de una expresin
Comprobar su cdigo para Compile el cdigo utilizando la
verificar que la estructura orden Compilar (men Depuracin).
y la sintaxis son correctas
Para obtener informacin
interactiva sobre
Ayuda

Pulse el botn Ayuda y luego pida ayuda sobre

Deteccin y correccin de depurar cdigo


errores en e1 cdigo
Control del flujo de cdigo flujo de control (o una instruccin concreta
en la aplicacin
de flujo de control, como Select Case)

AVANCE DEL SIGUIENTE CAP~TULO


En este captulo hemos aprendido ms sobre el funcionamiento de los procedimientos y la deteccin de errores de programacin. En el siguiente captulo veremos errores que no pueden corregirse -debidos a condiciones no
esperadas o a acciones del usuario, que se producirn durante la ejecucin de
la aplicacin. En lugar de corregir el cdigo, aprenderemos a escribir cdigo
que se anticipe a errores como estos y pueda manejarlos adecuadamente.

Respuesta a errores y
condiciones no esperadas
Objetivos del captulo
En este captulo aprender a:
Tiempo estimado:
35 minutos.

iReemplazar los mensajes de error estndar de Microsoft Access

propios mensajes.

iEscribir cdigo que responda a errores y


iAadir

por sus

condiciones no esperadas.

un valor a una lista de cuadro combinado.

Si alguna vez ha realizado un viaje por regiones salvajes, sabr que la preparacin del mismo requiere bastante dedicacin. Necesita estar preparado
para cualquier eventualidad. Los caminos no sealizados pueden llevarnos
fcilmente a perdernos, la climatologa adversa puede pillarnos desprevenidos e incluso la menor dolencia puede convertirse en un problema importante lejos de la civilizacin. Por motivos de seguridad, nos ocuparemos de
llevar todo tipo de mapas, una brjula, material de primeros auxilios y ropa
y vveres extra para poder hacer frente a una estancia prolongada. La mayor
parte del tiempo, este material extra no nos har ninguna falta -pero, quin
quiere encontrarse perdido en mitad de ninguna parte sin tener las espaldas
medianamente cubiertas? No nos importarn los riesgos, claro; jno sera divertido si fuese tan seguro como estar sentados en nuestra sala de estar!
La planificacin frente a situaciones inesperadas tambin tiene cabida en la
programacin con Visual Basic. La naturaleza de un sistema conducido por
eventos como Microsoft Access se basa en esperar a que las cosas vayan pasando. La mayora sern cosas que esperamos que pasen: el usuario aade

datos aqu, pulsa un botn all. Pero los usuarios de computadoras tienen la
costumbre de probarlo todo, y antes o despus, alguien probar algo para lo
que no hemos previsto una respuesta. Aunque los errores que puedan aparecer en nuestra aplicacin no resulten tan excitantes como encontrarse perdido en una selva, siempre conviene preparar nuestra aplicacin para cualquier
eventualidad antes de lanzarla al salvaje mundo de la utilizacin diaria.
El lenguaje Visual Basic proporciona sofisticados mtodos para controlar el
comportamiento frente a un error. Normalmente, los errores pueden interrumpir la aplicacin, haciendo que parezca poco cuidada e incluso inutilizndola. En este captulo aprenderemos a responder a eventos especiales que
ocurran cuando los usuarios lleven a cabo acciones no esperadas sobre nuestros formularios. Adems, aprenderemos a utilizar instrucciones de Visual
Basic para interceptar errores producidos durante la ejecucin de los procedimientos. En general, descubriremos estrategias para proteger nuestra aplicacin -de forma que ante cualquier eventualidad que se presente, sepa responder de forma elegante y efectiva.

Inicie la leccin
i Inicie Access

y abra la base de datos Cap07 Contactos de la carpeta de

prcticas.

SUSTITUCIN

DE LOS MENSAJES DE ERROR ESTNDAR


Existen muchos errores que se pueden producir cuando el usuario utiliza los
formularios de nuestra aplicacin. Algunos de estos errores sern una absoluta sorpresa y no podremos hacer nada frente a ellos. Por otro lado, a veces
pretenderemos que se produzca un error especfico. Por ejemplo, suponga
que asignamos el valor S a la propiedad Requerido de un campo de una tabla y que los usuarios intentan dejar el campo en blanco cuando introducen
los datos. Como cabra esperar, Access mostrar un mensaje de error diciendo que el campo no puede permanecer en blanco. En el Captulo 4 lo hicimos para los campos Nombre y Apellidos de la tabla Contactos.

Si prevemos que los usuarios pueden encontrarse con errores especficos en


un formulario, como dejar un campo en blanco cuando se requiere su valor,
deberemos asegurarnos de que los mensajes que reciban tengan sentido para
ellos, con el fin de que puedan resolver el problema y seguir trabajando. No
obstante, los mensajes estndar de error que muestra Access no siempre tienen sentido para los usuarios. En esta seccin, aprenderemos a sustituir los
mensajes de error estndar que se produzcan en nuestros formularios por
nuestros propios mensajes. En concreto, responderemos al error antes referi-

do de los campos requeridos en blanco, creando un procedimiento de evento que muestre nuestro propio mensaje ante esta situacin.

Respuesta al evento Error


Cada vez que se produce un error en un formulario, se activa el evento Error
de dicho formulario. Podemos colocar cdigo en el procedimiento de este
evento para mostrar un mensaje e incluso para resolver el problema que produce el error. Pero para responder, necesitaremos saber qu error se ha
producido. Para este propsito concreto, el procedimiento de evento Error
incluye un argumento llamado DataErr, que contiene el nmero correspondiente al cdigo de error que ha ocurrido. Utilizaremos este nmero para determinar si se trata del error que esperbamos, en cuyo caso podremos responder adecuadamente.
Pero antes de nada realizaremos un poco de trabajo detectivesco. Tenemos
que averiguar el nmero de cdigo de error al que queremos responder. Para
hacerlo, aadiremos cdigo al procedimiento del evento Error dicindole a
Visual Basic que muestre el nmero correspondiente a dicho error en la ventana Inmediato. Despus, provocaremos el error para poder descubrir cul
es el nmero. Una vez que sepamos de qu nmero se trata, cambiaremos el
cdigo para que responda a ese error en concreto.
Localice el nmero de cdigo de error correspondiente
a un error de formulario

Abra el formulario Contactos y aada una lnea de cdigo al procedimiento


de evento Error.
Propiedades

1. En la ventana Base de datos, pulse el acceso directo Formularios.


2. Pulse el formulario Contactos y despus el botn Diseo.
3. Si la hoja de propiedades no est abierta, pulse el botn Propiedades en
la barra de herramientas.

4. Pulse la pestaa Eventos en la hoja de propiedades.

5. Seleccione la propiedad Al ocurrir un error y pulse el botn Generar.

I recibr al enfoque .
Iperder el enfoqlie .
I hacer ilic . . .
I hacer doble rlic .

. . . . . . . .

...........
..........
................

Al bajar el rnnuse
Al mover ei mwse
subir el mouse
[~rocedirn-nto de
Al bajar tuno t-iia
Al mbr uno tecla . . . . . . . . . . . .
-*"--".mlSl presionar una tecla . . . . . . . . .
feria de ./ata ptsvia . . . . . . . . . 3
Al oci~rriiun srtor . . . . . , . . . .
.
Al filtra . . . . . . . . . . . . . . . .
..
#Al aplicar el filtro
[Fr ~orad~miento-dee_'-

--

--

..a,.

---

---.m

- Pulse

el botn Generar

.......

6. Pulse Generador de cdigo y despus pulse Aceptar.


Access mostrar el procedimiento de evento Form-Error en la ventana
Mdulo.

Cancel

'

True

M0 s e guardar e l r e g i s t r o .

Private Sub F o r ~ E r r o r ( D a t a E r rIs Integer, Response As Integer)

Private Sub Form-KeyDoun(KeyC0de 1 s Integer, S h l f t As Integer)


' S i s e pulsa CTRL+l s e introducen v a l o r e s de Madrid.

If KeyCode

= 49

And S h i f t

2 Then

'

Se ha pulsado CTRL+l.

Observe los dos argumentos del encabezamiento Sub del procedimiento


Fom-Error, DataErr y Response.

7. Pulse TAB y escriba el siguiente cdigo:

Debug Print "DataErr

" ; DataErr

8. Si no est visible la barra de herramientas Depuracin, abra Barras de herramientas en el men Ver y seleccione Depuracin.

8. Pulse el botn Ventana Inmediato.


Ventana
Inmediato

Se abrir la ventana Inmediato para que nuestro cdigo pueda enviarle el


mensaje.

Provoque el error
Vuelva al formulario Contactos y provoque el error, intentando guardar un
registro sin nombre.

Ver Microsoft
Access

1. Cambie a Access (pulse el botn Ver Microsoft Access en la barra de herramientas).

2. Pulse el botn Vista Formulario en la barra de herramientas.


3. Pulse SUPR para borrar los datos del campo Nombre.
Vista
Formulario

Borre los datos de este campo

T18idaJ
EstadofPinu.ncid
Lodigo pnutul
Pai

Upcione. de

6 Iodus 1u.r coniactor

Confactut en Madrid

4. Pulse TAB.
Al no estar relleno el campo Nombre, que es requerido, Access mostrar
un mensaje de error.

Como puede observar, el mensaje no es demasiado amistoso -aunque


sustituiremos por nuestro propio mensaje.

lo

5. Pulse Aceptar.
6. Pulse ESC para deshacer el cambio.
Cuando provocamos el evento Error para ejecutar el procedimiento de
evento, nuestro cdigo envi un mensaje a la ventana Inmediato de Visual Basic. Echmosle un vistazo.

7. Cambie a Visual Basic (pulse Microsoft Visual Basic en la barra de tareas de Windows).

El nmero correspondiente a este error -dejar


blanco- es el 33 14.

un campo requerido en

Visualizacin de nuestro propio mensaje para un error especfico


Ahora que sabemos el nmero del error, podremos escribir cdigo para responder a dicho error. En el procedimiento de evento Error, comprobaremos
si el error es debido a que el usuario ha dejado en blanco un campo requerido. Si es as, mostraremos el mensaje correspondiente; si no, dejaremos que
Access muestre su mensaje de error estndar.
Adems de DataErr, que proporciona el nmero de error ocurrido, el procedimiento de evento Error incluye otro argumento: Response. Utilizaremos este
argumento para indicarle a Microsoft Access cmo debe proceder despus de
que se ejecute el cdigo. Tenemos dos opciones: decirle que muestre el mensaje de error estndar o que ignore el error (bien porque ya hayamos resuelto
el problema o bien porque hayamos mostrado nuestro propio mensaje).

Escriba cdigo que muestre su propio mensaje


Sustituiremos el cdigo Debug.Print que escribimos antes por el nuevo cdigo que mostrar nuestro mensaje.

1. Cierre la ventana Inmediato. La ventana Cdigo seguir mostrando el


procedimiento de evento FormError.

Privete Sub ForcError(DacaErr A s Integer, Response As Integer)

91 s e pulsa CTRL+l se introducen velores de l a d i i d .


I L KcyCode

--

49 h d S h i f c = 2 Thcn
Ciudad
"Madrid"
EaFadoOPc~vincia
'Madrid"
Pais
"Lspafia"

' Se hn pulsado CiRL+l.

2. Escriba el siguiente cdigo Visual Basic en el procedimiento de evento


Form-Error, reemplazando la lnea que contiene Debug.Print por las
que se muestran a continuacin.
Private Sub Fom-Error(DataErr As Integer, Response As Integer)

' Si el error se debe a la ausencia de nombre, se muestra un


mensaje especfico.
Const conErrCampoRequerido

3314

If DataErr = conErrCampoRequerido Then


MostrarMensaje "Debe rellenar Los campos Nombre y
Apellidos. "
Response = acDataErrContinue

Response

acDataErrDisplay

' Se muestra el mensaje

estndar.
End If
End Sub

Estudiemos el procedimiento lnea a lnea:


i La

instruccin Const declara un valor constante para el cdigo de error


que hemos descubierto. Esto nos ayudar a facilitar la legibilidad del cdigo, ya que aclara lo que significa el nmero 3314. Ms adelante en el
procedimiento podremos usar la constante conErrCampoRequerido en
lugar del nmero.

La condicin de la instruccin If ...Then comprueba si el valor DataErr


pasado al procedimiento de evento coincide con el valor de error conErrCampoRequerido. Si es as, el procedimiento ejecutar el primer bloque
de cdigo, mostrando nuestro mensaje personalizado.

i La

lnea MostrarMensaje utiliza un procedimiento general que creamos


en el Captulo 5 para mostrar un cuadro de mensaje. El mensaje le indica a los usuarios que deben resolver el problema: rellenar los campos
Nombre y Apellidos antes de guardar el registro.

i La

siguiente lnea establece el valor del argumento Response del procedimiento de evento Error, utilizando la constante predefinida acDataErrContinue. Este valor en Response le indica a Access que no muestre el
mensaje de error estndar --que es lo queremos en este caso, ya que vamos a mostrar nuestro propio mensaje.

El bloque de cdigo Else, que se ejecutar cuando el error sea distinto de


aquel al que queremos responder, asigna al argumento Response el valor
acDataErrDisplay. Esto le indica a Access que muestre el mensaje estndar para dicho error, ya que no sabemos de cul se trata.
4

Pruebe el nuevo mensaje

Si volvemos a provocar el error, aparecer nuestro nuevo mensaje.


Ver Microsofi
Access

1.
2.
3.
4.

Cambie a Access.
Pulse la etiqueta del campo Nombre para seleccionar su contenido.
Pulse SUPR para borrar sus datos.
h l s e TAB.
Access mostrar el nuevo mensaje de error.

5. Pulse Aceptar.
6. Pulse ESC.
Este sencillo uso del evento Error demuestra cmo podemos facilitar las cosas a los usuarios anticipndonos a los problemas que puedan surgirles.
Como es lgico, este cdigo slo responde a un nico error. Un cdigo algo
ms complejo en el procedimiento de evento Error nos permitir responder
a los errores de varias formas. Por ejemplo, podramos utilizar una instruccin Select...Case para decidir entre distintos bloques de cdigo, proporcionando as nuestros propios mensajes de error a diferentes errores. Tambin
podramos escribir cdigo para ayudar al usuario a resolver el problema
-por ejemplo, el cdigo podra introducir automticamente un valor requerido para que pueda guardarse el registro. Las posibilidades son ilimitadas;
lo ms importante que debemos recordar es que cuando la aparicin de un
error en un formulario crea confusin, el procedimiento de evento Error est
ah para ayudarnos a resolver el problema.

RESPUESTA A U N ERROR DE CUADRO COMBINADO


Aunque el evento Error nos ayuda a responder a gran nmero de errores,
existe un error al que responderemos utilizando un evento diferente -un
error que suele presentarse con frecuencia cuando se utilizan cuadros combinados en los formularios. Los cuadros combinados y los cuadros de lista
son dos de las caractersticas ms potentes de Access, porque proporcionan
una forma de consultar valores almacenados en distintas tablas. En esta seccin, aprenderemos a hacerlos funcionar an mejor respondiendo al evento
NotlnList.
El formulario Contactos contiene un campo de consulta proporcionado por
el Asistente para bases de datos: el campo Tipo de contacto. Este campo
muestra valores de la tabla Tipos de contactos, para que podamos especificar fcilmente el tipo de cada contacto que introduzcamos, seleccionndolo
de la lista. Para muchos campos, querremos asegurarnos de que slo ciertos
valores se introducen en la lista. Los cuadros de combinacin hacen esto
automticamente cuando su propiedad Limitar a la lista (LimitToList) tiene
el valor S -si intentamos escribir en el campo Tipo de contacto un valor
que no est en la lista, se producir un error.
Intente escribir un valor nuevo en el campo Tipo de contacto

Suponga que desea introducir el tipo de contacto para el primer registro del
formulario Contactos.

1. Pulse el botn Pgina 2 en el pie del formulario Contactos.


2. Pulse el campo Tipo de contacto y despus pulse la flecha junto al cuadro combinado.

No aparece el tipo de contacto que queremos.

3. Vuelva a pulsar la flecha para cerrar la lista, escriba Vendedor y pulse


INTRO.

Como ese valor no existe en la lista, Access mostrar un mensaje de error.

3eIecoone un elemento de la lista n introduzca un isnto que ianiidii ron ~unude los
demento.: de la rntsrna

4. Pulse Aceptar.

5. Pulse ESC.
Este mensaje es una forma de validacin; Access se asegura de que no introducimos un valor incorrecto. Pero, qu ocurre si queremos permitir que los
usuarios introduzcan sus propios tipos de contacto? Podran hacerlo abriendo el formulario Tipos de contactos, pero eso interrumpira su trabajo de
introducir contactos. Lo ideal sera que pudieran hacerlo fcilmente desde
dentro del formulario Contactos. Lo que queremos hacer es ejecutar un procedimiento de evento siempre que el usuario introduzca un valor que no est
en la lista. Para hacerlo deberemos responder al evento NotInList, que se
activa cuando el usuario intenta introducir el valor -pero antes de que el
mensaje le indique que el valor no est en la lista.
Permita a los usuarios aadir un tipo de contacto a la lista
automticamente

Cuando un usuario introduce un valor de tipo de contacto que no est en la


lista, nos interesa preguntarle si realmente desea que ese valor aparezca permanentemente. Para preguntrselo, utilizaremos la funcin Confirmacin
que escribimos en el Captulo 5. Si el usuario quiere aadir el nuevo tipo, utilizaremos cdigo de Visual Basic para aadir el valor a la tabla Tipos de contactos de forma transparente para l.
Vista Diseo

1. Pulse el botn Vista Diseo.


2. Desplcese en el formulario hasta llegar al cuadro combinado IdTipoContacto.

3. Pulse el control IdTipoContacto.


Access mostrar las propiedades de evento del control IdTipoContacto.

4. Pulse la propiedad Al no estar en la lista y despus pulse el botn Generar.


5. Seleccione Generador de cdigo y pulse Aceptar.
Visual Basic abrir el mdulo del formulario Contactos y crear el procedimiento de evento 1dTipoContacto-NotInList.

bl

-il

;p,lvate Sub IdTipoContacco-NotInList(NcuData As Srring, Response As Int


=sub

--

S 8"

L e

Prlvate Suk Llamadas-Cl~ckO


On Error GoTo Err-Llamades-Cliek
If IsNull (He [IdContactol ) Thcn
HssBox "Introduzca informaeibn de contacto antes de hacer una l.#
ElSe
DoCmd..DOMenUItm acFormBar, ~ R C C O r d s M e n u , - S w c R e c ~ r d , , a7.e
Docmd.0penrorm "Llamadas"

'

Observe que el encabezamiento del procedimiento incluye dos argumentos: NewData y Response. El argumento NewData contiene el valor que
el usuario ha introducido en el campo -el valor que an no est en la lista. El argumento Response nos permite decirle a Access qu debe hacer
despus de que finalice el procedimiento, igual que ocurra con el argumento Response del procedimiento de evento Error anterior.

6. Escriba el siguiente cdigo Visual Basic en el procedimiento:


Private Sub IdTipoContacto~NotInList(NewDataAs String,
Response As Integer)
' Pregunta al usuario si quiere aadir un nuevo valor a la lista.
Dim strMensaje As String
Dim dbscontactos As Database
Dim rstTipos As Recordset
strMensaje = "Est seguro de que quiere agregar "'
Data & " ' a la lista de tipos de contactos?"

&

N-

If Confirmacin(strMensaje) Then
' Abre la tabla Tipos de contacto y aade el valor NewData.

Set dbscontactos = CurrentDb()


Set rstTipos = dbsContactos.OpenRecordset("Tipos de
contactos")
rstTipos.AddNew
rstTipos!TipoContacto = NewData
rstTipos-Update
' Vuelve a consultar la lista.
Response = acDataErrAdded
Else
' Muestra el error.
Response = acDataErrDisplay
End If
End Sub

Este procedimiento de evento utiliza el mismo tipo de cdigo que ya hemos


visto antes para formular una pregunta al usuario. No obstante, hay algunos
elementos nuevos muy importantes.
W

El procedimiento tiene tres instrucciones Dim que declaran variables que


utilizaremos ms tarde en el procedimiento. La primera declara una variable de cadena que utilizaremos para guardar el mensaje que mostraremos al usuario. Las otras dos son variables objeto -llamadas as porque
guardan objetos de base de datos, no slo valores- que utilizaremos para
aadir un registro a la tabla Tipos de contactos. La primera es dhslontactos, una variable de tipo base de datos que guardar informacin sobre la base de datos; la segunda es rstEpos, una variable de tipo recordset (conjunto de registros) que representar a la tabla Tipos de contactos
cuando le aadamos registros.

La lnea que asigna el valor de la variable strMensaje concatena valores


de cadena mediante el operador ampersand (&). En este caso, la lnea de
cdigo combina el texto de nuestro mensaje con el valor de la variable
NewData, de forma que el mensaje incluir el nuevo valor en la pregunta que formule: "Est seguro de que desea agregar este valor a la lista de tipos de contactos?"
condicin de la instruccin If ...Then es en realidad una llamada a
nuestra propia funcin Confirmacin, que formular la pregunta al usuario y devolver Verdadero o Falso. Si la funcin Corlfirmacin devuelve
Verdadero, significa que el usuario ha seleccionado Aceptar en el cuadro
de mensaje y se ejecutar el primer bloque de cdigo.

i La

La clave de este procedimiento es el bloque de cdigo que se ejecuta si


el usuario pulsa Aceptar. Estas cinco lneas se conocen como cdigo objeto de acceso a datos (DAO, del ingls data access object), porque utilizan mtodos e instrucciones que pertenecen a la biblioteca de cdigo
DAO, que se utiliza cuando trabajamos directamente con bases de datos.
Por ejemplo, la primera lnea utiliza la instruccin Set para asignar un objeto a la variable dbscontactos - e n este caso le asigna el objeto base de
datos actual, devuelto por la funcin CurrentDb. Antes de poder trabajar
con datos en Visual Basic, tendremos que abrir una base de datos de esta
forma.
i

La siguiente lnea utiliza el mtodo OpenRecordset del nuevo objeto base


de datos para abrir la tabla Tipos de contactos. Para aadir o editar registros usando Visual Basic, necesitamos abrir un objeto recordset, bien una
tabla o una consulta. La instruccin Set asigna el objeto recordset a la variable rstTipos. Al igual que con otros mtodos, escribimos el mtodo
despus del objeto, separados por un punto.
La lnea siguiente utiliza el mtodo AddNew del recordset rstTipos para
aadir un registro al final de la tabla.

siguiente lnea asigna el valor del argumento NewData, que es el valor que el usuario quiere aadir a la lista, al campo Tipocontacto de la tabla. Para hacer referencia al valor de un campo en un recordset, colocaremos el nombre del recordset seguido del nombre del campo, separando
ambos nombres con un signo de exclamacin (!).

i La

Update para guardar el


cambio en el recordset, aadiendo el nuevo registro a la tabla Tipos de
contactos.

i La ltima lnea del cdigo D A 0 utiliza el mtodo

i Despus de

que nuestro procedimiento aada el registro a la tabla, la 1tima tarea ser indicarle a Access cmo debe proceder. Si asignamos al
argumento Response la constante acDataErrAdded, le indicamos a Access que hemos aadido el valor y que queremos volver a consultar el
cuadro de lista para que el nuevo valor aparezca en la lista.

La lnea que sigue a la palabra clave Else se ejecuta si la condicin es falsa, en cuyo caso asigna al argumento Response el valor acDataErrDisplay. Al hacerlo le indica a Access que no hemos aadido el nuevo valor
y que queremos que muestre el mensaje de error estndar y pida al usuario un valor de los que estn en la lista.

El procedimiento NotInList nos muestra un sencillo ejemplo de cdigo D A 0


para manipular una base de datos - e n lecciones posteriores, aprenderemos
tcnicas avanzadas para trabajar con bases de datos en Visual Basic. Pero de
momento este procedimiento nos resuelve la papeleta: aade un registro nuevo a la lista. Y quiz lo ms importante es que evita a los usuarios un desagradable mensaje de error cada vez que intenten escribir algo en este cuadro.
Nota Para que el cdigo funcione, el proyecto de Visual Basic en uso necesita un ajuste especial -denominado referencia- que indique que utiliza
DAO. La base de datos de prctica ya tiene establecido ese ajuste; sin embargo, si quiere utilizar cdigo D A 0 en sus bases de datos, tendr que indicrselo a Visual Basic utilizando la orden Referencias (men Herramientas).
Para ms informacin va el Captulo 12, Exploracin de objetos y colecciones.

Pruebe el procedimiento de evento NotlnList


Ver Microsoft
Access

1. Cambie a Access.

2. Pulse el botn Vista Formulario de la barra de herramientas.


3. Pulse el botn Pgina 2 en el pie del formulario.
i

Vista Formulario

4. Pulse el campo Tipo de contacto, escriba Vendedor y pulse INTRO.

Se activar el evento NotInList y nuestro procedimiento mostrar el cuadro de mensaje, preguntndonos si deseamos aadir la entrada a la lista.

5. Pulse Aceptar.
Nuestro cdigo abrir la tabla Tipos de contactos, aadir el nuevo registro y le indicar a Access que vuelva a consultar la lista para incluir el
nuevo valor.

6. Pulse la flecha junto al cuadro Tipo de contacto.


La lista incluir ahora el nuevo valor.
La posibilidad de aadir un registro a la lista, de forma transparente al usuario, es slo una de las posibles estrategias para responder al evento
NotinList; puede que necesitemos utilizar alguna otra, dependiendo de las
necesidades de nuestra aplicacin. Por ejemplo, si los registros mostrados
en un cuadro combinado son slo una parte de un ccnjunto de registros que
incluyen otros valores - q u i z una lista de nombres de contactos tomados
de otra tabla que incluye tambin direcciones y nmeros de telfono- no
podramos aadir registros automticamente. En casos como ste, nuestro
procedimiento de evento NotInList podra mostrar otro formulario en el que
los usuarios pudieran introducir el resto de la informacin de los contactos.

CREACIN DE RUTINAS PARA EL MANEJO DE ERRORES


Hasta este momento, hemos aprendido a responder a los errores producidos
por los usuarios al trabajar sobre un formulario, en particular cuando introducen datos no permitidos. La respuesta ante estos errores es sencilla, porque siempre que se producen activan eventos automticamente. Cuando programamos en Visual Basic, nos podemos encontrar con un tipo de errores
an ms importante: los que ocurren como resultado de acciones realizadas
por el cdigo, en lugar de ser provocados por el usuario. Algunos errores son
debidos al cdigo que hemos escrito; esos debemos corregirlos. Pero otros
no ocurren por culpa de nuestro cdigo, sino porque no podemos anticipar
todas las posibles condiciones que pueden presentarse durante su ejecucin.
Por ejemplo, supongamos que nuestro cdigo trabaja con una base de datos en
red y que, de pronto, la red se viene abajo. Obviamente, esto causar un error.

Por otra parte, imagine lo que ocurrir si nuestro cdigo realiza modificaciones en una base de datos, pero el usuario abre la base de datos utilizando la opcin de slo-lectura, con lo que los cambios no pueden realizarse. Estas condiciones imprevistas provocarn errores en tiempo de ejecucin y harn que la
aplicacin se detenga bruscamente, mostrando un mensaje que no significar
gran cosa para un usuario que no sepa nada sobre programacin.
Afortunadamente, Visual Basic proporciona un mecanismo con el que podemos responder a cualquier tipo de error producido durante la ejecucin del
cdigo. Es el denominado manejo de errores. El manejo de errores nos permite evitar interrupciones abruptas de nuestra aplicacin cuando se presentan situaciones imprevistas. Mediante el manejo de errores, podemos resolver los problemas que se presenten y dejar que contine el negocio o informar al usuario sobre el problema y retirarnos con una reverencia. En esta
seccin, aprenderemos a utilizar la instruccin On Error GoTo, junto con
otras instrucciones Visual Basic para responder a errores en tiempo de ejecucin.

Manejo de errores ocurridos cuando la aplicacin es de slo-lectura


Cuando probamos una aplicacin, conviene pensar en todas las posibles condiciones que pueden presentarse durante su ejecucin. Una situacin puede
ser que el usuario abra la base de datos de la aplicacin en modo slo-lectura. No es un caso habitual, pero en ciertos casos posible, por lo que nos interesa que la aplicacin sepa responder adecuadamente a esta eventualidad.
Afortunadamente, cuando el usuario abre una aplicacin en modo slo-lectura, Access le prohbe automticamente que cambie datos en los formularios -nosotros no tenemos que preocupamos de hacerlo. Slo tendremos
que ocupamos de que el propio cdigo no modifique ningn dato.
Pero, qu ocurre? En el Captulo 4 escribimos cdigo que asignaba valores
a los controles del formulario. Se trata del procedimiento Form-KeyDown,
que asigna a los campos ciudad, estado y pas los valores correspondientes
a Madrid cuando el usuario pulsa CTRL+I. Si los datos no pueden actualizarse -por ejemplo, si la base de datos es de slo-lectura- este cdigo provocar un error en tiempo de ejecucin.
Provoque un error de tiempo de ejecucin

Antes de escribir cdigo para manejar este error, veamos qu ocurre si no hacemos nada al respecto. En lugar de cerrar una base de datos y abrirla luego
en modo slo-lectura, simularemos esta situacin haciendo de slo-lectura
los datos del formulario Contactos. Para ello, estableceremos la propiedad
Tipo Recordset al valor Snapshot.

Vista Diseo

1. Pulse el botn Vista Diseo en la barra de herramientas.


2. Pulse la solapa Datos en la hoja de propiedades.
3. Pulse la propiedad Tipo Recordset y seleccione Archivo Snapshot en la
lista de valores.

Vista
Formulario

4. Pulse el botn Vista Formulario en la barra de herramientas.


5. Pulse CTRL+~.
Se producir un error -un
usuarios.

error que no nos gustara que vieran nuestros

(8OiOm9 en hempo dr
No se pucdr actualizar este Reco~dbet

Al igual que ocurre con los dems errores en tiempo de ejecucin, tendremos dos opciones: Depurar o Finalizar (tambin podemos solicitar
ayuda sobre el mensaje, pero an as tendremos que elegir una de las
otras dos opciones). Si pulsamos Depurar, Visual Basic mostrar el procedimiento que caus el error, resaltando la lnea de cdigo especfica
que lo produjo. Si pulsamos Finalizar, el procedimiento que provoc el
error se detendr.
Observe el nmero del cdigo de error que aparece en la parte superior
del cuadro de dilogo: -2147352567. Lo utilizaremos en nuestro cdigo
de manejo de error.

6. Pulse Depurar.

End I f

P r i v a c e Sub For~KcyDownlKeyCodeA 3 Inccger, S h i f c As I n c e g e r )


S1 51 Pulsa CTRLil se introducen valores de ledrid.

Ciudad
"Mdrid"
E~tadoOProv~nc~a
Peis = " ~ s p a i i a - ~
End Ir

Esta lnea de
cdigo es la que
caus el error,
porque los datos
del formulario son
de slo-lectura

La ventana Cdigo mostrar el procedimiento de evento Form-KeyDown que escribimos en el Captulo 4. (Vase pantalla anterior.)
Nota Cuando pulsamos el botn Depurar en un mensaje de error de tiempo de ejecucin, el procedimiento se detiene temporalmente, pero no finaliza. Es igual que si hubiramos colocado un punto de interrupcin en la instruccin que provoc el error -aunque en este caso no podemos seguir
ejecutando el resto del cdigo, a menos que solucionemos el error. Si queremos finalizar el procedimiento causante del error, en lugar de detenerlo y ver
su cdigo, pulsaremos el botn Finalizar en el cuadro de mensaje de error.

Aada cdigo de manejo de errores al procedimiento de evento

Con el fin de evitar que los usuarios vean un mensaje de error como ste
-especialmente uno que les permita meterse en el cdigc- aadiremos cdigo de manejo de errores al procedimiento. Pero antes debemos restablecer
el cdigo que dejamos ejecutndose cuando se produjo el error.

1. Pulse el botn Restablecer en la barra de herramientas.


2. Edite el procedimiento de evento KeyDown para dejarlo de esta forma:
Restablecer

Private Sub FornKeyDown(KeyCode As Integer, Shift As Integer)


' Si se pulsan las teclas CTRL+~ se introducen valores de Madrid.
On Error GoTo Err-FonyKeyDown

Const conErrNoActualizable = -2147352567


If KeyCode = 4 9 And Shift = 2 Then
Ciudad = "Madrid
EstadoOProvincia = "Madrid
Pas = "Espaa"
End If
Exit-Fom-KeyDown:
Exit Sub

'Se ha pulsado

m+i.

Err-FornKeyDown:
If Err.Number = conErrNoActualizable Then
MostrarMensaje "No se puede modificar el registro; datos de
slo lectura."
Else
MostrarMensaje Err.Description
End If
Resume Exit-Form-KeyDown
End Sub

Esto es lo que hace el cdigo:


i La

instruccin On Error GoTo indica que si se produce un error durante


la ejecucin del procedimiento, Visual Basic deber saltar a la lnea etiquetada como E-Form-KeyDown, en lugar de detener el cdigo y mostrar un mensaje de error.

i La instruccin Const declara una constante con el valor del cdigo de

error que vimos antes (-2147352567), correspondiente al error Recordset no actualizablen.


i La lnea Exit-Form-KeyDown es una etiqueta, un nombre seguido de

dos puntos que podemos utilizar para identificar una lnea de cdigo a la
que queremos que salte Visual Basic. La instruccin Exit Sub que aparece a continuacin asegura que si el procedimiento se ejecuta normalmente sin error, finalizar despus de ejecutar el cdigo principal, en
lugar de continuar con el cdigo de manejo de error que est a continuacin. Siempre debemos aadir una instruccin Exit Sub o Exit Function
antes del cdigo de manejo de error, para evitar que dicho cdigo se ejecute si no se ha producido un error.
i La etiqueta Er~Form-KeyDown abre la seccin de cdigo de manejo de

error y proporciona un lugar al que pueda saltar Visual Basic cuando se


produzca un error.
i La instruccin If ...Then de la lnea siguiente verifica si el error es el que

esperbamos. Utiliza la propiedad Number del objeto Err, que contiene


el nmero del ltimo error ocurrido en la aplicacin.
i Si el error est producido por datos de slo-lectura, la lnea siguiente

mostrar un mensaje personalizado utilizando el procedimiento MostrarMensaje que creamos en el Captulo 5. Si el error est producido por
cualquier otro motivo, la lnea debajo de la instruccin Else har que aparezca el mensaje de error estndar de Visual Basic, que podremos encontrar utilizando la propiedad Description del objeto Err.
i Por ltimo, la instruccin Resume le indica a Visual Basic que el cdigo

de manejo de error ha terminado y que queremos seguir con la ejecucin


del procedimiento en la lnea etiquetada como Exit-Form-KeyDown. Al
saltar a esta lnea, se ejecutar la instruccin Exit Sub y el procedimiento finalizar.
Ahora, si este procedimiento no puede asignar los valores en el formulario
por algn motivo, el usuario recibir un mensaje explicando el problema,
pero la aplicacin seguir funcionando, en lugar de interrumpirse bruscamente con un mensaje de error.

Ejecute el cdigo de manejo de error paso a paso

Para probar el nuevo cdigo de manejo de error, provocaremos de nuevo el


error. No obstante, antes de comenzar colocaremos un punto de interrupcin
en el procedimiento para poder seguir paso a paso su funcionamiento.

1. Coloque un punto de interrupcin en la sexta lnea del procedimiento


-la que asigna Madrid al campo Ciudad- pulsando en el margen gris
a la izquierda de la lnea.

B*
Ver Microsofi
Access

Ahora el procedimiento se detendr en dicha lnea, independientemente


de que ocurra o no un error.

2. Cambie a Access.
3. Pulse CTRL+I.
Se ejecutar el procedimiento de evento KeyDown, llegar al punto de
interrupcin y volver a aparecer la ventana Cdigo. La siguiente instruccin que ejecutaremos intentar asignar un valor en el formulario.
Como los datos del formulario son de slo-lectura, podemos esperar que
se produzca un error en esta instruccin.

Paso a paso por


procedimientos

4. Pulse el botn Paso a paso por procedimientos.


En lugar de pasar a la siguiente instruccin, el indicador de instruccin
actual saltar hasta la lnea debajo de la etiqueta Err-Form-KeyDown
-la lnea especificada en la instruccin On Error GoTo al comienzo del
procedimiento.

EstadoOProvincia
Pals = "Espaa"

"Hadrid"

Ixit-PormKcyDown:

Err-Forro-KeyDown.
IL E r r . N W r
conEreNolctualirable Twl~
Mascrarensaje "No se puede modificar

nostzarnensaje Lrr.Deseripcion

Cuando se
produce el
error, Visual
Basic salta al
cdigo de
manejo de error

En efecto, el cdigo de manejo de error que hemos escrito interrumpe el


flujo normal del cdigo -podramos decir que el cdigo est en modo
manejo de error.

5. Pulse dos veces el botn Paso a paso por procedimientos.

Nuestro cdigo mostrar el mensaje de error.

6. Pulse Aceptar.
7. Pulse dos veces ms el botn Paso a paso por procedimientos.
Cuando finaliza la ejecucin del cdigo de manejo de error, la instruccin
Resume enva el indicador de instruccin actual a la lnea siguiente a la
etiqueta Exit-FormKeyDown: la lnea Exit Sub.
La instruccin Resume finaliza el cdigo de manejo de error.. .

r-?orm-Key~oun:
1i LT1.NWbei = conLrrNoActualirab1 Then
IioscrarMensajc "No se puede mdificar e l registro; datos de

...y salta hasta


esta lnea

Iiostrarnensaje Err.Dcscription

8. Pulse por ltima vez el botn Paso a paso por procedimientos.


9. Cierre Visual Basic.
Este recorrido por el cdigo de manejo de error nos ha ayudado a ver cmo
funciona esta tcnica. Para nuestros usuarios todo esto permanece oculto,
pero la diferencia importante es que ahora no vern el mensaje de error de
tiempo de ejecucin que apareca antes de que aadiramos el cdigo de
manejo de error.

Anticipacin a otros problemas que causan errores


--

La presencia de datos de slo-lectura es slo una de las muchas situaciones


imprevistas que se pueden presentar en nuestrq aplicacin -las posibilidades de error son ilimitadas. Y la mayora de nuestros procedimientos carecen

de cdigo de manejo de errores. Para que todo estuviera perfecto, deberamos incluir cdigo de manejo de errores en todos los procedimientos de
nuestra aplicacin, de forma que los usuarios nunca se encontraran con que
la aplicacin se detiene abruptamente con un mensaje de error. No obstante,
la mayora de los procedimientos que escribimos no realizan acciones susceptibles de provocar errores. Para ahorrar tiempo y esfuerzo, podemos concentramos en proporcionar cdigo de manejo de errores slo all donde sea
probable que puedan aparecer dichos errores.
Aunque no est completa, la siguiente lista muestra unas cuantas acciones
para las cuales deberemos proporcionar manejo de errores. Deberemos anticipamos a los errores que puedan aparecer siempre que el cdigo intente hacer algo de lo siguiente.
i Acceder

a cualquier archivo en disco, directa o indirectamente

i Ejecutar

consultas o modificar datos en una base de datos

i Asignar propiedades de objetos


i Realizar clculos matemticos

Tcnicas adicionales para el manejo de errores


Hemos visto un mtodo sencillo para manejar errores mediante la instruccin On Error GoTo. Pero hay ms tcnicas que podemos utilizar
con el mismo fin. Estas son algunas de ellas:

Uso de Resume en la instruccin que provoca el error. Si nuestro


cdigo es capaz de diagnosticar y corregir el problema que haya aparecido, nos interesa que siga ejecutndose a partir de la instruccin que
ha provocado el error. El uso de la instruccin Resume en una lnea independiente al final de nuestro cdigo de manejo de error, permitir
indicarle a Visual Basc que vuelva a intentar ejecutar la lnea que provoc el error.
Por ejemplo, si nuestro cdigo intenta acceder a un archivo en una unidad de disquete y se produce un error porque la unidad est vaca,
nuestro cdigo puede mostrar un mensaje que indique al usuario que
debe introducir un disco. Al final del cdigo de manejo de error, utilizaramos la instruccin Resume para volver a ejecutar la instruccin
que intent acceder a la unidad de disquete.

Saltar la instruccin que ha provocado el error. Si la instruccin


que ha causado el error no es crtica para nuestra aplicacin, podeinos
(Contina)

(Continuacin)

el error. En este tipo


nes, podemos incluso esperar que el
, por lo que la instruccin se ejecutar
error aparecer de for
nicamente cuando no provoque el error. Por ejemplo, supongamos
que tenemos un procedimiento que asigna un valor en un formulario
que puede estar o no abierto. Si el formulario est abierto, la lnea de
cdigo asignar el valor normalmente. Si no, la lnea provocar un error
-pero como no queremos asignar el valor si el formulario no est
abierto, nos bastar con saltar la instrucci6n utilizando Resume Next.

Indicar a Visual Basic que ignore temporalmente los errores. Si sabemos que un error tiene cierta probabilidad de aparecer en una instruccin concreta y no queremos detener la ejecucin del cdigo, podemos usar la instruccin On Error GoTo Next para suspender el
control sobre los errores. Esto har que Visual Basic salte las lneas
que provocan errores como si los errores no se hubieran producido.
Por ejemplo, si queremos asignar una propiedad de un control solamente si el control posee dicha propiedad, podremos usar la instruccin On Error GoTo Next antes de establecer la propiedad, de tal forma que el error no ocurrir al no existir la propiedad.
Si utilizamos esta estrategia, nos interesar comprobar inmediatamente el valor de E ~Number
K
para determinar qu error se ha producido,
si es que ha habido alguno. Adems, nos aseguraremos de volver a activar el manejo de errores incluyendo otra instruccin On Error GoTo,
e, si no lo hacemos, se pueden presentar otros errores que no deemos y que pueden provocar problemas a la aplicacin.
tcnica que utilicemos depender de los tipos de error a los que vayamos a anticipamos y de lo que queramos hacer con ellos. Si no sabe
cmo quiere manejar un error concreto, la mejor estrategia ser la que
hemos utilizado en este captulo: mostrar la descripcin del error en un
cuadro de mensaje y salir del procedimiento.

Cierre el formulario y salga de Access

1. Cierre el formulario Contactos y pulse S cuando Access le pregunte si


desea guardar los cambios.

2. En el men Archivo, pulse Salir.

Resumen del captulo


Para

Haga esto

Responder a un error que


aparece en un formulario

Escriba un procedimiento de evento para el


evento Error del formulario, utilizando el
argumento DataErr para determinar qu error
se ha producido.

Responder cuando un
usuario introduce en
un cuadro combinado
un valor que no est en
la lista

Escriba un procedimiento de evento para el


evento NotInList del control. Para aadir
automticamente el nuevo valor a la lista,
utilice cdigo D A 0 para aadir un nuevo
registro a la tabla de la que se obtiene la lista.

Especificar la accin que Asigne al argumento Response una de las


debe llevar a cabo Visual siguientes constantes: acDataErrContinue,
Basic despus de finalizar acDataErrDisplay o acDataErrAdded.
los procedimientos de
evento Error o NotInList
Especificar cdigo de
manejo de error que se
ejecute si ocurre un error
en nuestro cdigo

Incluya una instruccin On Error GoTo al


comienzo del procedimiento, seguida de una
etiqueta que indique dnde comienza el
cdigo de manejo de error.

Determinar cul ha sido


el ltimo error de tiempo
de ejecucin que ha
aparecido en nuestro
cdigo

Incluya Err.Number en el procedimiento.


Para obtener una descripcin del error,
utilice Err.Description.

Continuar ejecutando
un procedimiento
despus de que finalice
el cdigo de manejo de
error

Incluya la instruccin Resume al final del


cdigo de manejo de error.

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Uso de cuadros
combinados

cuadros combinados

Uso de cuadros de lista

cuadros de lista

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Uso de cdigo D A 0
DA0
(objeto de acceso a datos)
para trabajar directamente
con bases de datos

AVANCE DEL SIGUIENTE CAP~TULO


A lo largo de esta Parte 11 hemos aprendido tcnicas de programacin Visual
Basic para escribir, depurar y afinar nuestro cdigo, mientras trabajbamos
con la base de datos Contactos que se cre con el Asistente para bases de datos. Con estas tcnicas a nuestra disposicin, estamos preparados para crear
una aplicacin desde el principio. En la Parte 111 aprenderemos a unir todas
las piezas de la interfaz de usuario, trabajando con una aplicacin personalizada, en lugar de utilizar una creada por el asistente. En los Captulos 8 y 9
comenzaremos trabajando con nuestros propios cuadros de dilogo y formularios emergentes, dos potentes herramientas para interactuar con los usuarios de nuestras aplicaciones.

PARTE III
Creacin de
una aplicacin
personalizada

Obtencin de informacin
en un cuadro de dilogo
Objetivos del captulo
En este captulo aprender a:
Tiempo estimado:
45 minutos.

iCrear un

formulario independiente que fncione como cuadro de dilogo.

i Localizar registros en el recordset de un formulario.


iFiltrar
,

registros en un informe utilizando criterios seleccionados por el


usuario.

Se ha dado cuenta de que la mayora de los telfonos a los que llama ltimamente tienen algn tipo de contestador automtico? Bienvenido a nuestro centro de informacin automatizada. Si est utilizando un telfono de tonos, pulse 1. Ya parece extrao que nos conteste un ser humano, a menos
que cumplamos con todos los pasos necesarios: Para poder hablar con un
autntico ser humano, permanezca a la escucha, por favor... Si es usted
como yo, preferir sin duda hablar siempre con un representante de la antigua y fabulosa raza humana.
Estos sistemas ahorran dinero a las empresas que los utilizan y proporcionan
simplemente la informacin que el solicitante necesita. Pero por mucho que
nos acostumbremos a ellos, es evidente que son mucho menos flexibles que
la mayora de los seres humanos. Los sistemas de contestador automtico estn limitados -al menos por ahora- por el teclado de nuestro telfono.
Nunca ofrecen todas las opciones que podamos necesitar y nos obligan a
contestar una serie de preguntas antes de llegar a donde queremos ir.

De forma similar a los sistemas de contestador automtico, nuestras aplicaciones de bases de datos necesitan ayudar a los usuarios a obtener la informacin. Afortunadamente, la interfaz de nuestra computadora es mucho ms
flexible que un telfono, aunque en el fondo nos enfrentamos al mismo tipo
de problemas e inconvenientes. Necesitamos preguntar a los usuarios cuestiones acerca de lo que quieren hacer -establecer un dilogo con ellos- y
responder a lo que contesten. Como es lgico, las conversaciones sern infinitamente ms ricas que las que podemos generar pulsando las teclas O a 9
de un telfono.
Una de las herramientas de que diiponemos para conversar con los usuarios
es el cuadro de dilogo, un formulario que podemos mostrar en pantalla para
proporcionar informacin y plantear preguntas. En este captulo aprenderemos a comunicarnos con los usuarios de nuestras aplicaciones mediante la
creacin de cuadros de dilogo y el acceso a la informacin que nos proporcionan.

Inicie la leccin
Inicie Access y abra la base de datos Cap08 suscAptor de la carpeta de
prcticas.

CREACIN DE U N A APLICACIN

DESDE EL PRINCIPIO

En las Partes 1 y 11 de este libro hemos ido perfeccionando una base de datos
creada con el Asistente para bases de datos. Pero como futuros desarrolladores de Microsoft Access, puede que necesitemos bases de datos que el asistente no pueda crear. Nuestras aplicaciones pueden necesitar guardar un tipo
de datos que el asistente no gestione, o puede que queramos comunicarnos
con los usuarios de una forma particular y concreta. En esta Parte 111 crearemos por nuestra cuenta una interfaz de usuario para una aplicacin.
Cuando creamos una aplicacin desde el principio, necesitamos planear de
antemano las caractersticas que queremos que tenga. En primer lugar crearemos las tablas que guardarjn la informacin necesaria. Despus, crearemos los formularios, informes y dems objetos que conformen la interfaz de
nuestra aplicacin. Por ltimo, rela5onaremos entre s todos los objetos mediante el uso de cdigo Microsoft Visual Basic. Durante este proceso, utilizaremos distintos asistentes y generadores para ayudarnos -aunque no utilicemos el Asistente para bases de datos, an podemos utilizar otros
asistentes que nos ayudarn a construir nuestra aplicacin, como el Asistente para tablas y el Asistente para botones de comando.

Visualice las tablas de la base de datos Suscripcin .

Comenzando en este captulo, trabajaremos con una aplicacin que guarda


suscripciones a una revista. La base de datos de ejemplo Suscriptor tiene ya
dos tablas con datos de suscriptores y algunos de los formularios e informes
que necesitaremos -pero crearemos objetos adicionales y el cdigo necesario para que funcionen. No obstante, lo primero ser echar un vistazo a lo que
ya existe en la base de datos Suscriptor.

1. En la ventana Base de datos, pulse el acceso directo Tablas.


La base de datos Suscriptor contiene dos tablas, Suscriptores y Pagos. Si
hubiramos diseado esta base de datos partiendo de cero, habramos
creado estas dos tablas y seleccionado sus campos utilizando el Asistente para tablas o la vista Diseo de las tablas.
Relaciones

2. Pulse el botn Relaciones en la barra de herramientas.


Access mostrar la ventana Relaciones, en la que veremos los campos
de las tablas Suscriptores y Pagos, as como las relaciones entre ambas
tablas.
Como puede ver, la tabla Suscriptores incluye campos para informacin
de nombre y direccin -todo lo que se necesita para enviar correo a los
suscriptores. La tabla Pagos incluye campos para guardar cada pago recibido de cada suscriptor. Hay una relacin uno a muchos entre las tablas,
ya que por cada suscriptor puede haber muchos registros de pago relacionados.
Esta lnea indica que existe una relacin
entre ambas tablas basada en el campo
IDSuscriptor

3. Cierre la ventana Relaciones.


Estas dos tablas son todo lo que necesita esta base de datos. Pero para acometer una aplicacin ms complicada, podemos necesitar muchas tablas y
relacionarlas de formas diferentes.
Abra el formulario Suscriptores

La mayora de las aplicaciones tienen un formulario principal -el punto


desde el que los usuarios introducen y consultan datos la mayor parte del
tiempo. En la base de datos Suscriptor, el formulario principal es Suscriptores, que ya est creado para nosotros.

1. En la ventana Base de datos, pulse el acceso directo Formularios.

2. Pulse dos veces sobre el formulario Suscriptores.


EIombre

10 del suicriptur

Ti

Apellidos
Empresa
Direccin

Para crear un formulario como ste en sus propias aplicaciones, puede utilizar el Asistente para formularios. Despus de crear un formulario y permitir que el asistente organice los campos por nosotros, puede que nos interese abrir el formulario en modo Diseo y reorganizar los campos, cambiarlos
de tamao, o quiz aadir formato o imgenes para personalizar la presentacin. Despus, puede que nos interese aadir capacidades adicionales al
formulario; por ejemplo, en la siguiente seccin, aadiremos un til botn
de orden al formulario.

USO DE CUADROS DE DILOGO E N LAS APLICACIONES


.

Hasta ahora, la nica interaccin que hemos aprendido a tener con los usuarios son los cuadros de mensajes, que son un tipo sencillo de cuadros de dilogo. Hemos mostrado un mensaje y el usuario ha respondido pulsando un

botn. Pero todos los cuadros de mensaje tienen el mismo aspecto y estn limitados a uno, dos o tres botones. La creacin de un formulario cuadro de
dilogo personalizado nos permitir incluir cualquier combinacin de controles y botones. No obstante, lo que tienen en comn todos los cuadros de
dilogo es que aparecen encima de lo que est haciendo el usuario y esperan
una respuesta.
Los cuadros de dilogo son especialmente tiles para los siguientes propsitos.

Mostrar a los usuarios un cuadro de mensaje personalizado. Si queremos mostrar un mensaje con un aspecto personalizado o botones de rdenes
especiales - c o n texto distinto de Aceptar, Cancelar, S o No- no podemos
basarnos nicamente en la funcin MsgBox. Por ejemplo, nos puede interesar crear un cuadro de dilogo que ofrezca ms de cuatro acciones o que
muestre imgenes en sus botones.
Plantear preguntas antes de abrir un formulario o informe. Cuando proporcionamos un mtodo para que los usuarios abran un formulario o un informe, podemos permitirles que especifiquen opciones. Por ejemplo, podramos preguntar a los usuarios qu registros quieren ver o en qu orden desean que aparezcan.
Permitir a los usuarios especificar opciones generales para la aplicacin.
Un cuadro de dilogo puede tener muchos controles para introducir diversos
tipos de informacin en el mismo sitio. Por ejemplo, podramos permitir a
los usuarios que personalizasen la apariencia o el comportamiento de la aplicacin, mediante un cuadro de dilogo llamado Opciones encargado de recoger sus preferencias, que despus guardaramos en una tabla.
Obtencin de informacin adicional para una orden de men. Si nuestra aplicacin utiliza barras de men personalizadas, puede que nos interese
que alguna de las rdenes abra un cuadro de dilogo para obtener detalles relativos a su funcionamiento. Access, al igual que la mayora de las aplicaciones de Windows, incluye gran nmero de cuadros de dilogo accesibles
desde mens y barras de herramientas. En el Captulo 10 aprenderemos a
crear barras de mens y barras de herramientas personalizadas, que realizarn acciones como abrir un cuadro de dilogo.
Hay tantos usos para los cuadros de dilogo como aplicaciones distintas. En
este captulo, crearemos dos tipos de cuadros de dilogo comunes y aprenderemos todas las tcnicas bsicas para crear un cuadro de dilogo con un
propsito especfico.

CREACION DE U N CUADRO DE DIALOGO


PARA IR A UN REGISTRO ESPECIFICO
En esta seccin, crearemos un cuadro de dilogo que ayude a los usuarios a
saltar a un registro especfico en el formulario Suscriptores. Aadiremos un
cuadro de lista para mostrar los registros disponibles y escribiremos el cdigo para un nuevo botn que mostrar el registro seleccionado por el usuario.
Ya hemos escrito cdigo para ayudar al usuario a localizar un registro: en el
Captulo 3 creamos un cuadro combinado para hacerlo. No obstante, con un
cuadro de dilogo nos ahorramos utilizar esa herramienta, dejando as ms
espacio en el formulario -y ms flexibilidad para el usuario a la hora de seleccionar los registros que busca. El cuadro de dilogo aparecer cuando el
usuario pulse un botn del formulario Suscriptores.

Los usuarios podrn


seleccionar el reg~stro
que desean en la lista
del cuadro de d~logo

Cree el formulario de cuadro de dilogo DilogolrARegistro

Un cuadro de dilogo es un tipo especial de formulario: en lugar de mostrar


datos en sus controles, permite a los usuarios asignar los valores de los controles para que podamos obtener as la informacin requerida. Un formulario que no muestre datos se denomina formulario independiente, porque no
depende de ninguna tabla o consulta -su propiedad Origen del registro (Recordsource) est en blanco. crearemos estos formularios partiendo de cero
en la vista Diseo, ya que no hay asistentes que lo hagan.
Ventana Base
de datos

1. Pulse el botn Ventana Base de datos en la barra de herramientas.


2. Pulse el botn Nuevo.
Access mostrar el cuadro de dilogo Nuevo formulario. La vista Diseo
est seleccionada por omisin, por lo que no tendremos que seleccionar
el mtodo para el diseo del formulario. Como queremos que el formulario sea independiente, tampoco seleccionaremos tablas ni consultas.

3. Pulse Aceptar. .

Access crear un formulario vaco y lo mostrar en la vista Diseo. Como


podemos apreciar por las reglas que aparecen en esta vista, la seccin Detalle del nuevo formulario tiene u0 tamao de 10 por 3 centmetros.

4. Pulse la esquina inferior derecha de la seccin Detalle y arrstrela para


dejar su tamao en 12 por 5 centmetros.

Arrastre
el lado
derecho
de la
seccin
para
modificar
su tamao

5. Pulse el botn Guardar de la barra de herramientas.


6. Escriba DilogoIrARegistro y pulse Aceptar.
Guardar

Access guardar el formulario en la base de datos.


Utilice un asistente para crear el cuadro de lista Seleccionar suscriptor

Ahora ya est preparado para aadir controles al cuadro de dilogo y obtener


la entrada de los usuarios. El control principal del cuadro de dilogo ser un
-cuadro de lista en el que los usuarios seleccionarn el registro de un suscriptor. Para crear este cuadro utilizaremos el Asistente para cuadros de lista.

1. En el cuadro de herramientas, asegrese de que est seleccionada la herra-

i"lq
4+

Tn

Asistentes para
controles

mienta Asistentes para controles y pulse la herramienta Cuadro de lista.

2. Pulse cerca de la parte superior del formulario. (Vase la primera pantalla de la pgina siguiente.)
Se abrir el Asistente para cuadros de lista, preguntndonos cmo queremos que obtenga el cuadro de lista los valores que mostrar.

3. Seleccione la primera opcin, Quiero que el cuadro de lista busque los


Cuadro de lista

valores en una tabla o consulta, y pulse Siguiente.


El asistente nos preguntar de qu tabla queremos obtener los valores.

Pulse aqupara crear el cuadro de lista

4. Pulse Suscriptores y despus pulse Siguiente.


t

El asistente nos preguntar qu campos deseamos incluir en el cuadro de


lista.

5. Pulse dos veces el campo Apellidos para incluirlo en la lista de campos


seleccionados, repitiendo despus la operacin con los campos Nombre-,
Ciudad y Provincia (en este orden) y pulse Siguiente.
*Qu campos contienen Ins idnrss q i i ~decro incllis en BI c u a d r ~de
listai Lur carripiis jelecriunadui se runvcrtithn en cnlumrias en el cuadro

'
'

Aada estos
campos a la lista

El asistente mostrar la lista de suscriptores tal como aparecer en el cuadro de lista.

6. Modifique el tamao de las columnas de datos.


dos veces el extremo derecho del selector de ?a columna Nombre- para que se ajuste al tamao de sus datos y del nombre del campo.

iPulse

el borde derecho del selector de la columna Ciudad para hacerla ligeramente ms ancha que los datos que muestra.

iArrastre

extremo derecho del selector de la columna Provin-,


cia para que se ajuste al tamao de sus datos y del nombre del campo.

iPulse dos veces el

'que ancho desea qcie tengan las cniurnnar en RIriiadro de lista?


Paro alustar el .n,-to de uno robmns, arrastre w k,orde derecho harta el ancho que desee u
haga dobla cite en el hotde dermhu del tikd dt ilumna para obtener un aiuste perfecto.

tLl

3-j

Utilice los
selectores de
columna para
modificar la
anchura de las
mismas

7. Pulse Siguiente.
El asistente le preguntar qu etiqueta desea aplicar a su cuadro de lista.

8. Escriba Seleccione el suscriptor: y pulse Finalizar.

El asistente crear un cuadro de lista y lo colocar en su formulario. De


forma transparente, habr asignado propiedades al cuadro de lista para
que muestre los datos que hemos especificado. Tambin incluir automticamente el campo IDSuscriptor -la clave principal de la tabla Suscriptores- como campo oculto en nuestro cuadro de lista. Los usuarios
no vern este campo, pero el cuadro de lista se basar en l y utilizaremos
su valor para establecer el campo actual en el formulario Suscriptores.
Observe que el asistente ha asignado al cuadro de lista el nombre por
omisin ListaO. Este nombre lo utilizaremos en el cdigo cuando hagamos referencia al valor del cuadro de lista.

Coloque el cuadro de lista en el formulario del cuadro de dilogo

El cuadro de lista no est bien del todo. Antes de probarlo, le aplicaremos algunos ajustes.

1. Apunte a la esquina superior izquierda de la etiqueta del cuadro de lista


y arrstrela justo encima de la esquina superior izquierda del cuadro de
lista.

2. Pulse dos veces el lado derecho de la etiqueta para que se ajuste al tamao del texto.

3. Pulse y arrastre el cuadro de lista para acercarlo a la esquina superior izquierda del formulario.
4. Arrastre la esquina inferior derecha del cuadro de lista para ensancharlo
ligeramente (aproximadamente un centmetro) y hacer que sea casi tan
largo como la seccin Detalles del formulario.
El formulario quedar ms o menos como ste:

Para probar nuestro cuadro de lista, pasaremos a la vista Formulario.


Vista
'Formulario

5. Pulse el botn Vista Formulario de la barra de herramientas.


El cuadro de lista mostrar los registros de la tabla Suscriptores.

Modifique el cuadro de lista para ordenarlo por apellidos

Habr observado que los registros del formulario no estn ordenados alfabticamente -por desgracia, el Asistente para cuadros de lista no lo hace por nosotros. Para los usuarios resultara ms sencilla la seleccin si estuvieran ordenados alfxbticamente. Para ordenar los regLstros, deberemos modificar la
consulta Origen de lafila (RowSource) que el asistente ha creado para la lista.
Vista Diseo

1. Pulse el botn Vista Diseo en la barra de herramientas.


2. Si e! cuadro de lista no est seleccionado, plselo para seleccionarlo.
3. Si la hoja de propiedades no est abierta, pulse el botn Propiedades para
mostrarla.

Propiedades

4. Pulse la pestaa Datos de la hoja de propiedades.


5. Pulse la propiedad Origen de la fila y pulse despus el botn Generar.

>ii2nridel control

1ip0 de origen dc la Fila

Tabla Consulta

Pulse el botn Generar

?tigen de la tila
olbmna dependiente
valor pieduerrninado
F egle & vd~daiiori
Terto de udidaiiin

Access mostrar la consulta para el cuadro de lista en la ventana Generador de consultas.

6. Seleccione la fila Orden debajo del campo Apellidos, pulse la flecha desplegable y seleccione Ascendente.

Seleccione
orden
Ascendente
para el
campo
Apellidos

7. Seleccione la fila Orden debajo del campo Nombre-, pulse la flecha desplegable y seleccione Ascendente.
8. Cierre la ventana Generador de consultas y pulse S cuando Access le
pregunte si desea guardar los cambios en la propiedad OrigenDeLaFila
(Row Source).
Ahora los registros del cuadro de lista aparecern ordenados por apellidos y si estos coincidieran, por nombres. El cuadro de lista est preparado para funcionar.

9. Cierre la hoja de propiedades.

Aada un botn para cambiar registros en el formulario Suscriptores

Todava no podemos probar la lista -antes debemos aadir botones y cdigo Visual Basic al cuadro de dilogo para que funcione. El elemento ms importante a aadir es el botn que localiza realmente el registro en el formulario Suscriptores.
Asistentes para
controles

1. En el cuadro de herramientas, pulse la herramienta Asistentes para controles para deseleccionarla y despus pulse la herramienta Botn de comando.

2. Pulse junto a la parte superior del formulario, a la derecha del cuadro de

lista.

Botn de
comando
Pulse
aqupara
crear el

botn

Access crear el botn y le asignar un ttulo por omisin como Comando2.

3. Pulse el botn Propiedades de la barra de herramientas y despus selecPropiedades

cione la pestaa Todas.

4. Pulse la propiedad Nombre y escriba VerRegistro.

5. Pulse la propiedad Ttulo y escriba &Ver el registro.


6. Asigne a la propiedad Predeterminado el valor S.
Con el valor S en la propiedad Predeterminado, el botn ser seleccionado automticamente si el usuario pulsa INTRO en'el cuadro de dilogo.

7. Asigne a la propiedad Activado el valor No.


Este valor de la propiedad desactiva el botn, de forma que el usuario no
pueda pulsarlo cuando se abra el cuadro dilogo. Normalmente no solemos desactivar un botn, pero, en este caso, hay un buen motivo para hacerlo. La primera vez que abrimos un formulario que contiene un cuadro
de lista, el cuadro de lista no contiene ningn valor -no hay nada seleccionado. Hasta que el usuario no seleccione un suscnptor en la lista, no
nos interesa que el botn VerRegistro est disponible. Despus, aadiremos cdigo para activar el botn tan pronto como el usuario seleccione
algo en la lista.

8. Cierre la hoja de propiedades.


9. Con el botn derecho del ratn, pulse el botn VerRegistro y pulse Generar evento en el men abreviado.

10. Pulse dos veces Generador de cdigo.


Access abrir Visual Basic y mostrar el procedimiento de evento para el
evento Click del botn.

Private Sub VerRegistro-Click()

11. Aada el siguiente cdigo al procedimiento (excepto las lneas Sub y End
Sub, que ya estn escritas):
Private Sub VerRegistro-Click()
' Encuentra el registro seleccionado y cierra el cuadro de dilogo.
D i m rst As DAO.Recordset

' Almacena el conjunto de registros del formulario Suscriptores.


Set rst = Forms!Suscriptores.RecordsetClone
' Localiza el registro del suscriptor seleccionado.
rst.FindFirst "IDSuscriptor = " & Lista0
' Fija el valor de la propiedad Bookrnark para ir al registro.
Forms!Suscriptores.Bookmark = rst.Bookmark
' Cierra el cuadro de dilogo
DoCmd.Close acForm, "DilogoIrARegistro"
End Sub

Este cdigo cambia el registro actual del formulario Suscriptores por el


que ha seleccionado el usuario en el cuadro de lista. Estudiemos el cdigo detenidamente.
iLa

instruccin Dim crea una variable de tipo recordset D A 0 llamada


rst. Utilizaremos esta variable para representar el conjunto de registros
de suscriptor del formulario Suscriptores.

iLa segunda lnea de cdigo comienza con la instruccin Set. Esta lnea

contiene una expresin -Forms!Suscriptores. RecordsetClone- que


hace referencia a los registros mostrados en el formulario Suscriptores.
Todos los formularios tienen una propiedad RecordsetClone que podemos utilizar para obtener una copia del recordset del formulario. Como
ya hemos visto antes, para hacer referencia a un formulario distinto del
actual, escribimos su nombre precedido de la palabra clave Forms y de
un signo de exclamacin. Para hacer referencia a una propiedad, separamos el objeto y su propiedad con un punto.

Una variable de tipo recordset es una variable objeto -guarda un objeto, en lugar de un simple valor- lo que significa que debemos utilizar la instruccin Set para asignarle un objeto. En castellano, la lnea
completa dira algo como Crea una copia del conjunto de registros del
formulario Suscriptores y asgnala a la variable rst para que pueda utilizarla ms tarde.
Los objetos recordset tienen muchos mtodos que nos pueden ayudar a
trabajar con ellos. En el Captulo 7 aprendimos a aadir un registro a
un recordset mediante el mtodo AddNew. La tercera lnea de cdigo
utiliza un mtodo nuevo, FindFirst, para desplazarse a un registro es-

pecfico del recordset. Para utilizar un mtodo, escribimos la variable


objeto, un punto y su mtodo correspondiente, tal como rst.FindFirst.
El mtodo FindFirst toma un argumento que especifica los criterios
utilizados para localizar el registro. Como recordar, cuando creamos
el cuadro de lista ListaO, especificamos que su valor deba basarse en
el campo IDSuscriptor del suscriptor seleccionado: Queremos que el
argumento especifique que el valor que estarnos buscando en el recordset es el seleccionado en la lista. El uso del operador ampersand
(&) permite que esta lnea combine la cadena IDSuscriptor = con el
valor del cuadro de lista.
Una vez colocado todo junto, podra leerse como En el recordset
guardado en la variable rst, localiza el primer registro cuyo campo
IDSuscriptor contenga el mismo valor que el cuadro de lista ListaO.
iNormalmente, nuestro siguiente paso

sera comprobar si Access ha encontrado el registro que estamos buscando. Sin embargo, en este caso
sabemos que el registro est ah, porque el cuadro de lista contiene los
mismos registros que el formulario Suscriptores. Por tanto, el registro
actual del recordset rst ser el del usuario seleccionado en el cuadro de
lista.
Es importante tener en cuenta que la localizacin del registro no cambia automticamente el registro mostrado en el formulario Suscriptores. Esto se debe a que en realidad estamos trabajando con una copia
del recordset, que guardamos en la variable rst mediante la propiedad
RecordsetClone. Para desplazarnos realmente al registro que queremos, la siguiente lnea de cdigo establece la propiedad Bookmark del
formulario Suscriptores. Los formularios y los recordset comparten
esta propiedad, que es un valor especial que Access utiliza para seguir
la pista del registro actual - c o m o si el registro fuera la pgina de un
libro. Cuando dos recordset contienen los mismos registros, podemos
sincronizar uno con el otro asignando a su propiedad BookMark el
mismo valor que la del otro recordset.
An a riesgo de simplificar demasiado, podemos leer esta lnea como
En el conjunto de registros del formulario Suscriptores, desplzate al
mismo registro que sea el registro actual en el objeto recordset rst.

iAhora

que ya nos hemos desplazado al registro especificado por el


usuario, el trabajo del cuadro de diiugo ha terminado. La lnea siguiente de cdigo utiliza el mtodo Close del objeto DoCmd para cerrar el cuadro de dilogo. Los argumentos del mtodo Close especifican el objeto que debe cerrarse. La constante predefinida acForm nos
permite indicarle a Access que el objeto a cerrar es un formulario; con
el segundo argumento, especificamos el nombre del formulario a cerrar, DilogoIrA Registro.

Aada cdigo que active el botn VerRegistro

Como recordar, nos hemos asegurado de que el botn VerRegistro estuviera desactivado por omisin, porque al aparecer el formulario no hay ningn
registro seleccionado en la lista. Tan pronto como el usuario seleccione un
valor en el cuadro de lista, debemos activar el botn. Para hacerlo podemos
responder al evento AfterUpdate del cuadro de lista, que se activar cada vez
que el usuario cambie el valor del cuadro de lista.

1. Vuelva a Access.
2. En el formulario DilogolrARegistro, pulse el control cuadro de lista
Ver Microsofi
Access

para seleccionarlo.

3. Pulse el botn Propiedades de la barra de herramientas y despus pulse


la pestaa Eventos de la hoja de propiedades.

Propiedades

4. Pulse la propiedad Despus de actualizar (AfterUpdate) y pulse el botn


Generar.
-ornato

~ $ t o s Evenbi
Untes de artuakza~.

Al eriirar .
..
Al salir .
..,
Al reobi, el rrifoqlie .
1 a U1 perder el enfique

.
.

*otras

...

Qrspujs de actualiza

T&s
-"-"

'

A1 hacer dable clac

Pulse el botn Generar


,,._.

.--,e---

m--,-

5. Pulse dos veces Generador de cdigo.


Access cambiar a Visual Basic y mostrar el procedimiento de evento
ListaO-Afier Update.

6. Aada el siguiente cdigo al procedimiento:


P r i v a t e Sub ListaOAfterUpdate()
' Una vez que s e ha seleccionado un r e g i s t r o s e a c t i v a e l botn

VerRegistro.
VerRegistro.Enabled = True
End Sub

La lnea de cdigo de este procedimiento asigna el valor True a la propiedad Enabled (Activado) del botn VerRegistro -igual que si hubi-

ramos asignado a la propiedad el valor S en la hoja de propiedades- de


forma que el botn ya aparece activado y el usuario puede pulsarlo.
,

Aada cdigo que responda cuando el usuario pulse dos veces


una entrada en la lista

Para que nuestro cuadro de dilogo sea ms fcil de utilizar, existe otro evento al que podemos responder. Cuando el usuario pulse dos veces un valor en
la lista, deberemos responder como si se hubiera pulsado inmediatamente
despus el botn VerRegistro. De esta forma, un usuario podr evitar el paso
adicional de pulsar el botn despus de seleccionar un suscriptor.

1. En el cuadro Procedimiento de la ventana Cdigo, seleccione DblClick.

VerRegistro.Enahled = True

---

---

Dim rst As DAO.Recordset

' Almacena el conjiinto de registros del farmulario Suscrlt


Set rst = Forms'Suscriptores.RecordsetC10ne
' Localiza el reyistro del suscriptor seleccionado.
t.FindFirst

criptor =

"

&

Lista0

Visual Basic mostrar el procedimiento ListaO-DhlClick.

2. Aada el siguiente cdigo al procedimiento:


Private Sub ListaO-DblClick(Cance1 As Integer)
' Cuando el usuario pulsa dos veces con el ratn,
' es como si pulsase el botn VerRegistro.

If Not IsNull(Lista0) Then

End If

End Sub

La lnea central de este procedimiento le indica a Visual Basic que ejecute el procedimiento de evento VerRegistro-Click. Para ejecutar un procedimiento del mdulo actual basta con que escribamos el nombre del
procedimiento en una lnea independiente. Cuando Visual Basic encuentre esa lnea, saltar al procedimiento VerRegistro-Click y lo ejecutar
como si hubiramos pulsado realmente el botn VerRegistro.
La instruccin If ...Then de este procedimiento es una medida de seguridad. Comprueba que el cuadro de lista ListaO contenga un valor; si no es
as, el botn no estar activado, por lo que no querremos ejecutar el procedimiento. Normalmente, cuando el usuario pulsa dos veces el cuadro
de lista, esa accin asigna un valor al cuadro de lista. No obstante, si
pulsa dos veces la etiqueta del cuadro de lista, es posible que se active el
evento DblClick aunque el cuadro no contenga ningn valor. Si el control ListaO no tiene seleccionado un suscriptor, el valor de la expresin
Not IsNull(Lista0) ser Falso, por lo que el cdigo del procedimiento no
har nada.
Verifique su cdigo Visual Basic para detectar posibles errores

Ya hemos escrito cdigo para el cuadro de dilogo. Es una buena idea adoptar la costumbre de compilar el cdigo de vez en cuando -permitiendo a Visual Basic que detecte cualquier error y evitando as tener que interrumpir la
ejecucin del cdigo.

1. En el men Depuracin, seleccione Compilar Cap08 Suscriptor.

B
Ver Microsofi
Access

Si Visual Basic detecta algn error, nos lo comunicar -si no, no har
nada (ms que preparar el cdigo para poder ejecutarlo). Como es lgico, si aparece algn error deberemos corregirlo y volver a compilar.

2. Cambie a Access.

3. Cierre la hoja de propiedades.


4. Pulse el botn Guardar en la barra de herramientas.
Guardar

Aada un botn Cancelar que cierre el formulario

Nuestro cuadro de dilogo est prcticamente completo. No obstante, adems del botn que realiza una accin, como el botn VerRegistroque hemos
creado, todos los cuadros de dilogo deben incluir un botn Cancelar o Cerrar, por si el usuario cambia de opinin y decide no llevar a cabo la accin
que tena en mente. En este caso, necesitamos un botn para cerrar el formulario DilogoIrARegistro sin modificar nada. La forma ms sencilla de
hacerlo es utilizar el Asistente para botones de comando.

:T
-Asistentes para
controles

&A

1. En el cuadro de herramientas, pulse la herramienta Asistentes para controles para seleccionarla y despus pulse la herramienta Botn de comando.

2. Pulse en la parte derecha del formulario, justo debajo del borde izquierdo del botn VerRegistro,como se muestra en la siguiente ilustracin.

Botn de
comando

Pulse aqu para crear el


botn de orden

Se abrir el Asistente para botones de comando y nos preguntar qu accin queremos que lleve a cabo el botn.

3. Seleccione Operaciones con formularios en la lista Categoras, seleccione Cerrar formulario en la lista Acciones y pulse Siguiente.
El asistente nos preguntar si deseamos incluir texto o una imagen en el
botn.

4. Seleccione el texto Cerrar formulario del cuadro Texto, escriba Cancelar


para reemplazar el texto y pulse Siguiente.
El asistente nos pedir un nombre para el botn.

5. Escriba Cancelar y pulse Finalizar.


El asistente crear el botn Cancelar.

6. Arrastre la esquina inferior derecha del botn Cancelar para darle el mismo tamao que al botn VerRegistro.

Ahora que el botn est completo, nos falta el ltimo paso. En la mayora de cuadros de dilogo que utilizan botones Cancelar o Cerrar, se suele permitir a los usuarios que pulsen la tecla ESC en lugar del botn. Para
hacerlo posible, asignaremos a la propiedad Cancelar del botn el valor
S -identificando el botn ante Access como el botn Cancelar del formulario.

7. Pulse el botn Propiedades en la barra de herramientas y despus pulse


la pestaa Otras en la hoja de propiedades.
Propiedades

8. Asigne a la propiedad Cancelar el valor S.


El botn est terminado -y nosotros preparados para dar los toques
finales al cuadro de dilogo.
Establezca las propiedades del cuadro de dilogo

Aunque un cuadro de dilogo es un formulario como cualquier otro, nos interesa que en ciertos aspectos su comportamiento y su apariencia sean diferentes. En primer lugar, echaremos un vistazo al formulario tal como est
ahora, con sus propiedades por omisin. Despus, cambiaremos algunas propiedades para que funcione como queremos.
Vista
Formulario

1. Pulse el botn Vista Formulario en la barra de herramientas.


El cuadro de lista muestra los registros en ofden alfabtico y todo parece
estar bien. No obstante, como cualquier formulario de Access, ste tiene
varias caractersticas para recorrer un conjunto de registros -botones de
navegacin, barras de desplazamiento y un selector de registro- que los
cuadros de dilogo habituales no suelen tener.

Un cuadro de dilogo no debe tener estas


caractersticas de
navegacin

Beneito Rornan
Braganza Ealrnes
Bustos Garcia
Diaz Agudo
Fernandez Patio
Galan Perez
Galvez RUK
Garcia Lopez
Hernandez Lis
Hplr -<rr(-, El"<

:ulia
~rbard
PaMo
Beln
Esteban
Carlos
Carlos
kU15
Ricardo

Illdrid
Madrid
Bilbao
Valencia
Mostoles
Badalona
Alcorcn
Sevilla
Madrid

Vizcaya
Valencia
Madrid
Barcelona
Madrid
Sevilla
Madrid

ln~p

Madrirl

Cada una de estas caractersticas tiene su correspondiente propiedad en


el formulario, propiedades que nos encargaremos de eliminar o desactivar. La mayora de estas propiedades se establecen en la vista Formulario, de forma que se pueda comprobar rpidamente su efecto.

2. Para seleccionar el formulario, de forma que se puedan ver sus propiedades, pulse sobre la barra de seleccin de registros de la parte izquierda del
formulario (la hoja de propiedades mostrar Formulario en su barra de ttulo).

3. En la hoja de propiedades, pulse sobre la pestaa Formato.


4. Establezca las propiedades que se relacionan a continuacin con los valores que se indican.

Propiedad

Valor

Ttulo

Ir a registro

Barras de desplazamiento

Ninguna

Selectores de registro

No

Botones de desplazamiento

No

Centrado automtico

Estilo de los bordes

Dilogo

Estos valores harn que nuestro cuadro de dilogo tenga el aspecto habitual de los cuadros de dilogo de Windows -un borde fino, un ttulo normal y ninguna herramienta de desplazamiento o navegacin adicional:
Sin embargo, hay otras dos propiedades adicionales que deberemos asignar para que nuestro cuadro de dilogo funcione como debe. Para cambiar esas propiedades volveremos a la vista Diseo.

5.
6.
7.
8.

Pulse el botn Vista Diseo en la barra de herramientas.


En el men Edicin, elija Seleccionar formulario.
En la hoja de propiedades, pulse la pestaa Otras.
Asigne a la propiedad Emergente el valor S.
Este valor convierte al cuadro de dilogo en un formulario emergente:
aparecer encima del resto de ventanas, incluso de la del propio Access.

9. Asigne a la propiedad Moda1 el valor S.


Este valor har que nuestro cuadro de dilogo sea modal, lo que significa que los usuarios no podrn pulsar en otro sitio mientras el cuadro est
abierto. La mayora de los cuadros de dilogo son modales: pretendemos
que el usuario complete la accin - c o m o localizar un registro- y que
cierre el cuadro de dilogo antes de pasar a otra tarea.

10. Asigne a la propiedad Pemitir cambios en el diseo el valor Slo vista Diseo.
Este ajuste asegura que la hoja de propiedades ya .no se pueda ver cuando el cuadro de dilogo se vea en vista Formulario.
11. Cierre el formulario DilogolrARegistro y pulse S cuando Access le
pregunte si desea guardar los cambios.
Aada un botn al formulario Suscriptores para abrir el cuadro de dilogo

Ahora que nuestro cuadro de dilogo est completo, lo nico que nos queda
es conectarlo al formulario Suscriptores. Para hacerlo, aadiremos un botn
utilizando el Asistente para botones de comando.

1. Pase al formulario Suscriptores, que estar abierto detrs de la ventana


Base de datos.

2.
3.
4.
5.
Botn de
comando

Pulse el botn Vista Diseo en la barra de herramientas.


Desplcese hasta la seccin del pie del formulario.
En el cuadro de herramientas, pulse la herramienta Botn de comando.
Pulse en la parte izquierda del pie del formulario.
Se abrir el Asistente para botones de comando y nos preguntar qu accin queremos que lleve a cabo el botn.

Pulse aqu
para crear el
botn de
orden

6. Seleccione Operaciones con formularios en la lista Categoras, seleccione Abrir formulario en la lista Acciones y pulse Siguiente.
El asistente preguntar qu formulario queremos abrir. Seleccione el formulario DilogoIrARegistro.

7. Pulse Siguiente.
El asistente preguntar si queremos incluir texto o una imagen en el
botn.

8. Seleccione el texto Abrir formulario en el cuadro Texto, reemplcelo por


&Ir a registro y pulse Siguiente.
El asistente pedir un nombre para el botn.

9: Escriba IrARegistro y pulse Finalizar.


El asistente crear el botn y el correspondiente procedimiento de evento que abre automticamente nuestro cuadro de dilogo cuando se pulsa
el botn.
Guardar

10. Pulse el botn Guardar de la barra de herramientas.


Pruebe el nuevo cuadro de dilogo

Ya no esperamos ms -por fin estamos preparados para pulsar el botn y


probar el cuadro de dilogo.
Wsta
Formulario

1. Pulse el botn Vista Formulario en la barra de herramientas.

2. Pulse el botn Ir a registro.


Aparecer el cuadro de dilogo Ir a registro.

Garcia

Pablo

Como podr ver, el formulario no parece un formulario tpico de Access


-tiene un borde fino y ninguna herramienta de navegacin. Como el
formulario es modal, s i intentamos pulsar en un men de Access o en el
formulario Suscriptores que est detrs, la computadora emitir un pitido y no pasar nada. Las nicas acciones que pueden tomarse son desplazar o cerrar el cuadro de dilogo, o bien seleccionar un registro y pulsar un botn.
Observe tambin que el botn Ver el registro est desactivado, porque
an no hemos seleccionado ningn suscriptor en el cuadro de dilogo.

3. En el cuadro de lista Seleccione el suscriptor, pulse la lnea de Beln Daz


Agudo.
El botn Ver el registro estar ahora activado - c u a n d o pulsamos un valor en el cuadro de lista, se ejecut el procedimiento de evento AfterUpdate y el cdigo asign el valor S a la propiedad Enabled.

4. Pulse el botn Ver el registro.


Nuestro procedimiento de evento cambiar el registro activo en el recordset del formulario Suscriptores por el de Beln Daz Agudo y cerrar el cuadro de dilogo. Funciona!

5. Vuelva a pulsar el botn Ir a registro.


Esta vez, pruebe la caracterstica de doble pulsacin que hemos aadido.

6. En el cuadro de lista Seleccione el suscriptor, pulse dos veces la lnea de


Carlos Galn Prez.
El formulario Suscriptores mostrar ahora ese registro -nuestro procedimiento de evento DblClick para el cuadro de lista se ha encargado de
ello.
Por ltipo, debemos probar el botn Cancelar del cuadro de dilogo.

7. Pulse de nuevo el botn Ir a registro y despus pulse cualquier entrada del


cuadro de lista.

8. Pulse el botn Cancelar.

El formulario Suscriptores seguir mostrando el mismo registro - c o m o


caba esperar, el cuadro de dilogo no realiza ningn cambio si se pulsa
Cancelar.
,
9. Cierre el formulario Suscriptores.
Hemos podido observar que la creacin de un cdadro de dilogo personalizado requiere un cierto trabajo. (A medida que vaya practicando, ver que hay
formas ms sencillas de hacerlo.) Sin embargo, merece la pena, si consideramos lo acabadas que quedan las aplicaciones cuando utilizamos cuadros de
dilogo personalizados para atender a las necesidades de 19s usuarios.
Consejo Para ahorrar tiempo a la hora de crear un cuadro de dilogo para
nuestra aplicacin, podemos copiar o importar un cuadro de dilogo existente y modificarlo. Muchos cuadros de dilogo tienen controles y valores de
propiedades similares, lo que nos facilitar el trabajo -y resultar ms divertido que si empezamos de cero.

FILTRADO DE DATOS E N UN INFORME


Debido a la importancia de seleccionar un subconjunto de datos en una aplicacin de bases de datos, un uso habitual de los cuadros de dilogo consiste
en especificar criterios de filtrado de registros. Access proporciona una potente interfaz para el filtrado de registros en formularios, de forma que nuestras aplicaciones puedan utilizar en muchos casos las herramientas estndar
de filtrado. No obstante, hay otros casos en los que desearemos proporcionar
un mtodo personalizado para seleccionar registros. Este caso se hace especialmente patente cuando queremos seleccionar registros para incluirlos en
informes, ya que el filtrado de registros para informes es mucho menos directo que en el caso de los formularios. En esta seccin, aadiremos cdigo
a un cuadro de dilogo que ayudar a los usuarios a seleccionar los registros
que aparecern en un informe.
Como podr imaginar, el informe ms importante en una base de datos de envos por correo es el que imprime las etiquetas de correo. La base de datos
Suscriptor incluye dos informes, llamados EtiquetasPequeas y EtiquetasGrandes. Estos informes han sido creados utilizando el Asistente para Etiquetas, que nos ayuda a organizar e imprimir los nombres y las direcciones
sobre un papel estndar de etiquetas postales. No obstante, los usuarios no
siempre querrn imprimir etiquetas para todos los suscriptores. Crearemos
un cuadro de dilogo personalizado que les ayude a seleccionar el subconjunto de etiquetas que quieren crear.
1

Ocultacin de un cuadro de dilogo y acceso a sus controles

uando pulsamos el botn VerRegistro en el formulario Dilogolr


Registro, es el cdigo que est detrs del botn el que lleva a cabo
a accin utilizando la informacin que introducimos. Despus de
biar registros en el formulario Suscriptores, el mismo procedinto de evento se encarga de cenar el cuadro de dilogo.
Sin embargo, hay otra posible estrategia que podramos utilizar con
este cuadro de dilogo, que sera ms fcil de implementar para otros
cuadros de dilogo. En lugar de cenar un cuadro de dilogo cuando
terminamos de utilizarlo, podemos sencillamente ocultarlo, con lo que
parecer que est cerrado. Para hacerlo, asignaremos el valor Falso a
la propiedad Visible del cuadro de dilogo. La ventaja de esta estrategia es que podemos seguir utilizando los valores del cuadro de dilogo desde el cdigo de otros formularios. En este caso, por ejemplo, podramos ocultar el formulario DilogoIrARegistro -asignar el valor
Falso a su propiedad Visible- y despus aadir cdigo al formulario
Suscriptores para pasar al registro especificado. Desde dicho cdigo,
podramos hacer referencia a los valores del cuadro de lista del cuadro
del dilogo, aunque ste ya no estuviese a la vista.
La estrategia que hemos utilizado -realizar acciones desde el cdigo
del propio cuadro de dilogo- genera un cdigo ms fcil de seguir.
Por contra, en los casos en que queramos seguir haciendo referencia a
valores introducidos por el usuario despus de que el cuadro se haya
ido, sera ms lgico ocultar el formulario del cuadro de dilogo. No
obstante, si ocultamos un cuadro de dilogo y lo mantenemos abierto,
tendremos que cerrarlo ms adelante. Lo que es ms, necesitaremos
ser cuidadosos con el cdigo que asuma que el cuadro de dilogo est
abierto en segundo plano, a menos que nos aseguremos de que sigue
abierto.

Pruebe el informe EtiquetasPequeas

Antes de comenzar con el cuadro de dilogo, veamos qu hace el informe de


etiquetas de correo.

1. En la ventana Base de datos, pulse el acceso directo Informes.


2. Pulse dos veces el informe EtiquetasPequeas.
Access mostrar el informe en modo Vista preliminar, incluyendo una serie de nombres y direcciones de suscriptores.

Miguel Mamto Roldan


Espeaalidar en Diseo
Plfmso M11 33
Barmlom, 08005 Baroelona

Catios Galn Prcz


ComUoresEdtoriales
C o r d u a o n 48
Badalom. 08797 Baoelona

Rimrcb Hemardez Lis


Lis y Asoaados
Cutidores3
Madnd 28m0 Madnd

Barbilra Bragama Balmes


BioTec
Mayor 97
Madnd. 28CQ9 Madnd

3. Pulse en cualquier parte de la pgina para que se vea el informe ms pequeo.


Todos los 20 suscriptores y sus direcciones aparecen en el informe. Esto
podra ser til si quisisemos enviar algo a todos los suscriptores --que
en este caso no son muchos. Pero a medida que la base de datos vaya crecieiido y las etiquetas de correo ocupen varias pginas, los usuarios necesitarn un sistema para imprimir slo aquellas etiquetas apropiadas
para un envo en concreto.

4. Cierre la ventana del informe.


~ b r el
a formulario DilogoEtiquetas en la vista Diseo

La base de datos Suscriptor contiene un cuadro de dilogopara filtrar registros en el informe. Este formulario se cre utilizando muchos de los pasos
que seguimos para crear el formulario DilogoIrARegistro. Ahora le aadiremos cdigo Visual Basic para que funcione.

1. En la ventana Base de datos, pulse el acceso directo Formularios.

2. Pulse el formulario DilogoEtiquetas y despus pulse el botn Diseo.


Lo primero que observamos en el formulario son las dos pestaas que
aparecen en la parte superior con las leyendas Tipo de envo y Tipo
de etiqueta. Este es un tipo especial de control, denominado controlficha, que es posible que todava no haya utilizado. Los controles ficha se
utilizan en aquellos formularios donde deseemos tener diferentes grupos
de campos u opciones 4 s como si el formulario tuviese varias pginas
y los usuarios pasaran de una a otra pulsando las solapas que aparecen en
la parte superior.

"i

El formulario ut~lizaun control ficha para organizar las


opciones de impresin

En la ficha Tipo de envo se incluye un grupo de opciones que permite a


los usuarios seleccionar el grupo de suscriptores a los que enviar correo.
Existen tres opciones: la primera incluye a todos los suscriptores que estn al da en sus pagos, la segunda est dedicada a aquellos suscriptores
que deben realizar un pago antes de tres meses para seguir al da, y la ltima incluye a los suscriptores que han dejado de pagar recientemente y
por tanto dejan de recibir la revista. Utilizaremos este control para filtrar
los registros que se imprimirn en los informes de las etiquetas.

3. Pulse la ficha Tipo de etiqueta.


Pulse esta solapa para ver los controles adicionales

Fti.qurtas pequrn-. I ,. p~jrtila1


''
II

:Iiqurla; garide: l l por tila)

Esta solapa contiene un grupo de opciones que permite a los usuarios elegir etiquetas de correo pequeas o grandes. Utilizaremos este control
para determinar cul de los dos informes deberemos e~nplear,EtiquetasGrandes o EtiquetasPequeas.
Por ltimo, el formulario incluye tambin tres botones que, al estar fuera
del control ficha, siempre aparecern en la parte inferior del cuadro de
dilogo: uno para imprimir las etiquetas, otro para mostrar la vista previa
de las mismas y un tercero para cerrar el cuadro de dilogo sin hacer
nada.

Aada cdigo al botn ImprimirEtiquetas

El botn ImprimirEtiquetas an no tiene un procedimiento de evento Click


que realice su trabajo. Cuando un usuario pulse este botn, querremos que el
cdigo abra uno de los dos informes de etiquetas -lo que haremos sencillamente con el mtodo OpenReport del objeto DoCmd. Pero no nos interesa que
el informe muestre los registros de todos los suscriptores, como ocurri cuando lo abrimos desde la ventana Base de datos. En este caso, nuestro cdigo
deber interpretar la opcin seleccionada en el grupo de opciones y filtrar los
registros de suscriptores de acuerdo con la seleccin realizada por el usuario.

1. Con el botn derecho del ratn, pulse el botn ImprimirEtiquetas y despus pulse Generar evento en el men contextual.

2. Pulse dos veces Generador de cdigo.


Access cambiar a Visual Basic y mostrar el procedimiento de evento
ImprimirEtiquetas-Click.
e

3. Aada el siguiente cdigo al procedimiento:


Private Sub ImprimirEtiquetas-Click()
' Abre el informe de etiquetas con un filtro y luego cierra el
cuadro de dilogo.
Dim strFiltro As String, strNombreInfonne As String
' Determina el conjunto de suscriptores que quiere el usuario.

Select Case TipoEnvo


Case 1
' Revista - a todos los suscriptores.
strFiltro = "PagadoHasta >= Date()"
Case 2
' Suscripciones que acaban en 3 meses
strFiltro = "PagadoHasta >= Date() And PagadoHasta <
Date( ) + 90"
Case 3
' Suscripciones que caducaron en los ltimos 3 meses.
strFiltro = "PagadoHasta < Date() And PagadoHasta >
Date( ) - 90"
End Select

' Determina el tipo de etiquetas que quiere el usuario.


If TipoEtiqueta = 1 Then

strNombreInforme

"EtiquetasPequeas"

Else
strNombreInforme = "EtiquetasGrandesV
End If

End Sub

Este cdigo utiliza instrucciones ya familiares para nosotros, pero utiliza


tambin un par de tcnicas nuevas. As es como funciona:
iAl

final del procedimiento, especificamos el nombre del informe junto con los criterios de filtrado -una descripcin de los registros que
queremos que aparezcan en el informe- para que Access lo utilice
cuando abra el informe. La instruccin Dim del comienzo del procedimiento define dos variables de cadena, strNombreInforrne y strFiltro, en la que guardaremos el nombre y los criterios.

iTodas las cadenas de criterios que especificamos en este procedimien-

to hacen referencia a un campo de la tabla Suscriptores llamado PagadoHasta. Este campo guarda el ltimo mes en el que el suscriptor
debe recibir los envos (suponiendo que el suscriptor no efecte nuevos pagos). Cada vez que un suscriptor realiza un pago, el campo se
actualiza para reflejar la nueva fecha.
iTodas

las cadenas de criterios utilizan adems la funcin Date (Fecha), una funcin de Visual Basic que devuelve la fecha actual del reloj de la computadora. Comparando este valor con el del campo PagadoHasta, podemos determinar si cualquier suscriptor est al da
en sus pagos.
instruccin Select Case introduce el bloque Select Case...End Select que nos permite especificar tres instrucciones distintas a ejecutar,
dependiendo de la opcin seleccionada por el usuario en el grupo de
opciones. La instruccin utiliza la expresin TipoEnvo porque ese es
el nombre del control grupo de opciones en el formulario.

iLa

iEl

primer bloque Case, Case 1, se ejecutar si el usuario ha seleccionado la primera opcin del grupo (TipoEnvo es 1). Para esta opcin,
queremos incluir a todos los suscriptores que estn al da de pago
- e n otras palabras, aquellos suscriptores cuya fecha PagadoHasta
sea la misma o posterior a la fecha actual. La cadena de criterios es:
"PagadoHasta >= Date()"

el segundo bloque Case incluiremos a los suscriptorcs iliic iirt criten realizar un pago antes de tres meses si quieren seguir rcr.il~ic.ritloIu
revista. Para especificar esta condicin, realizaremos d o 5 coiiil).it it'io- .
nes, combinndolas con el operador And - d e esta forinii, ALI \
asegura de que ambas comparaciones son verdaderas para l o 5 ri.gi\li 0%
que incluye en el informe. La cadena de criterios incluye a 10% %uncriptores cuya fecha PagadoHasta sea la misma o posterior a Iii 1Cclitr
actual y cuya fecha PagadoHasta sea anterior a la de hoy en menos da
90 das:

iEn

"PagadoHasta >= Date() And PagadoHasta < Date()

+ 90"

Tal como demuestra esta expresin, la suma o resta de un valor entero a una expresin de fecha cambia dicha fecha en tantos das como
indique el valor entero.
iEn

el tercer bloque Case, incluiremos a aquellos suscriptores que han


dejado expirar su suscripcin -pero nicamente a los que lo hayan hecho en los tres ltimos meses. La cadena de criterios incluye a los suscriptores cuya fecha PagadoHasta sea anterior a la fecha actual (no estn al corriente de pago) y cuya fecha PagadoHasta se encuentre entre
los ltimos 90 das:
"PagadoHasta < Date() And PagadoHasta > Date()

- 90"

bloque If ...Then comprueba qu opcin ha elegido el usuario en el


grupo de opciones TipoEtiqueta --el que aparece en la segunda solapa del cuadro de dilogo- para determinar qu informe se debe imprimir. Si el usuario seleccion la opcin Etiquetas pequeas (el nmero 1 en el grupo de opciones) entonces la siguiente instruccin le
asigna a la variable strNombreInforme el valor Etiquetaspequeas. En
caso contrario, el usuario ha elegido necesariamente la opcin Etiquetas grandes, por lo que la instruccin que sigue a la palabra reservada
Else le asigna a la variable el valor EtiquetasGrandes.

iEl

iDespus

de que el cdigo establezca el valor de la variable strFiltro


con el criterio adecuado y el valor de la variable strNombreInforme
con el del informe correspondiente, es el momento de utilizar esta informacin para abrir el informe. La lnea siguiente a la instruccin End
If utiliza el mtodo OpenReport del objeto DoCmd, especificando que
la variable strNombrelnforme es el argumento con el nombre del informe.
El segundo argumento del mtodo OpenReport nos permite especificar si queremos abrir el informe e imprimirlo (utilizando la constante
acViewNorma1) o ver una vista preliminar del mismo (mediante la
constante acViewPreview). El cuarto argumento -incluimos dos comas para saltar el tercero- es el argumento WhereCondition, donde

especificaremos la cadena con los criterios que utilizar Access para


filtrar los registros del informe. Aqu es donde colocamos la variable
strFiltro, que contiene la cadena de filtro que hemos establecido en el
bloque Select...Case.
La ltima instruccin del procedimiento utiliza el mtodo Clase del
objeto DoCmd para cerrar el formulario del cuadro de dilogo.
Cuando pulsemos el botn ImprimirEtiquetas, el cdigo seleccionar
una cadena de filtro, abrir el informe para imprimir el conjunto de
etiquetas seleccionado por el usuario y cerrar el cuadro de dilogo.
Copie el cdigo al botn VerEtiquetas

La vista preliminar es una potente herramienta de Access que podemos utilizar en nuestras aplicaciones -y que los usuarios de Windows esperan encontrar. Siempre que presentemos a los usuarios la opcin de imprimir un informe, conviene permitirles que lo vean antes. Afortunadamente, el cdigo
que utilizamos para esta opcin es prcticamente idntico al del botn anterior. De hecho, bastar con que copiemos el cdigo del procedimiento de
evento del botn ImprimirEtiquetas y realicemos una modificacin mnima
sobre el mismo.

1. Seleccione todo el cdigo entre las instrucciones Sub y End Sub del procedimiento de evento ImprimirEtiquetas (pulse al comienzo de la segunda lnea de cdigo y arrastre hasta la penltima lnea).

2. Pulse CTRL+C.
3. En el cuadro Objeto (a la izquierda) de la ventana Cdigo, seleccione
VerEtiquetas.

Visual Basic mostrar el procedimiento de evento VerEtiquetas-Click.

4. Pulse CTRL+V.
5. Edite la lnea que contiene el mtodo OpenReport (al final del procedimiento) para utilizar la constante acViewPreview en lugar de la constante acViewNorma1:

El uso de esta constante en el argumento View del mtodo OpenReport le


indica a Access que muestre el informe en vista preliminar, en lugar de
imprimirlo directamente.
Ver Microsoft
Access

6. Vuelva a Access.
7. Cierre el formulario DilogoEtiquetas y pulse S cuando Access le pregunte si desea guardar los cambios.

Pruebe el cuadro de dilogo

Ahora que el cuadro de dilogo est terminado, podemos utilizarlo para abrir
el informe.

1. En la ventana Base de datos, pulse dos veces el formulario DilogoEtiquetas.


Aparecer el cuadro de dilogo, permitindonos seleccionar una opcin
para nuestras etiquetas de correo.

Tipo de envo
C

] Tipo de sticiirta ]

F:wi:la [todos los surcriptare; a r l u ~ l r r l

C Fadura jsiisci~pciorirrque caducan en 3 nicerl


i-

CIJ~CIIPCIO~I cancelada [sli~cripcionrrclue han caducado


en los iiltinios Ii r i ~ r r a i ]

2. Seleccione la segunda opcin, Factura.


3. Pulse la ficha Tipo de etiqueta.
4. Pulse la segunda opcin, Etiquetas grandes.
5. Pulse Vista previa.

Nuestro procedimiento se ejecutar y abrir la vista preliminar del informe EtiquetasGrandes.

6. Pulse en cualquier sitio del informe para verlo ms pequeo.


Nuestro cdigo ha abierto el informe utilizando la cadena de filtro PagadoHasta >= Date() And PagadoHasta < Date() + 90, lo que incluye a
unos cuantos suscriptores -aquellos cuyas suscripciones no hayan expirado todava, pero lo harn antes de tres meses. (Tenga en cuenta que dependiendo de la fecha en la que ejecute el procedimiento, los suscriptores que aparezcan en el informe sern distintos, y que puede ocurrir que
no aparezca ninguno. Para incluir suscriptores en el ejemplo, modifique
el campo PagadoHasta de la tabla para que entren en ese plazo de tres
meses posterior a la fecha actual.)

Las etiquetas de las


suscripciones que expiran
en menos de tres meses

7. Cierre el informe.
Si desea probar los otros filtros del informe, repita el Procedimiento y seleccione las opciones primera y tercera en el cuadro de dilogo.

Salga de Access
iEn el men Archivo,

seleccione Salir.

cdigo que hemos escrito utiliza una forma directa de filtrar los reistros de un informe: especifica el argumento WheveCondition del
todo OpenReport cuando abre el informe. No obstante, existen
tras formas de determinar los registros que aparecen en un informe.

asar el informe en una consulta. Si siempre vamos a mostrar el


ismo subconjunto de registros en un informe, o si queremos que apazcan en un orden especfico, crearemos una consulta que muestre los
gistros corno queremos y despus asignaremos la consulta a la proedad Origen del registro (RecordSource) del informe. De esta forma,
tendremos que escribir cdigo para filtrar los registros.

(Continuacin)
remos cambiar los registros que aparecen en un informe que ya est
abierto en vista preliminar, podemos utilizar cdigo de Visual Basic
para asignar una cadena de criterios a la propiedad Filter del informe.
Despus, asignaremos el valor True a la propiedad FilterOn para aplicar el filtro.
Establecer las propiedades OrderBy y OrderByOn del informe.
Si queremos cambiar la ordenacin de iin informe quc ya est abierto
en vista preliminar, podemos asignar a la propiedad OrderBy del informe el nombre del campo por el que queremos ordenar y despus
asignar el valor True a su propiedad OrderByOn para que se aplique la
ordenacin.
Todas estas tcnicas funcionan igual en informes y en formularios
- d e hecho, en el siguiente captulo aprenderemos a utilizar la propiedad Filter en formularios.

Resumen del captulo


Para

Haga esto

Crear un formulario de
cuadro de dilogo

Cree un formulario en blanco en la vista


Diseo, aada controles y despus asigne las
propiedades de las fichas Formato y Otras para
que el cuadro de dilogo tenga la apariencia y
el funcionamiento deseados. Aada botones
que realicen las tareas especficas.

Crear un cuadro de lista

Utilice el Asistente para cuadros de lista en la


vista Diseo del formulario, especificando los
campos que desea que aparezcan en el cuadro.

Pasar a un registro
especfico de un
formulario

Cree una copia del recordset del formulario


mediante la propiedad RecordsetClone y
despus desplcese al registro utilizando el
mtodo FindFirst. Por ltimo, asigne a la
propiedad Bookmark del formulario el valor
Bookmark de la copia del recordset.

Para

Haga esto

Abrir un informe para


imprimir registros
especficos

Utilice el mtodo OpenReport del objeto


DoCmd, especificando una cadena de filtro
para el argumento WhereCondition. En la
cadena de filtro, especifique los criterios para
uno o ms campos de la tabla o la consulta en
la que se base el informe.

Crear un formulario
que contenga fichas para
organizar los distintos
grupos de campos y
opciones

Aada un control ficha al formulario y


determine su tamao y propiedades, para
luego aadir los controles que desee incluir
en cada una de las solapas. Si desea que algn
control, como los botones de orden, aparezca
en todo momento, adalo al formulario y no
al control ficha.

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Ayuda

i~

Creacin de cuadros de
dilogo

cuadros de dilogo

Filtrado de registros en
informes y formularios

filtros

Uso de cdigo D A 0
para trabajar con un
recordset o localizar
registros en un recordset

DA0

Uso de marcadores
(Bookmark)

bookmark

AVANCE DEL SIGUIENTE CAPITULO


En este captulo hemos comenzado a aadir caractersticas a la base de datos
Suscriptor, una aplicacin personalizada creada desde el principio. En el Captulo 9 aprenderemos a enlazar los formularios de una aplicacin, ayudando a los usuarios a pasar de una tarea a otra y colocando en sus manos la
informacin que necesiten. A medida que avance la Parte 111 iremos completando la interfaz de usuario de la base de datos Suscriptor, aprendiendo tcnicas que podremos utilizar para crear nuestras propias aplicaciones de bases de datos.
.J

Exploracin
de la aplicacin

Objetivos del captulo

/,S

En este captulo aprender a:

i f

Tempo estimado:
35 minutos.
J~

iMostrar

registros en un formulario emergente.

iSincronizar los registros de un

formulario con los registros que el usuario

seleccione en otro formulario.


l

iReconsultar un

formulario para que muestre los datos actuales.

En una carrera de relevos, el rendimiento de cada componente del equipo es


importante, pero las transiciones son crticas. Cuando un corredor pasa el testigo a un compaero, se ganan o se pierden los segundos ms cruciales de la
carrera. Los equipos de relevos se entrenan intensivamente para que sus transiciones sean lo ms efectivas posible y organizan a sus componentes en las
posiciones que ms benefician al equipo.
No importa lo bien que funcionen nuestros formularios e informes independientemente, lo importante es el trabajo conjunto que hace de nuestra aplicacin una entidad potente y fcil de manejar. Igual que si estuviramos planeando una carrera de relevos, necesitamos estudiar el modo ms efectivo de
pasar de un objeto a otro. Con el fin de que las transiciones sean perfectas,
podemos utilizar cdigo de Microsoft Visual Basic para personalizar el
modo en que se abren los nuevos objetos y cmo trabajan con los existentes.
Desde luego, la estructura de una aplicacin es mucho ms flexible que la de
una carrera de relevos, por lo que el nmero de variables a tener en cuenta es

mayor -la flexibilidad de las aplicaciones conducidas por eventos permiten


a los usuarios seguir distintos caminos en la aplicacin y nos obligan a nosotros a anticiparnos a todos ellos.
En este captulo, aprenderemos tcnicas para pasar el control de un formulario o informe a otro - e s decir, pasar el testigo. Escribiremos procedimientos de evento que comprueben qu otros formularios estn abiertos, copien
valores y asignen propiedades de un formulario o un informe a otro y actualicen objetos en el momento apropiado. Si nos anticipamos a la manera de
correr de los usuarios podremos hacer que la aplicacin funcione sin interrupciones.
Inicie la leccin
i Inicie Access

y abra la base de datos Cap09 Suscriptor de la carpeta de

prcticas.

En una situacin ideal, todo lo que un usuario de computadoras tuviera que


hacer estara en un nico lugar - e n una aplicacin de bases de datos, por
ejemplo, sera ideal que todos los datos que necesitamos estuvieran en un
nico formulario. No obstante, en cualquier aplicacin mnimamente complicada, necesitamos varios objetos para manejar los distintos tipos de informacin utilizados y las diferentes tareas que el usuario debe acometer. Por
ejemplo, tendremos formularios para introducir informacin, formularios
para crear resmenes e incluso alguno ms para ayudar a los usuarios a completar una tarea especfica. La forma en la que organicemos estos objetos depender de cules sean las tareas y la informacin ms importante para los
usuarios. A la hora de planificar la aplicacin, daremos prioridad a estos elementos y decidiremos cmo podemos ayudar a cubrir las necesidades de
cada usuario.
La mayora de las bases de datos relacionales guardan la informacin en tablas independientes pero relacionadas entre s. Por ejemplo, en la base de datos Suscriptor, las tablas Suscriptores y Pagos contienen informacin relacionada. A la hora de presentar dicha informacin en la pantalla, podemos
utilizar tcnicas diferentes -algunas funcionan por s solas, mientras que
otras requieren la utilizacin de cdigo Visual Basic. A continuacin detallamos algunos de los mtodos que podemos utilizar para organizar los datos de
una aplicacin, as como los factores que deberemos tener en cuenta para
elegir alguno de ellos.

Creacin de subformularios dependientes de otros formularios para


mostrar registros relacionados. El control subformulario proporciona un
potente mtodo para mostrar registros relacionados en un solo formulario sin
necesidad de escribir cdigo. Por ejemplo, podramos utilizar un subformulario para mostrar la lista de pagos de un suscriptor -en el mismo formulario
en el que aparece la informacin del suscriptor. Para crear estos subformularios podemos utilizar el Asistente para subformularios o crear al mismo tiempo el formulario y su subformulario con el Asistente para formularios. No
obstante, en muchos casos no habr suficiente sitio en la pantalla para mostrar toda la informacin necesaria sobre el formulario principal al mismo
tiempo que se muestra la informacin relacionada que contiene el subformulario. Adems, los subformularios pueden ser menos intuitivos a la hora de introducir datos, especialmente cuando el espacio sea limitado. An as, la ventaja de que Access se encargue de gestionar automticamente las relaciones
entre formularios y subformularios puede tentarnos a utilizar este sistema
cuando queramos que toda la informacin relacionada aparezca a la vez.
Creacin de formularios e informes basados en consultas a mltiples tablas. El diseo de consultas que combinen informacin de dos o ms tablas
nos permite presentar fcilmente los datos de varias tablas en un nico formulario o informe. Siempre que sea posible, Access permitir a los usuarios
actualizar toda la informacin de la consulta, realizando los cambios oportunos en las tablas implicadas -pero debemos tener cuidado: algunos campos
de estas consultas con varias tablas no son actualizables, por lo que los usuarios pueden encontrar mensajes de error que no entendern cuando intenten
realizar modificaciones. Al igual que ocurre con los subformularios, no
,siempre tendremos suficiente sitio en un nico formulario para mostrar toda
la informacin necesaria. No obstante, para los formularios e informes en los
que resumimos informacin, las consultas resultan herramientas indispensables para combinar datos de varias tablas.
Creacin de un formulario independiente para cada tabla. La creacin
de formularios independientes para cada tabla presenta un modelo muy directo y sencillo a los usuarios: Aqu es donde ver y editar la informacin
sobre esto; para ver otros tipos de informacin, pulse estos botones. Este
modelo requiere que los usuarios pasen de una pantalla a otra con mayor frecuencia -por ejemplo, entre un formulario principal y un formulario emergente- pero nos permite mayor espacio y flexibilidad en pantalla para cada
formulario. Sin embargo, cuando tenemos varios formularios, los usuarios
esperarn que stos funcionen de forma inteligente. Por ejemplo, si elegimos
un valor en un formulario, no deberamos tener que seleccionarlo de nuevo
en otro formulario. Como podr ver, es importante enlazar los objetos mediante procedimientos de evento de Visual Basic.
Entrada y visualizacin de datos separadas. En algunos casos, nos interesar mostrar la misma informacin en ms de un formulario, cada uno de

los cuales se utilizar para una tarea diferente. Los formularios que permiten
introducir datos nuevos suelen tener controles y caractersticas diferentes a
los que se utilizan para buscar o resumir datos. Pero a medida que se incrementa el nmero de formularios en la interfaz, la aplicacin se vuelve ms
compleja. En algunos casos, limitaremos las acciones que los usuarios puedan llevar a cabo en un formulario, dejando algunos formularios o controles
en modo slo-lectura, con el fin de controlar el recorrido de los usuarios por
la aplicacin.
En este captulo nos centraremos en las dos ltimas tcnicas, conectando
formularios independientes de la base de datos Suscriptor para mostrar e
introducir datos relacionados. En este proceso, aprenderemos a escribir
cdigo Visual Basic para entrelazar objetos de forma personalizada. En sus
aplicaciones, podr utilizar una mezcla de todas estas tcnicas -utilizando
subformularios y consultas para combinar ciertos datos y enlazando grupos
de formularios cuando tenga ms sentido mantener la informacin separada
en distintos bloques.

VISUALIZACIN
DE REGISTROS RELACIONADOS
EN UN FORMULARIO EMERGENTE
En cualquier base de datos que contenga ms de una tabla, tendremos normalmente registros de una tabla que estn relacionados con registros de
otras tablas. Por ejemplo, en la base de datos Suscriptor, cada suscriptor
tiene uno o ms registros de pagos con la documentacin de los pagos que
ha ido realizando. Cuando los usuarios ven los datos en un formulario principal, como el formulario Suscriptores, suelen querer que los registros relacionados aparezcan en la pantalla. Una forma de mostrar en pantalla registros relacionados consiste en la utilizacin de un formulario emergente, un
tipo especial de formulario que siempre est encima del resto de ventanas.
En esta seccin, aadiremos un formulario emergente que muestre el historial de pagos del suscriptor actual (el suscriptor que est seleccionado en ese
momento en el formulario Suscriptores).
Abra el formulario HistoriaPagos
La base de datos incluye el formulario HistoriaPagos, que muestra registros
de pagos. Por omisin, el formulario muestra pagos de todos los suscriptores
juntos en una lista.

1. En la ventana Base de datos, pulse el acceso directo Formularios.

2. Pulse dos veces el formulario HistoriaPagos.

Este sencillo formulario tiene como origen de datos la tabla Pagos e incluye cuatro campos. El campo Total no es en realidad un campo de la tabla
Pagos -es un campo calculado, lo que significa que su propiedad Origen
del control (ControlSource) contiene una expresin. La expresin multiplica el valor de Arzualidades por el valor de PrecioAnual para mostrar el total.
Muestre el formulario HistoriaPagos como formulario emergente

Cuando los usuarios ven el formulario HistoriaPagos, desean mantenerlo a


la vista mientras trabajan en el formulario Suscriptores. Para hacerlo as,
asignaremos a su propiedad Emergente (Popup) el valor S. Asignaremos
tambin propiedades para que el formulario sea de slo-lectura, de forma que
los usuarios puedan ver los pagos pero no modificarlos.
Vista Diseo

1. Pulse el botn Vista Diseo de la barra de herramientas.


2. Si la hoja de propiedades no est visible, pulse el botn Propiedades en
la barra de herramientas.

Propiedades

3.
4.
5.
6.

Pulse la ficha Otras en la hoja de propiedades.


Asigne a la propiedad Emergente el valor S.
Pulse la ficha Datos en la hoja de propiedades.
Asigne el valor No a las propiedades Permitir ediciones (AllowEdits),
Permitir eliminacin (AllowDeletions) y Permitir agregar (AllowAdditions).

7. Cierre el formulario HistoriaPagos y pulse S cuando Access le pregunte si desea guardar los cambios.
Aada un botn al formulario Suscriptores que abra el formulario
HistoriaPagos

El formulario HistoriaPagos est diseado para trabajar junto al formulario


Suscriptores. Para permitir el acceso al formulario emergente, aadiremos
un botn que lo abra y que muestre los registros de pagos del suscriptor ac-

tual. Podemos utilizar el Asistente para botones de comando para crear el botn y su procedimiento de evento.

1. En la ventana Base de datos, seleccione el formulario Suscriptores y


pulse el botn Diseo.
El formulario se abrir en la vista Diseo. (Si la hoja de propiedades est
abierta, arrstrela hasta la esquina inferior derecha de la pantalla.)
Asistentes para
controles

2. Desplcese hasta el pie del formulario.


3. En el cuadro de herramientas, asegrese de que la herramienta Asisten,

tes para controles est seleccionada y pulse la herramienta Botn de comando.


Botn de
comando

4. Pulse el pie del formulario justo a la derecha del botn Ir a registro.

- Pulse aqu
para crear
el botn

El Asistente para botones de comando comenzar a trabajar, preguntndonos qu tarea queremos que realice el botn.

5. Seleccione Operaciones con formularios en la lista Categoras, seleccione Abrir formulario en la lista Acciones y pulse Siguiente.
El asistente preguntar qu formulario queremos abrir.

6. Seleccione HistoriaPagos y pulse Siguiente.


El asistente preguntar si queremos que el botn busque la informacin
especfica que se va a mostrar en el formulario. Esto nos permite filtrar
registros en el formulario emergente para mostrar nicamente los pagos
del suscriptor actual.

7. Seleccione Abrir el formulario y buscar los datos especficos que se van


a mostrar, despus pulse Siguiente.
El asistente preguntar qu campos del formulario Suscriptores contienen datos coincidentes en el formulario HistoriaPagos. Como las tablas

Suscriptores y Pagos estn relacionadas por el campo IDSuscriptor, ese


ser el campo que seleccionemos.

8. Seleccione IDSuscriptor en ambas listas, pulse el botn que se encuentra


entre las listas para crear un vnculo entre ellas y pulse Siguiente.

iQu rarnpos contienen dato; roincldantes que el bot6n pueda

Seleccione los
campos en ambas
listas.. .

. . . y pulse aqu
para enlazarlas

El asistente preguntar si queremos una imagen o texto en el botn.

9. Seleccione el texto Abrir formulario del cuadro Texto, sustityalo por


&Historial de pagos y pulse Siguiente.
El asistente nos pedir un nombre para el botn.

10. Escriba HistoriaPagos y pulse Finalizar.


El asistente crear el botn.
Pruebe el nuevo botn

Vista
Formulario

Ahora ya podemos utilizar el nuevo botn para abrir el formulario emergente.

1. Pulse el botn Vista Formulario en la barra de herramientas.

2. Pulse el botn Historial de pagos.


Se ejecutar el procedimiento de evento Click del botn y ste abrir el
formulario emergente HistoriaPagos.
El formulario slo mostrar tres registros: los pagos realizados por Luis
Garca Lpez, cuyo registro de suscriptor aparece en el formulario Suscriptores.

13/08/95

4 m13pta

4 000 pt3

Cambie los registros en el formulario Suscriptores

Cuando el formulario emergente HistoriaPagos est abierto, seguimos pudiendo trabajar con el formulario Suscriptores - e l formulario emergente no
es moda1 como un cuadro de dilogo. Veamos qu ocurre cuando cambiamos
de registro de suscriptor.

1. Pulse en cualquier parte del formulario Suscriptores. (Si es necesario,


podemos desplazar el formulario HistoriaPagos para poder,ver el nombre del suscriptor actual.)

2. Pulse varias veces la tecla AV PAG para cambiar de registro.


El formulario HistoriaPagos sigue mostrando los mismos tres registros,
independientemente del suscriptor que estemos viendo. Cuando el usuario cambia de registro en el formulario Suscriptores, desearamos que el
formulario HistoriaPagos mostrara los pagos del suscriptor actual -en
pocas palabras, queremos que el formulario emergente est sincronizado
con el formulario principal.

3. Cierre el formulario emergente HistoriaPagos.


Aada cdigo para mantener sincronizado el formulario emergente

Para mantener sincronizado el formulario emergente, necesitamos actualizar


los registros que muestra cada vez que el usuario cambie de registro en el formulario principal. Para hacerlo, aadiremos un procedimiento de evento al
formulario Suscriptores para aseguramos de que el formulario emergente
muestra los registros de pagos del suscriptor actual.
Vista Diseo

1. Pulse el botn Vista Diseo en la barra de herramientas.

2. En el men Edicin, pulse Seleccionar formulario.


3. En la hoja de propiedades, pulse la pestaa Eventos.
4. Pulse la propiedad Al activar registro (OnCurrent) y despus pulse el botn Generar.

Pulse el botn Generar


8

Antes de insettr . . . . . . . . . . . . . .
Liciplics de insertar . . . . . . . . . . . . .
Antes de ckualizar
Uespues de actualizar . . . . . . . . . . . &.,,,,--,,,-.en
En datos no guardadros
i
Al eliminar . . . . . . . . . . . . . . . .
--,e
",i

. . . . . . . . . . . . .i
.

"=

..........

................

5. Pulse dos veces sobre Generar cdigo.


Access abrir Visual Basic y mostrar el procedimiento de evento Current del formulario. El cdigo que aadiremos al procedimiento se ejecutar cada vez que un usuario pase de un registro a otro en el formulario Suscriptores.

6. Introduzca el siguiente cdigo en el procedimiento:


Private Sub Forn-Current()
' Sincroniza el formulario HistoriaPagos si est abierto.

If EstaAbierto("HistoriaPagos")Then
Forms!HistoriaPago$.Filter = "IDSuscriptor = "
Nz(IDSuscriptor, O )
End If

&

End Sub

La instruccin If ...Then de este cdigo utiliza una funcin especial llamada EstaAbierto para verificar si est abierto el formulario HistoriaPagos.
Este paso es importante, ya que a menos que el usuario haya abierto el formulario emergente, el intento de modificar los registros que muestra provocar un error. La funcin EstaAbierto devolver True si el formulario
est abierto, haciendo as que se ejecute la lnea del bloque If ...Then. La
funcin EstaAbierto est incluida en la base de datos de prcticas, en el
mdulo Miscelnea; para obtener ms informacin al respecto, consulte la
seccin La funcin EstaAbierto por dentro en la siguiente pgina.
Si el formulario HistoriaPagos est abierto, la siguiente lnea sincronizar el formulario. Para hacerlo, activa la propiedad Filter del formulario
emergente, mediante la expresin Forms!HistoriaPagos. Filter. Para asignar el valor a la propiedad, el cdigo combina el texto IDSuscriptor = con
el valor del campo IDSuscriptor del formulario Suscriptores. Por ejemplo,
si el identificador del suscriptor actual fuera el 4, asignara a la propiedad
Filter el valor IDSuscriptor = 4 y el men emergente slo mostrara los
registros de pagos de dicho suscriptor.

La lnea utiliza adems la funcin Nz (Nz quiere decir Null-zero), que


convierte en cero el valor de IDSuscriptor en el improbable caso de que
no tenga valor alguno (Null). Esto es necesario porque si el valor es Null
-lo que ocurrir si el usuario pasa al registro nuevo (vaco) en el formulario Suscriptores- el filtro tomar el valor IDSuscriptor = sin nada
a la derecha del signo igual, lo que producira un error. De esta forma, si
el valor de IDSuscriptor es Null, el filtro tomar el valor IDSuscriptor = O
y el men emergente no mostrar ningn registro (porque no existe el
suscriptor O).

.
La funcin EstaAbierfo por dentro
La base de datos Suscriptor incluye un mdulo estndar llamado Miscelnea, que contiene tres procedimientos generales que forman parte
de la aplicacin. Los dos primeros son los procedimientos que escribimos en el Captulo 5 para mostrar cuadros de mensa-lees El tercero es
la funcin EstaAbierto, que hemos utilizaao en el procedimiento de
evento Current del formulario Suscriptores, para comprobar si el forulario HistoriaPagos estaba abierto. Debido a su gran utilidad, nos
teresar incluirla en otras aplicaciones que creemos.
Este es Su cdigo, que podremos ver tambin si abrimos el mdulo
Miscelnea de la base de datos Suscriptor:
Public Function EstaAbierto (ByVal strNombreForm As String) As
evuelve True si se abre el formulario especificado en vista
Formulario.
Const conVistaDiseo = O
Const conEstadoObjCerrado

EstaAbierto = False
If SysM(acSysCmdGetObjectState, acForm, strNombreForm) o
conEstadoObjCerrado Then

If F o m (strNombreForm).CurrentView o conVistaDiseoEstaAbierto = True


End If
End Function

(contina)

(Continuacin)
argumento el nombre de un formulario y devuelve un valor de tipo
Boolean: True o False, dependiendo de si el formulario est abierto o
no. Al comienzo de la funcin, una lnea de cdigo asigna False al valor de retorno -asumiendo que el formulario no est abierto- y despus la funcin comprueba si lo debe cambiar a True.
El procedimiento utiliza instrucciones If.. .Then para comprobar dos
condiciones.

Est el formulario en la lista de objetos abiertos de Access? Access mantiene una lista interna de los objetos que estn abiertos. La
funcin SysCrnd (orden del sistema) es una funcin incorporada que
nos permite consultar informacin sobre el sistema y su estado. Al Ilamar a esta funcin podremos saber si un formulario est abierto.
Pasamos tres argumentos a la funcin SysCmd: una constante que especifica el tipo de informacin que queremos, en este caso el estado de
un objeto; el tipo de objeto en el que estamos interesados, en este caso
un formulario; y una cadena que contiene el nombre del objeto, en este
caso la variable de cadena pasada a la funcin EstaAbierto. La funcin
SysCmd devuelve un nmero que indica el estado del formulario, y el
cdigo compara dicho valor con una constante que indica que el objedel valor de objeto est cerrado. Si el valor devuelto es distinto (o)
to cerrado, el cdigo continuar; si no, la funcin Estdbierto devolver False.

Est el formulario en la vista Diseo? Si el formulario est en la


vista Diseo, querremos que la funcin EstaAbierto devuelva False,
porque si no el cdigo provocara un error. Los formularios tienen una
propiedad llamada CurrentView, que guarda un nmero que representa la vista actual del formulario. Este cdigo compara la vista actual
con la constante que representa la vista Diseo, y despus asigna True
al valor de retorno de la funcin si la propiedad no es igual al valor.
La expresin que hace referencia a la propiedad CurrentView utiliza
una tcnica que an no hemos visto. Hasta ahora, hemos utilizado el
operador signo de exclamacin para hacer referencia a un formulario
de la base de datos, como en Forms!Susc~iptores.Un mtodo alternativo para hacer referencia a un formulario -y el mtodo que debemos
utilizar cuando el nombre del formulario est contenido en una variable- es escribir Forms(Suscriptores). Para hacer referencia al for-

(Contina)

(Continuacin)

Esta funcin EstaAbierto viene incluida en la base de datos de prctica, por lo que no es necesario que nos preocupemos demasiado por su
funcionamiento interno -simplemente la utilizaremos cuando tengamos que comprobar si un formulario est abierto. Como ya hemos visto, la expresin EstaAbierto(NombreDeFormulario)nos proporciona la informacin que necesitamos. Para sacar partido de las tcnicas
aprendidas en este captulo, bastar con copiar o importar esta funcin
en cualquier aplicacin que necesite hacer referencia a un formulario
desde otro.

Aada cdigo que cierre automticamente el formulario emergente

El formulario emergente HistoriaPagos slo funciona como herramienta auxiliar para el formulario Suscriptores. Si el usuario cierra el formulario
Suscriptores mientras el men emergente sigue abierto, podremos cerrar
tambin el formulario emergente. Para hacerlo, aadiremos cdigo al procedimiento de evento Close del formulario Suscriptores.

1. En el cuadro Procedimiento que aparece en la parte superior de la ventana Cdigo (a la derecha), seleccione el evento Close.
La ventana Cdigo mostrar el procedimiento de evento Form-Close
vaco.

2. Introduzca el siguiente cdigo en el procedimiento:


Private Sub Form-Glose()
' Cierra el formulario emergente HistoriaPagos si est abierto.
If EstaAbierto("HistoriaPagos") Then
DoCmd.Close acForm, "HistoriaPagos"
End If
End Sub

Este procedimiento, igual que el cdigo que escribimos para sincronizar


los formularios, utiliza la funcin EstaAbierto para comprobar si el formulario HistoriaPagos est abierto. Si lo est, el mtodo Close del objeto DoCmd se encarga de cerrarlo.

3. Cambie a Access.
4. Pulse el botn Guardar de la barra de herramientas.
Ver Microsofi
Access

Pruebe el formulario sincronizado


Guardar

Vista Formulario

El formulario emergente deber funcionar ahora perfectamente, aunque


cambiemos de registro. Cuando cerremos el formulario Suscriptores, el
emergente se cerrar tambin.

1. Pulse el botn Vista Formulario en la barra de herramientas.


2. Pulse el botn Historial de pagos en el pie del formulario.
Aparecer el formulario emergente HistoriaPagos, mostrando los tres registros de pagos del suscriptor actual.

3. Pulse en cualquier parte del formulario Suscriptores y pulse varias veces


la tecla AV PAG para cambiar de registro.
Cada vez que cambiemos de registro, se ejecutar nuestro procedimiento de evento, asignando la propiedad Filter del formulario emergente y
haciendo que muestre un conjunto de pagos diferente -los relacionados
con el valor ZDSuscriptor del suscriptor actual. Como podr observar, la
mayora de los suscriptores han realizado tan slo uno o dos pagos.
Cuando cambie de suscriptor.. .

.. .el cdigo filtrar el


formulario emergente
para que muestre los
pagos del suscriptor
actual
4. Cierre el formulario Suscriptores.
Se ejecutar nuestro procedimiento de evento Close y cerrar automticamente el formulario emergente.

APERTURA DE U N FORMULARIO PARA AADIR


REGISTROS RELACIONADOS
Un men emergente resulta til para mostrar una cantidad de informacin
pequea y mantenerla sobre las dems ventanas. No obstante, la mayora de
los formularios que presentemos a los usuarios no sern emergentes, porque
nos interesa que los usuarios puedan pasar de un formulario a otro, trayendo
al frente al formulario actual. Siempre que brindemos al usuario la posibilidad de pasar de unos formularios a otros, conviene que tengamos en cuenta
las interacciones entre los formularios. Igual que en el caso del formulario
emergente HistoriaPagos, a menudo necesitaremos crear procedimientos de
evento para obtener los resultados deseados.
En esta seccin trabajaremos con un formulario diseado para introducir
nuevos pagos en la base de datos Suscriptor. El formulario se llama
IntroducirPago y ya est creado en la base de datos de prcticas, listo para
su uso. Es previsible que los usuarios pasen a este formulario desde el formulario HistoriaPagos por lo que aadiremos cdigo para que las interacciones entre ambos se gestionen adecuadamente. .

Aada un botn que abra el formulario IntroducirPago

Los usuarios querrn introducir pagos de un suscriptor mientras estn viendo datos en el formulario Suscriptores, por lo que nuestro primer paso ser
aadir otro botn al formulario Suscriptores. Igual que antes, utilizaremos el
Asistente para botones de comando.

1. En la ventana Base de datos, seleccione el formulario Suscriptores y


pulse el botn Diseo.
El formulario se abrir en la vista Diseo.
Botn de
comando

2. Desplcese hasta el pie del formulario.


3. En el cuadro de herramientas, pulse la herramienta Botn de comando.
4. Pulse el pie del formulario justo a la derecha del botn Historial de
pagos.
El Asistente para botones de comando comenzar a trabajar, preguntndonos qu tarea queremos que realice el botn.

Pulse aqu
para crear
el botn

5. Seleccione Operaciones con formularios en la lista Categoras, seleccione Abrir formulario en la lista Acciones y pulse Siguiente.
El asistente preguntar qu formulario queremos abrir.

6. Seleccione IntroducirPago y pulse Siguiente.


-

El asistente preguntar si queremos que el botn busque la informacin


especfica que se va a mostrar en el formulario. Esta vez tomaremos la
opcin por omisin, Abrir el formulario y mostrar todos los registros.

7. Pulse Siguiente otra vez.


El asistente preguntar si queremos una imagen o texto en el botn.

8. Seleccione el texto Abrir formulario del cuadro Texto, sustityalo por Introducir &pago y pulse Siguiente.
'

El asistente nos pedir un nombre para el botn.

9. Escriba IntroducirPago y pulse Finalizar.


El asistente crear el botn.

10. Pulse el botn Vista Formulario en la barra de herramientas.


Formulario

11. Pulse el botn Introducir pago.


Se ejecutar el procedimiento de evento y abrir el formulario IntroducirPago. (Vase pantalla de la pgina siguiente.)
El formulario IntroducirPago est diseado especialmente para introducir
nuevos pagos en la tabla Pagos. Por ejemplo, la propiedad Entrada de datos
(DataEntry) del formulario tiene el valor S, por lo que se abre sin que haya
ningn registro de pagos en la pantalla, listo para un pago nuevo. Sus propiedades Permitir ediciones (AllowEdits) y Permitir eliminacin (AllowDeletions) tienen el valor No, de forma que slo se pueden editar pagos nuevos
en el formulario.

- Contra reembnlx

C T jrjeia de crdito

Observe que el campo Suscriptor del formulario est en blanco, a pesar de


que hemos abierto el formulario desde la ficha de un suscriptor especfico en
el formulario Suscriptores. Sera preferible que el valor de dicho suscriptor
apareciera automticamente al abrir el formulario, para que los'usuarios no
tuvieran que seleccionarlo. En el siguiente procedimiento, aadiremos cdigo para que funcione de esta manera.

Caractersticas del formulario IntroducirPago


El formulario IntroducirPago incluye varias caractersticas ya irnplementadas en el archivo de prcticas. Aunque no estn directamente
relacionadas con el tema estudiado en este captulo, nos vendr bien
echar un vistazo al cdigo VisualBasic de dichas caractersticas para
ver cmo funcionan. Esto es lo que encontraremos en el formulario:
Tres botones de orden creados mediante el Asistente para botones de
comando: Guardar pago, Nuevo pago y Cerrar.
El cdigo que activa los cuadros de texto de las tarjetas de crdito
del grupo de opciones MtodoPago cuando el usuario elige la opcin Tarjeta de crdito. Para ver este cdigo, abra el procedimiento
de evento AfterUpdate del grupo de opciones MtodoPago.
El cdigo que se ejecuta cuando un usuario intenta guardar un registro, en respuesta al evento BeforeUpdate del formulario. La primera mitad de este procedimiento comprueba que el usuario haya
introducido un valor para el campo MtodoPago y cancela la actua-

(contina)

(Continuacin)

tad del procedimiento actualiza el campo PagadoHasta para aadir


el nmero de meses que el suscriptor ha pagado. El campo PagadoHasta se encuentra en realidad en la tabla Suscriptores, pero est incluido en la consulta de este formulario para facilitar su actualizacin. Este es el cdigo:
Private Sub Fom-BeforeUpdate(Cance1 As Integer)
Comprueba que se haya elegido un mtodo de pago, luego
' actualiza el campa PagadoHasta (de la tabla Suscriptores)
' para reflejar el tiempo adicional debido a este pago.
Dim bytMeses As Byte
If Mtodopago = Then
MostrarMensaje "Debe elegir un mtodo de pago."
Cancel = True
Exit Sub
End If
bytMeses = Anualidades * 12
If IsNull (PagadoHasta) Or PagadoHasta < Date Then
' Si es el primer pago, valor de PagadoHasta
desde hoy.
PagadoHasta = DateSerial(Year(Date), Month(Date) +
bytMeses, 1)
Else
Si no, aadir meses adicionales al valor de PagadoHasta.
PagadoHasta = DateSerial(Year(PagadoHasta), Month(Pagad0Hasta) + bytMedes, 1)
End If
End Sub

La segunda parte de este procedimiento utiliza una instrucc


If.. .Then para comprobar si el campo PagadoHasta ya tiene u
Si no es as o si la suscripcin ha expirado, aade meses adicio
valor PagadoHasta comenzando por la fecha de hoy. Si el ca
gadoifasta ya tiene valor y la suscripcin no ha expirado, a
meses adicionales al valor actual de PagadoHasta.

(contina)

(Continuacin)

los valores de fecha como nmeros, de forma que no podemos trabajar directamente con ellos, excepto para aadirles o restarles das. Pero
el uso de funciones de fecha como las utilizadas en este procedimiento nos permiten aadir meses en lugar de das, adems de facilitar la
asignacin del primer da del mes al valor Pagadofista. Las funciones Month (mes) y Year (ao), como sus nombres indican, devuelven
el ao y el mes de un valor de fecha dado; la funcin DateSerial nos
permite construir un valor de fecha a partir de su ao, mes y da. La segunda lnea que incluye estas funciones se podra leer como Crea una
fecha en la que el ao es el mismo de PagadoHasta, el mes es tantos
meses a partir del mes de PagadoHasta y el da es el primero de mes
-y asigna dicha fecha a PagadoHasta~.

Aada cdigo para asignar automticamente el suscriptor

Cuando un usuario pulsa el botn Introducir pago en el formulario Suscriptores, lo ms probable es que le interese aadir el pago al suscriptor que tiene delante en ese momento. Para facilitar esta entrada de datos, fijaremos el
valor por omisin del control IDSuscriptor en el formulario de entrada de
datos.
Vista Diseo

1. Pulse el botn Vista Diseo en la barra de herramientas.


2. Pulse la propiedad Al abrir (OnOpen) en la hoja de propiedades y pulse
el botn Generar.

3. Pulse dos veces Generador de cdigo.


Access cambiar a Visual Basic y mostrar el procedimiento de evento
Form-Open del formulario IntroducirPago. Siempre que un usuario abra
el formulario, se ejecutar el cdigo de este procedimiento -y permitir
inicializar controles del formulario como el cuadro combinado IDSuscriptor.

4. Aada el siguiente cdigo al procedimiento de evento:


Private Sub Form-Open(Cance1 As Integer)
' Toma por defecto el suscriptor actual del formulario
Suscriptores

If EstaAbierto("Suscriptores")Then
Idsuscriptor DefaultYalue = F o m !SuscriptoresI IDSuscriptor
End If

End Sub

Este cdigo comprueba primero si el formulario Suscriptores est abierto, gracias a la funcin EstaAbierto que vimos anteriormente. Los usuarios podran abrir el formulario IntroducirPago directamente, en cuyo
caso, el intento de tomar el suscriptor del formulario Suscriptores causara un error.
Si el formulario Suscriptores est abierto, la lnea central del cdigo asignar a la propiedad DefaultValue del cuadro combinado el valor del campo IDSuscriptor del formulario Suscriptores. Como ya hemos visto antes, podemos hacer referencia a un campo de otro formulario abierto
utilizando la palabra clave Forms. Esta lnea de cdigo se leera como
Asigna como valor por omisin para el campo IDSuscriptor (de este
formulario) el valor actual del campo IDSuscriptor del formulario Suscriptores.
Ver Microsofi
Access

@3

""vi+*"

Vista
Formulario

5. Cambie a Access.
6. Pulse el botn Vista Formulario de la barra de herramientas.
Se ejecutar nuestro procedimiento de evento, utilizando el suscriptor actual del formulario Suscriptores como valor por omisin para el campo.
Observe que aunque el cuadro combinado muestre el nombre del sus. criptor, nuestro cdigo lo asigna al campo IDSuscriptor correspondiente,
porque ese es el campo al que est vinculado el cuadro combinado.

,--

El suscriptor actual.. .

. ..se convierte en
el valor
predeterminado
para el nuevo pago

Aada cdigo para actualizar otros formularios abiertos despus


de que el usuario introduzca un pago

Cuando un usuario introduce un pago, el estado de dicho suscriptor cambia


-por ejemplo, el campo PagadoHasta cambia para reflejar el nuevo pago.
Si abrimos otro formulario para mostrar datos despus de que se haya producido el cambio, dicho formulario deber reflejar tambin los nuevos valores; pero los formularios que ya estn abiertos no muestran automticamente los datos nuevos. Si los formularios que deben reflejar los cambios estn
abiertos, deberemos actualizarlos. Para hacerlo podemos aadir cdigo al
procedimiento de evento AfterUpdate del formulario, que se ejecutar siempre que se guarde algn cambio en dicho formulario.
Ksta Diseo

1. Pulse el botn Vista Diseo en la barra de herramientas.


2. Pulse la propiedad Despus de actualizar (AfterUpdate) en la hoja de propiedades y pulse despus el botn Generar.
3. Pulse dos veces en Generador de cdigo.
Access cambiar a Visual Basic y mostrar el procedimiento de evento
Forrn-AfterUpdate para el formulario IntroducirPago. Siempre que un
usuario guarde un nuevo pago, se ejecutar este procedimiento.

4. Aada el siguiente cdigo al procedimiento de evento:


Private Sub Fom-AfterUpdateO
' Actualiza los otros formularios si estn abiertos.
If EstaAbierto("Suscriptores")Then
' Actualiza el formulario Suscriptores para
' mostrar el valor PagadoHasta
Forms!Suscriptores.Refresh
End If
If EstaAbierto ( "HistoriaPagos") Then
' Vuelve a consultar el cuadro emergente HistoriaPagos
' para mostrar el nuevo pago
Foms!HistoriaPagos.Requery
End If
End Sub

La primera instruccin If ...Then de este procedimiento comprueba si el


formulario Suscriptores est abierto. Si lo est, el cdigo utiliza el mtodo Refresh del formulario, que le indica a Access que actualice los datos
del formulario con los valores actuales de la tabla. Observe que el mtodo Refresh no hace que se ejecute de nuevo la onsulta, por lo que no se
aaden los nuevos registros, no se eliminan los registros borrados y el or-

i"

den de los registros permanece invariable. No es necesario que realicemos esfas operaciones ahora, porque la inclusin de un nuevo pago no
afecta al nmero de suscriptores de la base de datos.
La segunda parte del procedimiento comprueba si est abierto el men
emergente HistoriaPagos. Si lo est, el cdigo utiliza el mtodo Requery
del formulario, que le indica a Access que vuelva a consultar los registros
del formulario como si lo hubiramos cerrado y vuelto a abrir. A diferencia del refresco (mtodo Refresh), volver a consultar (mtodo Requery)
un formulario s que aade registros nuevos, lo que en este caso resulta
imprescindible para que el formulario emergente muestre el nuevo registro de pago. Observe, no obstante, que esta operacin produce a veces el
efecto lateral de cambiar el registro actual -cuando consultamos de
nuevo un formulario, el primer registro del recordset pasa a ser el registro actual. En un formulario emergente de informacin puntual como
ste, no tiene mayor importancia, ya que no importa cul sea el registro
actual.
Ver Microsofi
Access

5. Cambie a Access.
6. Cierre el formulario IntroducirPago y pulse S cuando Access le pregunte si desea guardar los cambios.
Pruebe las nuevas caractersticas

Si los formularios Suscriptores e HistoriaPagos estn abiertos, la introduccin de un nuevo pago deber reflejarse en ambos. Veamos si funciona.

1. En el formulario Suscriptores, pulse el botn Historial de pagos.


'

El cdigo de este botn abrir el formulario emergente HistoriaPagos,


mostrando los pagos del suscriptor actual. A continuacin, introduciremos un nuevo pago para este suscriptor.

2. Pulse el botn Introducir pago.


El cdigo de este botn abrir el formulario Introducir pago, preparado
para que aadamos un pago al suscriptor actual. Si el formulario Historial de pagos est tapando al nuevo formulario, retrelo hacia la esquina
inferior derecha de la pantalla.

3. En el grupo de opciones Mtodo de pago, seleccione Cheque.


Al cambiar un campo en este formulario se aade automticamente un registro a la tabla Pagos y aparece la fecha PagadoHasta del suscriptor actual. Podemos introducir valores en los dems campos, pero como el resto de los campos tienen valores por omisin, no es necesario modificar
ninguno de ellos (suponiendo que el pago de un ao siga siendo de 2.400
pesetas).

4. Pulse el botn Guardar pago.


Este botn har que se guarde el registro del pago. El campo PagadoHasta reflejar ahora un valor un ao posterior al que tena. Cuando se
guard el registro, nuestro procedimiento de evento AfterUpdate actualiz tambin los formularios Suscriptores e Historial de pagos. En el formulario emergente, podr ver el nuevo pago en la lista -actualizado por
nuestro cdigo.

Contra s~mbnlrn

T ,reta de credito

7
r-----

02/12/37

4000pta

4 Un0 pta

13:i!8198

4 000 ot 3

1 O00 ata

11

Cuando guardamos un pago, el procedimiento


de evento actualiza la consulta del formulario
emergente para que muestre el nuevo registro

5. Cierre el formulario Historial de pagos.


6. En el pie del formulario Introducir pago, pulse el botn Cerrar.

/L 41

ti~rnbre

ID del suicriplw

Apellidos
Enipre-a
Direccin
CiiidadfPr

1954 9O"rjii!:
r ~-

Telelono

!r ;registro

Historial iln pagos

Pagado hasta

</

Al refrescar
el formulario
nos
aseguramos
de que este
campo refleje
inmediatamente el
nuevo valor

El campo PagadoHasta del formulario Suscriptores reflejar la nueva fecha -actualizada por nuestro cdigo.
No es fcil sabek cundo debemos refrescar y cundo volver a consultar los
datos de un formulario. Cuando pruebe la aplicacin, observe si algn cambio realizado no se actualiza como debiera. Si ocurre esto, aada una lnea
de cdigo que utilice el mtodo Refresh o el mtodo Requery.
Consejo Tambin podemos utilizar el mtodo Requery en un cuadro combinado o un cuadro de lista para actualizar los registros de sus listas. Por
ejemplo, si aadimos un nuevo suscriptor al formulario Suscriptores, el cuadro combinado del formulario IntroducirPago no incluir automticamente
al nuevo suscriptor (hasta que no vuelva a abrirse el formulario). Para corregir este detalle, podemos volver a consultar la lista cada vez que se guarde
un registro en el formulario Suscriptores.

Cierre el formulario y salga de Access

1. Cierre el formulario Suscriptores y pulse S cuando Access le pregunte si


desea guardar los cambios.

2. En el men Archivo, pulse Salir.

Resumen del captulo


Para

Haga esto

Asigne el valor S a su propiedad Emergente


Hacer que un formulario
se mantenga todo el tiempo (Popup).
sobre los dems
Crear un botn que abra
otro formulario y muestre
nicamente los registros
relacionados con el
registro actual

Utilice el Asistente para botones de comando


y seleccione la opcin Abrir el formulario y
buscar los datos especficos que se van a
mostrar. Especifique los campos clave que
enlazan los datos de ambos formularios.

Para

Haga esto

Mantener un formulario
sincronizado para que
muestre los registros
relacionados cuando
cambiemos de registro
en el formulario principal

En el procedimiento de evento Current del


formulario principal, escriba cdigo para
establecer la propiedad Filter del otro
formulario. En la propiedad, concatene los
campos clave que desea que coincidan en
ambos formularios.

Comprobar si un
formulario est abierto
antes de utilizarlo desde
el cdigo

Llame a la funcin EstaAbierto, que se


encuentra en el mdulo Miscelnea de la
base de datos de prcticas.

Establecer
automticamente el valor
de .un campo en un
formulario diseado para
aadir registros

En el procedimiento de evento Open del


formulario, establezca la propiedad
DefaultValue del control.

Actualizar datos que estn En el procedimiento de evento AfterUpdate,


actualmente visibles en un utilice el mtodo Refresh sobre el formulario
formulario distinto,
que desee actualizar.
mostrando nuevos valores
pero sin aadir, eliminar o
reordenar registros
Actualizar todos los datos En el procedimiento de evento AfterUpdate,
que se muestran en un
utilice el mtodo Requery sobre el formulario
formulario distinto cuando que desee reorganizar.
el usuario aade o borra
un registro.

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Ayuda

Creacin de formularios
emergentes
Sincronizacin de
formularios para mostrar
datos relacionados

formularios emergentes
de formularios

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Uso de funciones de fecha mostrar fecha


Referencia a objetos y
sus propiedades

expresin de propiedad de objetos

Hasta ahora hemos utilizado los botones de orden para ayudar a los usuarios
a indicar lo que queran hacer. Pero al igual que la mayora de aplicaciones
de Windows, podemos permitir a nuestros usuarios que seleccionen elementos de mens y que pulsen botones en barras de herramientas para acceder a
las rdenes ms habituales de la aplicacin. En el siguiente captulo aprenderemos a personalizar los mens y barras de herramientas que se muestran
junto con los formularios de nuestra aplicacin.

Creacin de mens y barras


de herramientas personalizados
Objetivos del capitulo
En este captulo aprender a:
Tiempo estimado:
30 minutos.

iCrear

sus propios mens que ejecuten las rdenes de su aplicacin.

iCrear y

personalizar las barras de herramientas de sus aplicaciones.

de mens y una barra de herramientas con un formulario de la aplicacin.

iAsociar una barra

Cuando trabajamos en una cocina bien organizada, la preparacin de la comida puede resultar divertida. Los cacharros y utensilios necesarios estarn
siempre a mano pero nunca por el medio; los ingredientes estarn en los armarios bien accesibles y organizados y el espacio de trabajo estar limpio y
dispuesto para la accin. Por el contrario, si es usted como yo, no siempre se
tomar la molestia de planificar adecuadamente sus obras maestras culinarias -con lo que se pasar la mayor parte del tiempo buscando ingredientes
y cacharros donde cocinarlos, y sin sitio para hacerlo. La prxima vez,
dir, tendr la cocina bien organizada antes de empezar a cocinar...
En cierto sentido, el uso de una aplicacin de base de datos es similar al trabajo en una cocina. Resulta mucho ms sencillo trabajar si todas las herramientas necesarias estn a nuestro alcance -pero cuando las dimensiones de
la cocina son limitadas, lo ideal es que las herramientas permanezcan ocultas hasta el momento preciso de utilizarlas. Para preparar nuestra cocina de
datos a los usuarios, las rdenes y objetos de nuestra aplicacin debern estar organizados de la mejor manera posible.

<

En este captulo aprenderemos dos importantes elementos de una interfaz de


usuario bien organizada: los mens y las barras de herramientas. La ocultacin de las rdenes en mens y el uso de botones en barras de herramientas
compactas para acceder a formularios e informes, harn que nuestra aplicacin de suscripciones sea menos recargada, al tiempo que facilita el acceso
de los usuarios a cualquier utilidad que necesiten.

Inicie la leccin
i

Inicie Access y abra la base de datos Cap10 Suscriptor de la carpeta de


prcticas.

USO DE MENS Y BARRAS DE HERRAMIENTAS EN LA INTERFAZ


DE USUARIO
Hasta ahora hemos utilizado botones de orden en los formularios para permitir el acceso de los usuarios a las rdenes -por ejemplo, hemos creado
tres botones en el formulario Suscriptores para permitir que los usuarios pasen a un registro especfico, vean el historial de pagos o introduzcan nuevos
pagos. Aunque algunas acciones justifican por su importancia la presencia de
un botn en un formulario, la mayora de las rdenes que necesita un usuario pueden organizarse en los mens y barras de herramientas de la aplicacin, ocupando as menos espacio. Igual que ocurre en otras aplicaciones de
Microsoft Windows, nuestra aplicacin puede incluir tanto una orden de
men como un botn de barra de herramientas, realizando ambos la misma
accin, facilitando as el acceso a la misma. En esta captulo, crearemos mens y una barra de herramientas para el formulario Suscriptores, que reemplazarn a la estrategia de botones que hemos utilizado hasta ahora.
Podemos disear mens y barras de herramientas para su uso en un nico
formulario o para que funcionen en varios formularios. Podemos disear incluso un men o una barra de herramientas globales que estn disponibles
desde toda la aplicacin. No obstante, el hecho de que muchas de las rdenes se apliquen nicamente en lugares especficos de la aplicacin, har preferible el uso de mens y barras de herramientas diferentes para los distintos
formularios. Como es lgico, siempre podremos tener a la vista el men o la
barra de herramientas estndar de Access para algunos de los formularios de
la aplicacin que no necesiten rdenes personalizadas.
Cuando creamos mens o barras de herramientas, seguimos teniendo a nuestra disposicin las rdenes existentes en Access. En la mayora de los casos,
nos interesar poner a disposicin de los usuarios la mayora de las rdenes
estndar, sobre todo si ya saben utilizar Access o cualquier otra aplicacin de

Windows. Por otra parte, si queremos limitar las opciones de los usuarios en
nuestra aplicacin, crearemos mens y barras de herramientas que contengan
nicamente las rdenes imprescindibles para su uso. A la hora de planificar
nuestros mens y barras de herramientas, podemos observar otras aplicaciones de Windows para ver cmo estn estructuradas sus interfaces. Despus,
una vez planificada nuestra interfaz, utilizaremos las tcnicas que aprenderemos en este captulo para ponerla en funcionamiento.
Abra el formulario Suscriptores

1. En la ventana Base de datos, pulse el acceso directo Formularios.


2. Pulse dos veces el formulario Suscriptores.

1 /

Telfnno

f954 i E '3'3 1C
:

Pag.edo hasta

-1

Como puede observar, el nuevo formulario Suscriptores ya no tiene botones


de orden en su pie -los reemplazaremos por rdenes de men y botones en
la barra de herramientas.

CREACIN DE UNA BARRA DE MENS PERSONALIZADA


Los mens de Access -Archivo, Edicin, Ver, etc.- estn agrupados en un
objeto denominado barra de rnens. Debemos pensar que una barra de mens es un tipo de barra de herramientas (aunque con un aspecto y un comportamiento diferentes) porque ambas se crean y se editan utilizando las rnismas tcnicas. El propio Access las considera como el mismo tipo de objeto;
de hecho, tanto las barras de herramientas como las barras de mens se referencian en el cdigo Visual Basic bajo el nombre de barras de rdenes. No
nos sorprender entonces que la herramienta que se utiliza para crear mens
sea la orden Personalizar barras de herramientas. Esta orden nos permite aadir rdenes y personalizar el aspecto y el comportamiento de mens y barras
de herramientas.
1

Aunque es posible crear desde cero todos los mens de una barra de mens,
lo ms habitual es que coloquemos alguno de los mens de Access en nuestras propias barras de mens. Por otra parte, cuando no tiene sentido incluir
el conjunto de rdenes estndar de un men, podemos optar por crear un
men nuevo con nuestro propio conjunto de rdenes. Por ejemplo, en la barra de mens del formulario Suscriptores nos podra interesar incluir la mayor parte de los mens propios de Access, junto con un men especial que
incluyera las rdenes que ayuden a los usuarios a moverse por la aplicacin.
Para hacer que estas rdenes de men aparezcan junto con el formulario
Suscriptores, crearemos una nueva barra de mens personalizada, copiaremos algunos de los mens integrados y crearemos nuestros propios mens
con las rdenes personalizadas, para luego especificar que el formulario
Suscriptores deber utilizar esta nueva barra de mens personalizada.
Access la incorporar y mostrar nuestros mens adicionales siempre que
est activo el formulario Suscriptores.
Cree una barra de mens personalizada para el formulario Suscriptores

Antes de poder especificar una barra de mens personalizada para un formulario, es necesario crearla y aadirle los mens y las rdenes. En esta seccin crearemos una barra de mens personalizada que se llamar Barra de
men Suscriptores y le aadiremos unos cuantos mens integrados para que
su aspecto sea similar al de la barra de mens estndar que aparece en la vista Formulario. A continuacin, le aadiremos nuestra propia versin del
men Herramientas, as como un nuevo men diseado especialmente para
el formulario Suscriptores.

1. En el men Ver, apunte a Barras de herramientas y pulse Personalizar.


Aparecer el cuadro de dilogo Personalizar, donde se muestran las opciones de barras de herramientas disponibles.

2. Pulse la pestaa Barras de herramientas.


El cuadro de dilogo muestra todas las barras de herramientas y mens
disponibles para la aplicacin. En este punto, podramos empezar a modificar la barra de mens o la barra de herramientas predefinida que estuviesen visibles en este momento; sin embargo, los cambios afectaran
a todas las bases de datos. Como queremos que los cambios slo afecten
al formulario Suscriptores, empezaremos por crear una barra de mens
nueva.

3. Pulsebl botn Nueva.


Access le preguntar por el nombre de la barra de herramientas o la barra de mens personalizada.

4. En el cuadro Nombre de la barra de herramientas, escriba Barra de


men Suscriptores y pulse Aceptar.
Aproximadamente en el centro de la pantalla apkecer una nueva barra
de herramientas (o es una barra de mens?) vaca y la Barra de men
Suscriptores aparecer al final de la lista Barras de herramientas del cuadro de dilogo Personalizar.

5. Mueva la barra de mens vaca a la izquierda y hacia arriba para que no


aparezca encima del cuadro de dilogo Personalizar. (A medida que vayamos avanzado en este captulo, de vez en cuando tambin nos har falta apartar el cuadro de dilogo Personalizar de la barra de mens.)

Al principio la
barra de mens
personalizada no
contiene ningn
men

6. En el cuadro de dilogo Personalizar, pulse el botn Propiedades.


Aparece el cuadro de dilogo Propiedades de la barra de herramientas,
donde es posible fijar las propiedades que determinan el comportamiento de la barra de mens o la barra de herramientas que est seleccionada.

7. En el cuadro Tipo de barra de herramientas seleccione Barra de mens.

8. Pulse el botn Cerrar.


A partir de este momento tenemos dos barras de mens. Una vqk que hayamos aadido mens a la nueva barra nos a s e g u r a r y s dyque nunca
aparezcan las dos simultneamente.

Aada mens incorporados a la barra de mens personalizada

Ahora que ya tenemos una barra de mens, le aadiremos algunos de los mens integrados en Access. Para aadir rdenes o mens a una barra de mens
o una barra de herramientas se utiliza la ficha Comandos del cuadro de dilogo Personalizar.

1. En el cuadro de dilogo Personalizar, pulse la solapa Comandos.


En la lista Categoras se muestran las categoras de las rdenes de Access que es posible incluir en nuestras barras de mens y barras de herramientas. Al pulsar en una categora, como Archivo o Edicin, se mostrarn las rdenes disponibles en la lista Comandos que aparece a la
derecha.

--

Seleccione una
categora.. .

. ..para ver las rdenes que


podemos aadir a nuestras barras
de mens o barras de herramientas

Esta lista incluye categoras especficas para incluir mens integrados


completos o para crear rdenes de mens personalizados. Utilizaremos la
categora Mens integrados para aadir varios mens familiares.

2. En la Iista Categoras seleccione Mens integrados.


3. En la lista Comandos, pulse la entrada del men Archivo y arrstrela a la
barra de men personalizada.
. Access crear una copia del men integrado Archivo, con todas sus rdenes y submens. (Si lo desea, puede pulsar el nuevo men para verificarlo.)

Arrastre desde
aqu.. .

...hasta aqul;
creando as una
copia del men
Archivo

4. Arrastre el men Edicin desde la lista Comandos y colquelo a la derecha del nuevo men Archivo en la barra de mens personalizada.

5. Repita este procedimiento para los mens Ver, Registros, Ventana y el de


ayuda, arrastrndolos sucesivamente al lado derecho de la barra de mens personalizada. (No incluimos los mens Insertar, Formato y Herramientas porque los usuarios no necesitan los dos primeros y del tercero
crearemos nuestra propia versin.)
La barra de men debe tener este aspecto.

Aada su propia versin del men Herramientas

En el men Herramientas hay muchas rdenes destinadas exclusivamente a


los usuarios avanzados y los desarrolladores -no queremos que nuestros
usuarios anden enredando con ellas. En lugar de incluir el men integrado
Herramientas, crearemos nuestra propia versin donde slo copiaremos las
rdenes que deseemos poner a disposicin de los usuarios. De esta forma, el
men ser ms sencillo y no tendremos que preocuparnos de que los usuarios se metan en problemas.

1. En la lista Categoras pulse Nuevo men.

2. En la lista Comandos, pulse Nuevo men y arrastre el texto a la barra de


mens personalizada, colocndolo entre el men Registros y el men
Ventana.

Arrastre desde
aqu.. .

aqu

En la barra de mens personalizada aparecer un men con el nombre


Nuevo men.

3. Con el botn derecho del ratn pulse Nuevo men en la barra de men.
,
-

Aparecer $'men

contextual donde se muestran las opciones del men.

4. Seleccione IFl texto que aparece en el cuadro Nombre, escriba &Herramientas y p h ~ s eINTRO.
En el nombre de un men, igual que en el ttulo de un botn, se puede utilizar el carcter ampersand (&) para proporcionar una tecla aceleradora a
aquellos usuarios que prefieren utilizar el teclado. En el men aparece
ahora el nuevo nombre; sin embargo, si lo pulsamos veremos que todava no contiene ninguna orden. A continuacin copiaremos tres rdenes
del men integrado Herramientas. Para copiar una orden de un men o
una barra de herramientas basta con arrastrarla desde un men o una barra de herramientas a otro mientras se mantiene pulsada la tecla CTRL (si
no se mantiene pulsada esta tecla moveremos la orden en lugar de copiarla).

5. En la barra de mens integrada, que se encuentra en la parte superior de


la ventana de Access, pulse el men Herramientas.
En nuestro men personalizado slo queremos incluir tres de las rdenes
que aqu aparecen: Ortografa, Autocorreccin y Opciones.

6. Con la tecla CTRL pulsada, pulse la orden Ortografa y arrstrela sobre el


men Herramientas de la barra de mens personalizada, cuando se abra
este men (y con la tecla CTRL todava pulsada) arrstrela al espacio vaco y colquela all.
\

Arrastre la orden Ortografa desde el men


Herramientas estndar.. .

- ...hasta aqu.. .
- . . .y despus

hasta aqu

La orden Ortografa aparece ahora en el men.

7. Repita esta tcnica para copiar las rdenes Autocorreccin y Opciones


desde el men integrado Herramientas al men personalizado colocndolas debajo de la orden Ortografa.
Ahora nuestro men Herramientas personalizado i&luye slo las tres rdenes que necesitan los usuarios. El ltimo paso conkistir en aadir una
denes de los mens
lnea divisora encima de la orden Opciones
personalizados se pueden agrupar igual que
mens estndar.

8. Con el botn derecho del ratn pulse la orden Opciones que aparece en
la parte inferior del men personalizado y, a continuacin, pulse Iniciar
un grupo en el men contextual.
El men Herramientas personalizado ya est completo.

Nota Si hizo algn cambio sin darse cuenta en la barra de men integrada
-por ejemplo, elimin alguna de sus rdenes- es muy sencillo volver a
restaurar los mens estndar. En el cuadro de dilogo Personalizar, seleccione Barra de mens en la lista y pulse el botn Restablecer.

Aada otro men a la barra de mens personalizada

A continuacin aadiremos un nuevo men a la barra de men Suscriptores.


Puesto que este men contendr exclusivamente rdenes especficas de la
aplicacin Suscriptor, ser ste el nombre que le asignemos.

1. En la lista Categoras, pulse Nuevo men.


2. En la lista Comandos, pulse Nuevo men y, a continuacin, arrastre el
texto a su barra de mens personalizada, colocndolo entre los mens
Herramientas y Ventana.

1 3. Con el botn derecho del ratn, pulse Nuevo men en la barra de mens.

'

Aparece un men contextual donde se muestran las opciones disponibles


para el men.

4. Seleccione el texto que aparece en el recuadro Nombre, escriba &Suscriptor y, a continuacin, pulse INTRO.
El nuevo men ya est listo para que empecemos a aadirle nuestras
rdenes.
rdenes de men personalizadas para abrir los formularios
la aplicacin

Los usuarios estn interesados en realizar dos tareas fundamentales en la


aplicacin Suscriptor: localizar suscriptores e imprimir etiquetas de correo.
En el Captulo 8 creamos los formularios DilogoZrARegistro, que facilita a
los usuarios la localizacin de los registros en el formulario Suscriptores, y
DilogoEtiquetas, que ayuda a los usuarios a imprimir informes. A continuacin aadiremos rdenes de men personalizadas que se encarguen de
abrir estos formularios automticamente. En el cuadro de dilogo Personalizar hay una categora especial, denominada Todos los formularios, que nos
permite aadir este tipo de rdenes.
1. En el cuadro de dilogo Personalizar, pulse la solapa Comandos.

2. Seleccione Todos los formularios en la lista Categoras.


En la lista Comandos se mostrarn todos los formularios de la base de datos Suscriptor. Para aadir una orden a un men, basta con arrastrarla
desde la lista Comandos al men en cuestin.

3. En la lista Comandos, pulse la entrada DilogoZrARegistro, arrstrela sobre el men Suscriptor para hacer que ste se despliegue y, a continuacin, arrstrela sobre el men vaco.

La orden DilogoIrARegistro aparecer en el men.

La orden de men se encargarh de


abrir el formulario
DilogolrARegistro
/ ' ~ ~

A continuacin cambiaremos el texto que aparece en la orden para que no


desentone con las dems rdenes de men.

4. Con el botn derecho del ratn, pulse la orden DilogoIrARegistro.


5. Seleccione el texto que contiene el recuadro Nombre, escriba &Buscar
registro y, a continuacin, pulse INTRO.

...

Una vez ms, el ampersand que hemos incluido en el nombre de la orden


de men proporciona un acelerador de teclado. Por otra parte, es costumbre incluir puntos suspensivos despus de una orden de men que lo
que hace es abrir un cuadro de dilogo en lugar de directamente llevar a
cabo una accin.
A continuacin, copiaremos un icono adecuado - e l icono de los prismticos que aparece en la orden Buscar- para la nueva orden de men.
El icono aparece en un botn de la barra de herramientas actual.

6. Con el botn derecho del ratn, pulse el botn Buscar de la barra de hepulse Corramientas (es el sexto botn por la derecha) y, a
piar imagen del botn en el men contextual.

7. Pulse el men Suscriptor.


8. Con el botn derecho del ratn, pulse la orden de men Buscar registro
y, a continuacin, pulse Pegar imagen del botn en el men abreviado.
En dos sencillos pasos hemos conseguido robar para nuestra nueva orden
la imagen estndar -una tcnica muy cmoda que podemos aplicar a los
mens y las barras de herramientas que vayamos creando. Ahora estamos
preparados para incluir una segunda orden en el men.

9. En el cuadro de dilogo Personalizar, pulse la entrada DilogoEtiquetas


en la lista Comandos, arrstrela sobre el men Suscriptor para hacer que
ste se despliegue y, a continuacin, arrstrela hacia abajo en el men
para colocarla debajo de la otra orden.
En el men aparece una nueva orden, DilogoEtiquetas.

10. Con el botn derecho del ratn, pulse la nueva orden de men.
11. Seleccione el texto que aparece en el recuadro Nombre, escriba &Imprimir etiquetas y, a continuacin, pulse INTRO.

...

Para esta orden copiaremos el icono de una impresora que aparece en el


botn Imprimir de la barra de herramientas.

12. Con el botn derecho del ratn, pulse el botn Imprimir de la barra de herramientas (es el tercer botn por la izquierda) y, a continuacin, pulse
Copiar imagen del botn en el men abreviado.

13. Pulse el men Suscriptor.

14. Con el botn derecho del ratn, pulse la orden de men Imprimir etiquetas y, a continuacin, pulse Pegar imagen del botn en el men abreviado.
El nuevo men ya est completo.

Haga que el formulario Suscriptores utilice la barra de mens


personalizada

Una vez que hemos creado la barra de mens personalizada, podemos hacer
que sea sta la que se muestre cuando se active el formulario Suscriptores en
r de la barra de mens estndar, para lo cual se la asignaremos a la propiedad Barra de mens del formulario.

/4
1

1. Arrastre la barra de mens hacia la parte superior de la ventana de Access


- e n t r e la barra de mens estndar y la barra de herramientas- y nclela all.
(Anclar una barra de mens o una barra de herramientas consiste en pegarla a la parte superior o a un lateral de la pantalla, en lugar de dejarla
en algn lugar intermedio.)

Ancle la barra de mens personalizada debajo de la


barra de mens estndar

A continuacin nos aseguraremos de que Access slo muestre una barra


de mens en todo momento.

2. En el cuadro de dilogo Personalizar, pulse la pestaa Barras de herramientas.

3. En la lista Barras de herramientas elimine la marca de seleccin que aparece junto a la barra de men Suscriptores.

Desaparece la barra de mens personalizada y no volver a mostrarse a


menos que est activo el formulario Suscriptores. Sin embargo, todava
nos falta identificarla como la barra de mens del formulario Suscriptores.

&..
Vista Diseo

4. En el cuadro de dilogo Personalizar, pulse el botn Cerrar.

5. Pulse el botn Vista Diseo en la barra de herramientas.


6. Si la hoja de propiedades no est a la vista, pulse el botn Propiedades en
la barra de herramientas.

Propiedades

7. Pulse la pestaa Otras en la hoja de propiedades.

8. Asigne la barra de men Suscriptores a la propiedad Barra de mens.

. . . . . . . . . . . . . . . . . . . 12! ..
. . . . . . . . . . . . . . . . . . . . . . NO

ergente
da\,
lo
rra de rnens
Barra de herram~entas . ,
Men contextual
Barrade mens contextuales
impresin lser rapida , . . . . .
8rchrvu d~ Cryuda . . . . .
fd. del contextu da Ayuda
Ir~formacibnadicional
Tierie un rntidulo asociado
Permitir cambros en el dise

--,

...

........................
................

.......

.......
. . si
. . .
. . . . . . 11
.........
S

--S-mS--

--

_
I

Al asignar esta propiedad le indicamos a Access que siempre que est activo el formulario Suscriptores debe mostrar la barra de mens personalizada en lugar de la estndar.
Vista
Formulario

9. Pulse el botn Vista Formulario en la barra de herramientas.


Se muestra la barra de mens personalizada. Podemos diferenciarla de la
barra de mens estndar porque contiene el men Suscriptor.

Creacin de mens contextuales personalizados


Cuando pulsamos el botn derecho del ratn casi en cualquier parte de
Windows o de Access, aparece un men contextual con rdenes apropiadas para el contexto actual en el que estamos o para el lugar sobre
el que hemos pulsado. Por ejemplo, cuando pulsamos el botn derecho
del ratn en un campo de un formulario, aparece un men abreviado
con opciones para filtrar, copiar y pegar. Por omisin, estos mens
aparecen en nuestra aplicacin igual que cualquier otro men.
En la mayora de los casos, los mens contextuales predefinidos funcionan bien en nuestras aplicaciones. No obstante, podemos reemplazarlos por los nuestros particulares -utilizando pasos similares a los
de las barras de mens normales. Para reemplazar la barra de mens
contextuales de un formulario, crearemos una barra de mens personalizada asignndole a su propiedad Tipo el valor Emergente (en lugar
de Barra de mens o Barra de herramientas). A continuacin, asignaremos a la propiedad Barra de mens contextuales del formulario el
nombre de la barra de mens personalizada.
Tambin podemos especificar distintos mens contextuales para controles individuales de nuestros formularios asignando la propiedad Barra de mens contextuales de cada control (las barras de mens normales no permiten esto).
Igual que ocurre con las barras de mens estndar, podemos aadir
elementos a un men contextual que activen rdenes de Access, que
abran objetos tales como formularios o informes o que ejecuten funciones de Visual Basic.

".
Pruebe la barra de mens personalizada

Ya estamos preparados para probar la nueva barra de mens.

1. En el men Suscriptor, pulse Buscar registro.


Esta orden abre el cuadro de dilogo que creamos en el Captulo 8.

2. Pulse dos veces en una entrada del cuadro de lista.


El formulario Suscriptorespasa a mostrar el registro especificado. A continuacin, probaremos la otra orden que hemos aadido.

3. En el men Suscriptor, pulse Imprimir etiquetas.


Aparece el cuadro de dilogo lmprirnir etiquetas.

4. Pulse Cancelar.
Por ltimo, podemos comprobar los cambios realizados en el men Herramientas.

5. Pulse el men Herramientas.


El men slo contiene tres rdenes -han desaparecido las dems rdenes que normalmente estn en el men Herramientas. (Puede que la primera vez que lo abra slo vea dos de las tres rdenes, dado que Access
oculta los elementos de men menos utilizados. Si mantiene abierto el
men unos segundos, ver aparecer todas la entradas del men.)
Las rdenes adicionales del men Herramientas ahora no se encuentran
en el men personalizado, aunque todava siguen estando en la barra de
mens integrada, que podemos restaurar sin ms que pasar a una ventana distinta de la del formulario Suscriptores.
Ventana Base
de datos

6. Pulse el botn Ventana Base de datos en la barra de herramientas.

7. Pulse otra vez el men Herramientas.


De nuevo aparecen todas las rdenes estndar.
Observe que la barra de mens personalizada slo aparece cuando est activo el formulario Suscriptores -el formulario para el que la hemos creado.
No obstante, si creamos una barra de mens apropiada para ms de un formulario, los formularios podrn compartirla: bastar con asignar su nombre
a la propiedad Barra de mens de cada formulario. Tambin podemos crear
una barra de mens que se aplique a todos los formularios de nuestra aplicacin (a menos que tengan su propia barra de mens). Para especificar una
barra de mens global, utilizaremos la opcin Barra de mens a la que se
accede a travs de la orden Inicio del men Herramientas.

PERSONALIZACI~NDE BARRAS DE HERRAMIENTAS


Para bien o para mal, el software actual utiliza cada da ms elementos de interfaz grficos para interactuar con los usuarios. En nuestras aplicaciones de
Access, una forma de seguir esta corriente es la utilizacin de barras de herramientas. Las barras de herramientas son una forma sencilla de poner las
rdenes a disposicin de los usuarios. En una barra de herramientas caben
muchos botones, y una vez que los usuarios aprenden para qu sirven, las rdenes estn siempre <<atiro de pulsacin. Cuando queremos aadir botones
nuevos a una barra de herramientas, Access nos proporciona gran cantidad
de iconos entre los que elegir; incluso, si es usted un buen artista, puede
crear sus propios dibujos.

Igual que ocurre con las barras de mens, existen varias estrategias para crear
barras de herramientas. La ms simple consiste en personalizar una barra de
herramientas existente, como la barra Vista Formulario, aadiendo o eliminando botones a voluntad. Sin embargo, las barras de herramientas estndar
estn almacenadas junto con nuestra instalacin de Access, por lo que otros
usuarios que abran nuestras bases de datos no podrn verlas cambiadas.
Para crear barras de herramientas que despus puedan utilizarse en otras
computadoras, deberemos crear nuestras propias barras personalizadas, que
complementen o reemplacen a las actuales. Las barras de herramientas personalizadas, igual que las barras de mens personalizadas, se guardan junto
con la aplicacin de base de datos, por lo que estarn disponibles para todos
los usuarios. Cuando personalizamos barras de herramientas, decidimos qu
botones incluir y si stos llevarn imgenes o texto. Incluso podemos personalizar el texto de informacin que aparece cuando los usuarios colocan el
puntero del ratn sobre un botn.
En esta seccin crearemos una barra de herramientas sencilla diseada para
reemplazar a la barra de herramientas estndar. Puesto que los usuarios no
podrn ver la barra de herramientas estndar cuando est activo el formulario Suscriptores, nos interesar incluir algunos de los botones a los que los
usuarios estn acostumbrados (como Cortar, Copiar y Pegar) y despus aadir nuestra propia seleccin de botones sustituyendo a aquellos que esperamos que los usuarios no necesiten.

Creacin de una barra de herramientas propia para el formulario Suscriptores


La barra de herramientas que vamos a crear ayudar a los usuarios del formulario Suscriptores a abrir otros formularios de forma rpida y sencilla.
Afortunadamente, el tipo de botn ms sencillo de crear es el que abre un formulario o un informe de nuestra base de datos. Comenzaremos por crear una
barra de herramientas nueva y vaca, en la que colocaremos cuatro botones.

Cree una barra de herramientas nueva para el formulario Suscriptores

1. Vuelva al formulario Suscriptores.


2. En el men Ver, apunte a Barras de herramientas y seleccione Personalizar.

3. Pulse el botn Nueva.


Access mostrar el cuadro de dilogo Nueva barra de herramientas.

4. En el cuadro Nombre de la barra de herramientas, escriba Suscriptores


y pulse Aceptar.

Aparecer una barra de herramientas flotante vaca, cerca del centro de la


pantalla.

5. En el cuadro de dilogo Personalizar, pulse el botn Cerrar.


6. Arrastre la barra de herramientas vaca hacia arriba hasta anclarla en la
parte superior de la pantalla - e n t r e la barra de mens y la barra de herramientas. (Asegrese de anclar la barra de herramientas al borde izquierdo
de la ventana, alineada con el lado izquierdo de la barra de mens.)
La barra de herramientas personalizada pronto reemplazar a
la barra de herramientas estndar Vista Formulario cuando se
active el formulario Suscriptores

7. Con el botn derecho del ratn, pulse una de las barras de herramientas
y, a continuacin, pulse Suscriptores en el men contextual.
La barra de herramientas personalizada desaparece por el momento.
Vista Diseo

8. Pulse el botn Vista Diseo en la barra de herramientas.


9. Asigne el valor Suscriptores a la propiedad Barra de herramientas.

,B

Vista
Formulario

Al asignar esta propiedad le indicamos a Access que siempre que est activo el formulario Suscriptores debe mostrar nuestra barra de herrarnien.tas personalizada en lugar de la estndar.

10. Pulse el botn Vista Formulario en la barra de herramientas.


Aparece la barra de herramientas personalizada que, por el momento,
est vaca, sin ningn botn que pulsar.
Aada botones estndar a la barra de herramientas

En cualquier barra de herramientas que creemos, podremos aadir tantos botones estndar como queramos, y funcionarn exactamente igual que en las
barras integradas de Access. Ahora incluiremos unos cuantos de los botones
de edicin a los que los usuarios estn acostumbrados: Cortar, Copiar, Pegar
y Deshacer.

1. Con el botn derecho del ratn, pulse en la barra de herramientas vaca y,


a continuacin, pulse Personalizar en el men contextual.

2. En el cuadro de dilogo Personalizar, pulse la pestaa Comandos.

3. Seleccione Edicin en la lista Categoras.


En la lista Comandos se muestra el conjunto estndar de rdenes de edicin.

4. Seleccione Cortar en la lista Comandos y, a continuacin, arrastre el texto hasta la barra de herramientas.

Arrastre desde
aqu.. .

. ..hasta aqu
F.,

..:< r J.,.

El botn Cortar aparece en la barra de herramientas.

5. Utilice la misma tcnica para aadir los botones Copiar, Pegar y Deshacer a la derecha del botn Cortar.
Igual que en la barras de herramientas estndar podemos utilizar lneas
de divisin para agrupar los botones. Como los botones Cortar, Copiar y
Pegar forman parte de un mismo grupo lgico vamos a incluir una lnea
divisoria delante del botn Deshacer.

6. Con el botn derecho del ratn, pulse el botn Deshacer y, a continuacin, pulse Iniciar un grupo en el men contextual.
Aparece una lnea de divisin entre los botones Pegar y Deshacer.

Aada tres botones personalizados

Ahora aadiremos tres botones personalizados -uno para abrir el formulario DilogoIrARegistro, otro para abrir el formulario Di1ogoEtiquetu.s y un
tercero para abrir el formulario IntroducirPago. Para crear los dos primeros
botones IrARegistro e ImprimirEtiquetns lo que haremos ser copiar las rdenes que creamos para el men personalizado, puesto que eso es exactamente lo que queremos mostrar en la barra de herramientas.

1. Pulse el men Suscriptor para desplegarlo.


2. Con la tecla CTRL pulsada, arrastre la orden Buscar registro desde el men
Suscriptor hasta la barra de herramientas y colquela a la derecha de los
botones que ya hay.
En la barra de herramientas aparecer el nuevo botn. Comprobamos entonces que los mens y las barras de herramientas no son ms que dos
formas distintas de ver una misma cosa -un sitio donde colocar rdenes- y que, por tanto, se pueden copiar rdenes de unos a otros. A continuacin fijaremos las propiedades del botn.

3. Con el botn derecho del ratn, pulse el nuevo botn y, a continuacin,


pulse Propiedades en el men contextual.

4. Seleccione el texto que aparece en el recuadro Informacin de pantalla y


escriba Buscar registro.
Este es el texto de la informacin que se muestra cuando se sita el puntero del ratn sobre el botn.

5. Seleccione el recuadro Iniciar un grupo y pulse Cerrar.


A continuacin copiaremos la orden de men Imprimir etiquetas a la barra de herramientas.

6. Pulse de nuevo el men Suscriptor.

7. Con la tecla CTRL pulsada, arrastre la orden Imprimir etiquetas desde el


men Suscriptor hasta la barra de herramientas y colquela a la derecha
de los botones que ya hay.

8. Con el botn derecho del ratn, pulse el nuevo botn y, a continuacin,


pulse Propiedades en el men contextual.
9. Seleccione el texto que aparece en el recuadro Informacin de pantalla,
escriba Imprimir etiquetas y pulse Cerrar.
A continuacin aadiremos otro botn para abrir el formulario Zntrodu-

cirPago.

10. En el cuadro de dilogo Personalizar, seleccione Todos los formularios


en la lista Categoras.

11. Seleccione IntroducirPago en la lista Comandos y arrstrelo a la barra de


herramientas.
12. Con el botn derecho del ratn, pulse el nuevo botn y, a continuacin,
pulse Propiedades en el men contextual.
13. Seleccione el texto que aparece en el recuadro Informacin de pantalla,
escriba Introducir pago y pulse Cerrar.

Nuestra barra de herramientas tiene ahora siete botones listos para funcionar. Si lo desea, puede aadir otros botones estndar o reorganizar los
botones arrastrndolos por la barra de herramientas.

--

&th,

tilr7r

- K Q @

b7

,?

k a I 1,

&@m
I!

E
-

. ~ tan

--

Cada uno de los botones


personalizados abre un
formulario diferente

.
-1

14. En el cuadro de dilogo Personalizar, pulse Cerrar.


Pruebe la nueva barra de herramientas

Es el momento de probar nuestra nueva barra de herramientas. Pruebe a pasar sobre los botones para ver su texto de informacin. Despus siga estos
pasos para ver los botones en accin.
1. Pulse el botn Buscar registro en la barra de herramientas.

El botn abrir el cuadro de dilogo Ir a registro.

2. Pulse dos veces un suscriptor en la lista.


3. Pulse el botn Imprimir etiquetas en la barra de herramientas.

El botn abrir el cuadro de dilogo Imprimir etiquetas.


4. Pulse Cancelar.

5. Pulse el botn Introducir pago en la barra de herramientas.


El botn abrir el formulario Introducir pago.

6. Pulse Cerrar.
A continuacin, aadiremos un botn ms a la barra de herramientas antes
de darla por terminada -un botn que permita a los usuarios ver el historial
de pagos. Cuando termine, habr reemplazado todos los botones de rdenes
que antes aparecan en el pie del formulario Suscriptores.

Creacin de botones de barra de herramientas para ejecutar cdigo Visual Basic


Los botones de barra de herramientas que hemos creado simplemente abren
formularios -no han hecho nada especial. Si todo lo que desea hacer es abrir
un objeto, esta tcnica es bastante directa. Pero probablemente querr que su
barra de herramientas haga ms cosas -por ejemplo, puede ejecutar un procedimiento Visual Basic cuando los usuarios pulsen un botn. Para hacerlo,
asignaremos a una propiedad del botn el nombre de la funcin Visual Basic
que queremos ejecutar.
En esta seccin crearemos un botn de barra de herramientas que ejecute
una funcin Visual Basic. En este caso, nos interesa que el botn abra el formulario emergente HistoriaPagos, que muestra la historia de los pagos de
un suscriptor. No obstante, no slo queremos abrir el formulario -adems
necesitamos establecer un filtro para que el formulario slo muestre los
pagos del suscriptor actual. Aunque un botn de barra de herramientas no
puede hacer esto por s solo, podemos escribir una sencilla funcin que realice el trabajo.

Escriba una funcin en Visual Basic que abra el formulario HistoriaPagos

1. En el men Ventana, seleccione Cap10 Suscriptor : Base de datos.


2. En la ventana Base de datos, pulse el acceso directo Mdulos.

3. Pulse dos veces el mdulo Miscelnea.


.Se abre Visual Basic mostrando el cdigo del mdulo.

4. En el men Insertar, pulse Procedimiento.


5. En el recuadro Nombre, escriba VerHistoriaPagos y, a continuacin,
pulse Aceptar.

6. Visual Basic crea la funcin al final del mdulo, escribiendo las instrucciones Function y End Function por nosotros.

7. Escriba el siguiente cdigo en el procedimiento:


' Abre el formulario HistoriaPagos y fija su filtro.

DoCmd.OpenForm "HistoriaPagos", , , "IDSuscriptor = "


& Forms1Suscriptores!IDSuscriptor

Este cdigo utiliza el mtodo OpenForm del objeto DoCmd para abrir el
formulario HistoriaPagos. Mediante el argumento WhereCondition
-una tcnica que ya utilizamos en el captulo anterior- se especifica un
filtro para el formulario. Cuando se abra el formulario, tan slo mostrar

aquellos registros cuyo campo IDSuscriptor coincida con el del registro


que en ese momento se est mostrando en el formulario Suscriptores.
Guardar

8. Pulse el botn Guardar en la barra de herramientas.


9. Cierre Visual Basic.
Aada un botn de barra de herramientas que ejecute la funcin

El ltimo botn que vamos a aadir a la barra de herramientas es uno que utiliza la funcin VerHistoriaPagos. Por supuesto, la pulsacin de un botn de
barra de herramientas podra desencadenar la ejecucin de una funcin mucho ms complicada, aunque en este caso no tenemos ms que abrir el formulario.

1. Vuelva al formulario Suscriptores.


Aparecern la barra de herramientas y la barra de mens personalizadas.

2. Con el botn derecho del ratn, pulse la barra de herramientas y, a continuacin, pulse Personalizar en el men abreviado.
Cuando creamos un botn encargado de ejecutar una funcin Visual Basic no importa la orden o la categora que elijamos - e l botn ejecutar
el cdigo en lugar de realizar su accin habitual. Por ello, lo ms cmodo es seleccionar una orden que tenga el icono que queremos que aparezca en nuestro botn. En este caso, utilizaremos el icono Tabla para representar la orden Ver historial de pagos.

3. Seleccione Ver en la lista Categoras.


4. Seleccione Tabla en la lista Comandos y arrastre el texto a la barra de herramientas nueva, hasta colocarlo a la derecha del botn Introducir pago.
En este momento, si pulssemos el botn crearamos un tabla nueva.
Pero, por supuesto, tenemos otros planes para el botn.

5. Con el botn derecho del ratn, pulse el nuevo botn de la barra de herramientas y, a continuacin, pulse Propiedades en el men contextual.

6. Seleccione el texto que aparece en el recuadro Informacin de pantalla y


escriba Ver historial de pagos.

7. En el recuadro Accin, escriba =VerHistoriaPagos().

Ptupiedades&l control

del metodo abrebrsado

inlormacionde pantalla:

- Al fijar la propiedad Accin le indicamos a


Access que ejecute la funcin cada vez que
se pulse el botn
onte\to de aluda:

Cuando utilicemos una funcin en la propiedad Accin siempre nos deberemos asegurar de que escribimos un signo igual delante del nombre
de la funcin y unos parntesis detrs (incluyendo los argumentos si la
funcin as lo requiere).

8. En el cuadro de dilogo Propiedades del control Suscriptores, pulse Cerrar.

9. En el cuadro de dilogo Propiedades, pulse Cerrar.

Trabajo con barras de rdenes en Visual Basic


En este captulo hemos personalizado mens y barras de herramientas
utilizando para ello las herramientas disponibles en Access. Sin
bargo, cuando se necesita ms potencia -para, por ejemplo, cam
los mens o las barras de herramientas en respuesta a acciones d
usuarios sobre la aplicacin- se puede trabajar directamente con
mens y las barras de herramientas desde el cdigo Visual Basic.
Visual Basic, las barras de mens y las barras de herramientas se
nominan genricamente barras de comandos. Existe un extenso conjunto de objetos, propiedades y mtodos que podemos utilizar para trabajar con ellas.
Hay muchas razones para querer trabajar directamente con las barras
de comandos, entre las cuales cabe sealar las siguientes como las ms
habituales.
iAadir

o esconder rdenes de men o botones de barra de herra-

(~ontinu)

(Continuacin)

iCrear y manipular controles de barra de comandos especiales, como

por ejemplo los cuadros combinados, que no estn disponibles en


las herramientas estndar de Access.
Antes de poder trabajar en el cdigo con las barras de comandos es necesario indicarle a Access que lo vamos a hacer, para lo cual debemos
utilizar la orden Referencias (men Herramientas) y seleccionar Microsoft Office 9.0 Object Library. A partir de ese momento podremos
utilizar los objetos CornrnandBary CornrnandBarControl para acceder
a los mens y las barras de herramientas. En el Captulo 12 se tratar
con ms amplitud el uso de los objetos. Para obtener ms informacin
y ejemplos concretos de la programacin con barras de comandos
busque objeto CommandBar en la ayuda de Access.
&h'w---

w""w&--'

u*i-i-..

Pruebe la barra de herramientas una vez ms

Estamos preparados para probar el ltimo botn de la barra de herramientas.

1. Pulse el botn Ver historial de pagos en la barra de herramientas.


El botn ejecuta la funcin VerHistoriaPagosque se encarga de abrir el
formulario emergente HistoriaPagos y aplicarle el correspondiente filtro.

2. Cierre el formulario Historial de pagos.


La barra de herramientas ya est completa.
Cierre el formulario y salga de Access

1. Cierre el formulario Suscriptores y pulse S cuando Access le pregunte si


desea guardar los cambios.

2. En el men Archivo, pulse Salir.

Resumen del captulo


Para

Haga esto

Crear una barra de mens


o una barra de
herramientas
personalizada

En el men Ver, apunte a Barras de


herramientas y, a continuacin, pulse
Personalizar. Pulse el botn Nueva y escriba
el nombre de la barra de mens o la barra de
herramientas.

Copiar rdenes o botones


de un men o barra de
herramientas a otro

Con el cuadro de dilogo Personalizar abierto,


mantenga pulsada la tecla CTRL mientras
arrastra el botn o la orden de men al men
o la barra de herramientas donde quiera
copiarlo.

Crear una orden de men


o un botn que ejecute
una orden estndar o abra
un formulario o un
informe

En el cuadro de dilogo Personalizar,


seleccione la categora de la orden que quiera
que ejecute el botn o la orden de men y, a
continuacin, arrastre el texto de la orden al
men o la barra de herramientas. Para crear un
botn que abra un objeto de la base de datos,
utilice la categora Todos los formularios y
arrastre el nombre del formulario o el informe.

Crear una orden de men


o un botn de barra de
herramientas que ejecute
una funcin Visual Basic

En la propiedad Accin de la orden de men o


el botn de barra de herramientas escriba un
signo igual seguido del nombre de la
funcin.

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Ayuda

Creacin de barras de
mens y rdenes de men
personalizadas

mens

Creacin de barras de
herramientas
personalizadas

barras de herramientas

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Trabajar con barras de


rdenes desde cdigo
en Visual Basic

CommandB ar

Uso de mtodos del


objeto DoCmd

DoCmd (o el nombre del mtodo especfico,


como OpenForm)

Ahora que ya hemos creado cuadros de dilogo, mens y barras de herramientas, sabemos crear casi todos los componentes de una interfaz de usuario personalizada. Slo nos queda agruparlos todos de forma coherente. En
el siguiente captulo aprenderemos formas de personalizar la apariencia y el
comportamiento generales de la aplicacin, como por ejemplo crear una barra de ttulo propia con su icono personalizado. Adems, aprenderemos a
controlar lo que ocurre cuando se inicia la aplicacin -y a proporcionar un
formulario de inicio que dirija al usuario hacia sus tareas.

Toques finales
a la apiicacion
Objetivos del captulo
En este captulo aprender a:
Tiempo estimado:
20 minutos.

iCrear un

formulario de inicio para una aplicacin.

iControlar el

inicio de la aplicacin.

iPersonalizar la barra de ttulo y


iSeparar los datos de la

la apariencia de la aplicacin.

aplicacin del resto de sus objetos.

La primera impresin es la que cuenta, dice la sabidura popular. Desde luego, es importante que cuando encargamos una tarta est rica, pero lo que ms
llama la atencin de los comensales son los dibujos y relieves realizados con
nata o chocolate -y esa primera impresin afectar ms que ninguna otra
cosa a su opinin sobre el postre. Como en otras reas de nuestra vida diaria,
esta mxima se cumple tambin para el software de computadoras: el aspecto y la primera impresin de un producto es tan importante como su funcionamiento general. Microsoft ha aplicado en sus productos esta teora, dando
como resultado un producto grfico que llama poderosamente la atencin del
usuario y hace que no eche en falta alguna que otra caracterstica.
En los captulos anteriores hemos aprendido a crear la sustancia bsica que
compone nuestras aplicaciones, creando formularios personalizados, aadiendo barras de herramientas y enlazndolo todo de manera consistente. Antes de que nuestra aplicacin est lista para su consumo por parte del pblico, debemos aplicarle una serie de toques finales -la nata y el chocolate.

Al fin y al cabo, la aplicacin ser nuestra embajadora ante los usuarios que
la abran, y nos interesa que su primer contacto con ella sea satisfactorio.
En este captulo aprenderemos tcnicas para que nuestras aplicaciones presenten un aspecto profesional y depurado. Seguiremos trabajando con la
aplicacin Suscriptor, facilitando a los usuarios el inicio de la misma -y
procurando que la primera impresin sea agradable. Por ltimo, aprenderemos trucos para distribuir una aplicacin a los usuarios de forma que sea fcil de mantener.

Inicie la leccin

m Inicie Microsoft Access y abra la base de datos Cap11 Suscriptor de la


carpeta de prcticas.

CONTROL DEL INICIO DE LA APLICACIN


Una vez creadas las tablas, informes y formularios de nuestra aplicacin, y
despus de haber aadido todo el cdigo necesario para que funcionen correctamente, es el momento de preparar la aplicacin para su distribucin final. Nos interesa que la aplicacin parezca un producto definitivo y nico en
el mercado, y no simplemente una base de datos de Access con unos cuantos
adornos. Adems, para que los usuarios utilicen satisfactoriamente la aplicacin, debemos facilitarles el acceso inicial a la misma.
Estos son algunos de los preparativos finales que debemos tener en cuenta:

Diseo de un formulario de inicio. podemos seleccionar un formulario en


nuestra base de datos para que Access lo abra automticamente cada vez que
un usuario inicie la aplicacin. Por ejemplo, podramos saltar directamente a
la entrada de datos principal de nuestra aplicacin, o mostrar un formulario
como el formulario Suscriptores con el que hemos estado trabajando. En muchas aplicaciones, podremos proporcionar un formulario de tipo panel de
control -similar al Panel de control principal que crea automticamente el
Asistente para bases de datos- que acte como men principal para los
usuarios. En cualquier caso, lo ms probable es que nos interese ocultar la
ventana Base de datos, porque nuestros formularios ya proporcionan a los
usuarios un acceso sencillo a todas las capacidades de la aplicacin.
Personalizacin del aspecto inicial de la aplicacin. Adems de proporcionar un formulario de inicio, podemos personalizar otros muchos detalles,
como el contenido de la barra de ttulo. Si creamos barras de mens, barras
de herramientas y mens abreviados personalizados para la aplicacin, querremos que se activen cuando comience la aplicacin.

Preparacin de la aplicacin para su uso en red y un sencillo mantenimiento. Antes de distribuir la aplicacin, debemos tener en cuenta cmo va
a utilizarse y cul ser su mantenimiento. Para facilitar las cosas, dividiremos nuestra aplicacin en dos archivos: uno para las tablas y otro para el resto de los objetos. Adems, decidiremos si la aplicacin se instalar o no en
red, as como la necesidad de proteger los datos mediante una contrasea.
Pruebas, pruebas y ms pruebas. Desde luego, el ltimo paso antes de distribuir la aplicacin ser asegurarnos que todo funciona correctamente.
Pruebe todas las combinaciones posibles para formularios e informes, y si es
necesario, realice las correcciones que hagan falta antes de distribuir la aplicacin. El tiempo que dedique a pruebas redundar en beneficio propio al reducir el nmero de actualizaciones que deber proporcionar a sus usuarios
una vez que la aplicacin est en el mercado.
En este captulo utilizaremos diversas tcnicas para personalizar la aplicacin Suscriptor. Cuando terminemos, nuestra aplicacin estar preparada
para ser distribuida -haciendo su presentacin ante los usuarios como un
producto nico, en lugar de parecer simplemente una base de datos ms, y
ayudando a los usuarios a iniciar fcilmente su trabajo.

Inclusin de un formulario inicial en la aplicacin


Cualquier formulario de la aplicacin puede utilizarse como formulario inicial, que se abrir automticamente ante los usuarios. No obstante, la estrategia inicial ms comn para abrir una aplicacin -y que utilizaremos en
nuestra aplicacin Suscriptor- consiste en proporcionar un formulario de
inicio independiente que acte como men principal de la aplicacin. La
base de datos de prcticas Suscriptor ya incluye una versin preliminar de
este formulario, diseado para presentar ante los usuarios la aplicacin para
una revista imaginaria llamada Revista de danza.

Base de datos de susciipcioile::

En esta seccin aadiremos los elementos finales al diseo del formulario


Panel principal. En la base de datos de prcticas, el formulario ya contiene
el dibujo, el texto de varias etiquetas y dos sencillos botones creados con el
Asistente para botones de comando. Nosotros aadiremos el tercer botn y
prepararemos el forinulario para que se convierta en el formulario inicial de
la aplicacin. En sus bases de datos particulares, podr crear el panel de control partiendo de cero y aadirle cualquier texto, imgenes o botones que
considere oportunos. Un formulario de inicio es el mejor lugar para desarrollar su creatividad y aplicar su toque personal a las aplicaciones.

Detalles del formulario PanelPrincipal de la aplicacin


Para terminar de completar el formulario PanelPrincipal de la base de datos
de prcticas, lo abriremos en la vista Diseo, aadiremos un botn de orden
utilizando el Asistente para botones de comando y despus crearemos una
etiqueta para el botn. Asignaremos tambin una serie de propiedades que
apliquen al formulario una apariencia de panel de control -similares a las
propiedades establecidas en los cuadros de dilogo y formularios emergentes de las lecciones anteriores.

Aada un botn de orden


1. En la ventana Base de datos, pulse el acceso directo Formularios.
2. Seleccione el formulario PanelPrincipal y pulse Diseo.
El formulario PanelPrincipal se abrir en la vista Diseo. Los dos botones de este formulario abren los formularios Suscriptores y DiulogoEtiquetas. Crearemos otro botn al final del formulario que proporcione a
los usuarios una forma sencilla de salir de la aplicacin cuando terminen
su trabajo.

3. Desplcese hacia el final del formulario para mostrar el espacio vaco que
queda debajo de los botones.
Asistentes para
controles

4. En el cuadro de herramientas, asegrese de que est seleccionada la herramienta Asistentes para controles y despus pulse la herramienta Botn
de comando.

Botn de
comando

5. Pulse debajo del lado izquierdo del botn AbrirDilogoEtiquetas (el que
muestra un sobre) para crear el nuevo botn.
Se activar el Asistente para botones de comando y nos preguntar qu
accin queremos que lleve a cabo el botn.

Pulse aqu
para crear
el botn de
orden

6. En la lista Categoras, seleccione Aplicacin.


7. En la lista Acciones seleccione Salir de la aplicacin y pulse Siguiente.
El asistente nos preguntar si deseamos incluir en el botn texto o una
imagen. A diferencia de los botones creados en captulos anteriores, esta
vez colocaremos una imagen. La imagen Seal de parada, que ya est seleccionada, servir.

8. Pulse Siguiente.
El asistente nos pedir un nombre para el botn.

9. Escriba SalirAplicacin y pulse Finalizar.


El asistente crear el botn y el procedimiento de evento que se activar para cerrar la aplicacin -y Access- cuando se pulse el botn.
Coloque una etiqueta al botn de orden

~2"
Etiaueta

A continuacin, aadiremos texto junto al botn para aclarar su misin.

1. En el cuadro de herramientas, pulse la herramienta Etiqueta.

2. Pulse justo a la derecha del nuevo botn.


Aparecer una etiqueta vaca en el formulario, lista para que introduzcamos el texto que queremos mostrar. Podemos utilizar esta misma tcnica
para aadir ms texto al formulario, tal como se ha hecho con el resto de
las etiquetas que aparecen en el mismo.

Pulse aqu
para crear
la
etiqueta

3. Escriba Salir de la aplicacin de suscripciones.


Establezca las propiedades del panel principal

Para lograr que el formulario parezca un panel principal, lo nico que falta
es establecer sus propiedades.
Propiedades

1. En el men Edicin, pulse Seleccionar formulario.


2. Si la hoja de propiedades no est visible, pulse el botn Propiedades en
la barra de herramientas.

3. Pulse la pestaa Formato en la hoja de propiedades.


4. Establezca las siguientes propiedades con los valores que se adjuntan.
Propiedad

Valor

Ttulo

Panel principal

Vistas permitidas

Formulario

Barras de desplazamiento

Ninguna

Selectores de registro

No

Botones de desplazamiento

No

Centrado automtico

Estilo de los bordes

Fino

Estos valores harn que la apariencia del panel de control sea nis parecida a un cuadro de dilogo, con un borde fino y sin herramientas de desplazamiento.

5. Cierre el formulario PanelPrincipal y pulse S cuando Access le pregunte si desea guardar los cambios.
Pruebe el nuevo formulario

El formulario Panel principal funcionar como el centro de control de nuestra aplicacin -los usuarios lo tomarn como su base de operaciones,
desde el que se desplazarn a las distintas tareas. Probmoslo.

1. En la ventana Base de datos, pulse dos veces el formulario PanelPrincipul.


El formulario aparecer en el centro de la pantalla, presentando nuestra
aplicacin y mostrando los tres botones disponibles.

2. Pulse el primer botn, Ver o introducir informacin de suscriptores.


El procedimiento de evento del botn abrir el formulario Suscriptores.
Aparecern la barra de herramientas y los mens que creamos en el Captulo 10, proporcionando a los usuarios una forma de desplazarse por
otras partes de la aplicacin. Cuando cerremos el formulario Suscriptores, volveremos al Panel principal.

3. Cierre el formulario Suscriptores.


'

Cuando un usuario termina de trabajar con la aplicacin Suscriptor, lo


normal es que salga tambin de Access. Nosotros, sin embargo, an tenemos ms cosas que hacer, por lo que slo cerraremos el formulario.

4. Cierre el formulario PanelPrincipal.

Consejo Cuando distribuyamos nuestra aplicacin a los usuarios, no nos


interesar que cierren el Panel principal sin que se cierre tambin el resto de
la aplicacin. Para evitar que la aplicacin siga abierta, podremos aadir una
sencilla lnea de cdigo al procedimiento de evento Close del formulario,
que cerrar la aplicacin o saldr de Access. Utilice el mtodo CloseCurrentDatabase para cerrar la aplicacin; para salir de Access, utilice el mtodo Quit del objeto DoCmd.

Consiga que el formulario PanelPrincipal se abra automticamente

Ahora que el formulario PanelPrincipal est listo, el siguiente paso ser indicarle a Access que lo abra automticamente cuando un usuario inicie la
aplicacin, consiguiendo as que sea el formulario de inicio de la aplicacin.
Para hacerlo, utilizaremos la orden Inicio.

1. En el men Herramientas, pulse Inicio.


Access abrir el cuadro de dilogo Inicio, en el que podremos especificar
las opciones de inicio de nuestras aplicaciones.

2. En el recuadro Mostrar formulariolpgina, pulse la flecha y seleccione


PanelPrincipal en la lista de formularios.
!

Mostrar forrnularin/p&gina

frereraar b yentana Base de lj.%tni

Presentar la hsra de ertadp

Barra de menu rontsxti~~,

e las barrrs

Seleccione el
formulario que
desea abrir
cuando se
inicie la
aplicacin

de hcrramientnsincorporad

La prxima vez que abra la base de datos, el formulario PanelPrincipal


se abrir automticamente.

PERSONALIZACIN

DEL ASPECTO DE LA APLICACIN

Mientras estamos en el cuadro de dilogo Inicio, podemos establecer otras


opciones para nuestra aplicacin. Uno de los detalles a la hora de personalizar una aplicacin es su barra de ttulo. En lugar de Microsoft Access*,
podemos especificar otro ttulo para la aplicacin. Adems, ahora es el
momento de decirle a Access que oculte la ventana estndar Base de datos
y de evitar que los usuarios puedan cambiar las barras de herramientas que
hemos creado para la aplicacin.
Asigne las opciones de inicio para controlar el aspecto de la aplicacin

1. En el cuadro de dilogo Inicio, pulse el recuadro Ttulo de la aplicacin


y escriba Aplicacin de base de datos de suscripciones.
Este texto aparecer en la barra de ttulo de la aplicacin, en lugar de
Microsoft Access, con lo que nuestra aplicacin parecer ms una
creacin propia que una base de datos de Access.

2. Quite la marca de verificacin del recuadro Presentar la ventana Base de


datos.
Ahora, cuando los usuarios abran la base de datos Suscriptor, la ventana
Base de datos no aparecer. No la necesitarn -nuestro panel principal
la reemplazar como herramienta de acceso a la aplicacin.

3. Quite la marca de verificacin del recuadro Permitir cambios en barras


de herramientas y mens.
Al eliminar esta opcin nos aseguramos de que los usuarios no puedan
cambiar el men ni la barra de herramientas Suscriptor -ni tampoco las
integradas en Access- para que estn siempre disponibles.

Kona de la apl8cxiin:

---1

r P,e$,ntar la ontana Basa de d a t ~ r


F

Presentar lo barra de estidi,

Complete los
valores de
inicio de la
aplicacin
Suscriptor

4. Pulse Aceptar.
Aunque la base de datos Suscriptor no requiere ms opciones de inicio, puede que nos interese utilizar las dems opciones en otras aplicaciones. Estos
son algunos de los cambios adicionales que podremos realizar modificando
las opciones de la orden Inicio:

Proporcionar un icono propio a la aplicacin. Si asignamos a la opcin


Icono de la aplicacin un archivo de icono o mapa de bits, podremos cambiar el icono que aparece en la esquina superior izquierda de la barra de ttulo (y en el botn de la barra de tareas cuando la aplicacin est minimizada).
Ocultar la barra de estado. Si quitamos la marca de verificacin del recuadro Presentar la barra de estado, sta no aparecer en la parte inferir de la
ventana de la aplicacin.

Cambiar los mens estndar. En el Captulo 10 aprendimos a cambiar los


mens de un formulario. No obstante, tambin podemos utilizar las opciones
de inicio para especificar un comportamiento de mens para toda la aplicacin. Para mostrar una barra de mens en aquellos formularios e informes
que no tengan su propia barra de mens, estableceremos las opciones de Barra de mens y Barra de men contextual. Para hacer que no estn disponibles los mens integrados, quitaremos la marca de verificacin de los recuad r o ~Permitir el uso de mens no restringidos y Permitir el uso de mens
contextuales predeterminados.

Ocultar las barras de herramientas incorporadas. Si quitamos la marca


de verificacin del recuadro Permitir el uso de las barras de herramientas incorporadas, le estaremos diciendo a Access que no muestre las barras de herramientas normales, con lo que slo aparecern nuestras barras de herramientas personalizadas.
Asegurar la aplicacin frente a agresiones de los usuarios. Si pulsamos
el botn Avanzadas del cuadro de dilogo Inicio, veremos la opcin Usar las
teclas especiales de Access. Si quitamos la niarca del recuadro, impediremos
que los usuarios puedan entrar en el cdigo de la aplicacin. Pero tenga cuidado si lo hace - e s t a r impidindose el acceso a si mismo.

de grupo. Estas caractersticas avanzadas nos permitirn proteger

es un proceso laborioso y complejo. Si podemos resolver el pro-

Nota Despus de asignar las opciones de inicio, stas no sern efectivas


hasta la prxima vez que abra la aplicacin. Estas opciones sern beneficiosas para sus usuarios -pero no para usted, al menos mientras siga en proceso de desarrollo de la aplicacin. Por ejemplo, probablemente querr abrir la
ventana Base de datos en lugar del formulario de inicio, para seguir tenien*
do acceso a todos los objetos de la aplicacin.

Para ignorar las opciones de inicio de una aplicacin, mantenga pulsada la


tecla MAYUS cuando abra la base de datos, bien sea pulsando dos veces sobre
el icono del archivo o pulsando el botn Abrir. Access ignorar todas las opciones que haya asignado en la orden Inicio. (Para aprender sobre la prevencin de acciones de los usuarios, busque ayuda para la propiedad AllowBypassKey.)

Sustitucin de la pantalla de presentacin de Access


Cada vez que iniciamos Access, aparece una ventana de presentacin, un
mapa de bits que anuncia el nombre y el nmero de versin de Access. En
nuestras aplicaciones, nos interesar sustituir esta pantalla por nuestra pantalla de presentacin, de forma que al abrir la aplicacin se muestre una
pantalla con el nombre de la aplicacin.

de danza

Para reemplazar la pantalla de presentacin estndar, todo lo que tendremos


que hacer ser colocar una imagen de mapa de bits (.bmp) en la misma car-

peta donde est el archivo de base de datos de nuestra aplicacin (.mdb) y


asignarle el mismo nombre del archivo de base de datos. Para crear dicha
pantalla, podemos utilizar la aplicacin Paint de Windows o cualquier otra
aplicacin que cree archivos de mapas de bits.
Renombre el archivo de la pantalla de inicio para que Access la muestre

La carpeta de prcticas incluye un mapa de bits llamado Capl 1 Presenta, que


contiene el mapa de bits de la pantalla de presentacin de la base de datos
Suscriptor. Para que Access muestre este mapa de bits, slo tendremos que
asignarle el mismo nombre que tiene la base de datos.

1. Minimice Access (y el resto de las aplicaciones abiertas).


2. En el Escritorio de Windows, pulse dos veces el icono de acceso directo
a la carpeta de los archivos de prcticas. (Si no existe dicho acceso directo, localice la carpeta con el Explorador de Windows.)

3. Con el botn derecho del ratn, pulse el archivo Capl 1 Presenta y seleccione Cambiar nombre en el men contextual.

4. Escriba Cap11 Suscriptor como nuevo nombre y pulse INTRO.


Access utilizar automticamente ese mapa de bits como pantalla de presentacin cada vez que se abra nuestra aplicacin pulsando dos veces su
icono de Windows. Observe, no obstante, que la pantalla de presentacin
no aparece si abrimos la aplicacin desde dentro de Microsoft Access.

5. Pulse el botn Aplicacin de base de datos de suscripciones en la barra


de tareas para que vuelva a aparecer Access.
Muy pronto, probaremos la aplicacin con sus nuevas opciones de inicio y
su pantalla de presentacin. Mientras, debemos ocuparnos de algunos detalles ms.

PREPARACIN PARA DISTRIBUIR LA APLICACIN A LOS USUARIOS


Nuestra aplicacin est lista para su uso -slo nos falta ponerla a disposicin de los usuarios. En el caso ms simple, bastar con copiar el archivo de
la aplicacin al sistema de los usuarios o a una mquina de red a la que puedan acceder. No obstante, antes de sacarla al dominio pblico, conviene pensar en cmo la distribuiremos y mantendremos. Cmo haremos para distribuir las actualizaciones? Cmo podrn los usuarios crear copias de
seguridad y compactar la base de datos? Necesitamos algn archivo adicional para distribuir la aplicacin'?

Si nuestra aplicacin est diseada para ser utilizada por muchos usuarios o
sobre una red, o si es demasiado grande, estas preguntas sern importantes a
la hora de distribuirla. Aqu van algunas ideas para la perfecta distribucin y
el mantenimiento de una aplicacin de Access.

Divida la aplicacin en dos archivos de base de datos. Por omisin, todos


los datos y objetos de una aplicacin se guardan en un nico archivo de base
de datos. Este archivo puede llegar a ser demasiado grande y difcil de manejar. En aplicaciones muy grandes, conviene tener un archivo de Access
para las consultas, formularios y dems objetos que consiguen que la aplicacin funcione, y otro archivo para las tablas. El archivo principal de la aplicacin suele denominarse base de datos de cliente (front-end),porque es lo
que los usuarios abren y utilizan; el archivo de datos que contiene las tablas
suele recibir el nombre de base de datos de servidor (back-end).
Coloque su aplicacin o el archivo de datos en una unidad de red. Access es un sistema de bases de datos multiusuario, lo que significa que ms
de un usuario puede ver y cambiar datos en la misma base de datos simultneamente. Para que su aplicacin est disponible para varios usuarios, bastar con colocarla en una unidad de red. Si ha dividido la aplicacin en dos
archivos de base de datos, slo ser necesario colocar en la red el archivo que
contiene las tablas, proporcionando a cada usuario una copia el archivo de la
aplicacin -lo que conseguir que la aplicacin funcione ms rpido.
Cree accesos directos de Windows para ejecutar su aplicacin o para
realizar otras tareas. En Windows, puede crear iconos de acceso directo
para facilitar la ejecucin de la aplicacin, especialmente si se encuentra en
una red o en una carpeta con muchos otros archivos. Tambin puede crear
otros accesos directos para los usuarios -por ejemplo, podra crear uno para
comprimir la base de datos o para crear una copia de seguridad. Si desea informacin sobre cmo crear accesos directos, consulte su documentacin de
Windows o busque en la ayuda el tema accesos directos.
Asegrese de que los usuarios tienen todos los archivos que necesitan.
Prcticamente todo lo que necesita una aplicacin est incluido en el archivo de base de datos o instalado con Access. Si su aplicacin utiliza ms de
un archivo, asegrese de distribuir a los usuarios todos los archivos necesarios. Por ejemplo, si divide su aplicacin en dos archivos, los usuarios debern tener acceso a ambos. Si su aplicacin incluye una pantalla de presentacin o algn otro archivo externo, todos ellos debern estar a disposicin de
los usuarios. Por ltimo, si su aplicacin utiliza caractersticas especiales de
Access, como controladores de acceso a datos o controles personalizados,
los usuarios debern tener instaladas esas caractersticas en Access.
En esta seccin implementaremos la primera de estas estrategias para la aplicacin Suscriptor, dividindola en dos archivos de base de datos para facilitar su mantenimiento.

Divida la base de datos Suscriptor en dos archivos

La divisin de una aplicacin en dos archivos es sencilla: bastar con ejecutar el Asistente para divisin.

1. En el men Herramientas, seale a Utilidades de la base de datos y elija


Divisor de bases de datos.
Se abrir el Divisor de bases de datos.

Esta asistente inueia tabla5 de la base de datos actual a


una nueva basa de datos de servidur. En eritornus
multiusuario, &o reduce el trafico de la red y permite la
pruprirniion continua de clientes sin atrctat a los datos o
inter rumps a los iisuarios.

Esto podra ser un proceso largo. Haga $unacopia de


segut~dadde la blse de dato: antes de dii,idBla.

iDesea dividir la bjie de datos ahuta?

2. Pulse el botn Dividir base de datos.


El divisor de base de datos mostrar el cuadro de dilogo Crear una base
de datos de servidor, en el que especificaremos el nombre y la ubicacin
del archivo de base de datos que contendr las tablas de la aplicacin.

3. En el cuadro de dilogo, pase a la carpeta de prcticas del disco fijo de su


computadora (si es que no est all).
Tenga en cuenta que si est pensando poner estos datos en una unidad de
red, deber colocarse en una carpeta de dicha unidad. De esta forma, el
Divisor de base de datos colocar los datos en la red. Para este caso concreto, bastar con poner los datos en nuestro disco fijo.

4. Pulse el botn Dividir.


El Divisor de base de datos crear un archivo de base de datos llamado
Cap1 1 Suscriptor-bs (donde bs alude a base de servidor), exportar
las dos tablas de la aplicacin al nuevo archivo, crear vnculos con ellas
desde la base de datos actual y despus mostrar un mensaje indicando
que la base de datos se ha dividido satisfactoriamente.

5. Pulse Aceptar.

6. En el men Archivo, pulse Salir.


Cuando se cierre Access, podr ver los archivos en la carpeta de prcticas, que seguir visible en su Escritorio. La carpeta contendr ahora
tres archivos pertenecientes a la base de datos Suscriptor: la aplicacin,
el archivo de datos y el archivo de mapa de bits con la pantalla de presentacin.

Herramientas adicionales de Microsoft Office 2000


para desarrolladores
Para poder utilizar nuestra aplicacin, los usuarios debern tener Access instalado en sus computadoras. Sin embargo, ahora que hemos
personalizado la aplicacin para que parezca un paquete independiente, se preguntar si hay alguna forma de distribuirla a usuarios que no
tengan Access. S se puede hacer -siempre que tengamos el paquete
Microsoft Office 2000 para desarrolladores. Este producto contiene
herramientas para desarrolladores de Office, incluyendo la versin
run-time de Access, una versin que ejecuta aplicaciones pero no permite crearlas ni modificarlas. La versin run-time de Access puede
distribuirse a un nmero ilimitado de usuarios, que podrn as ejecutar
nuestra aplcacin independientementede que tengan o no Access.
Otra importante herramienta de Ia edicin para desarrolladores es el
Asistente para instalacin, que nos permite crear un programa de instalacin completo para nuestra aplicacin. Adems de instalar los archivos de nuestra aplicacin en los equipos de los usuarios, el programa de instalacin puede instalar los archivos run-time de Access, crear
accesos directos de Windows y personalizar de distintas formas el sistema de cada usuario.
Si piensa distribuir sus aplicaciones a distintos usuarios, probablemente le convenga adquirir este producto. Adems de estas henamientas, la versin para desarrolladores incluye un CD con un gran
nmero de programas para los desarrolladores y libros relacionados
con la programacin, entre los que se incluye Microsoft Oflice 2000
Visual Basic Programmer S' Cuide.

Aunque la hayamos dividido en dos archivos, nuestra aplicacin seguir funcionando exactamente igual que antes. Sin embargo, ahora ser mucho ms
flexible. En primer lugar, podremos hacer copias del archivo de datos -una
tarea muy importante- sin tener que copiar la aplicacin completa, que no
suele cambiar. Adems, podremos reemplazar el archivo de la aplicacin
(por ejemplo, con formularios e informes actualizados) sin que afecte a los
datos existentes. Por ltimo, si los usuarios trabajan en una red, podrn ejecutar la aplicacin desde sus sistemas individuales, mientras que accedern
a los datos en la red.

Nota Despus de dividir una base de datos, las tablas vinculadas en el archivo de la aplicacin harn referencia a la carpeta de su disco fijo en la que
estaban cuando realiz la divisin. Si cambia el nombre de la carpeta o pasa
los datos a otra carpeta -por ejemplo, si los coloca en un disco de red- tendr que actualizar las tablas vinculadas, porque si no Access no podr acceder a ellas.

Para actualizar las tablas vinculadas, utilice el Administrador de tablas vinculadas (en el submen Utilidades de la base de datos del men Herramientas). El Administrador de tablas vinculadas localiza el archivo de datos -su
nueva ubicacin- y vuelve a vincular las tablas para que funcione la base
de datos.

Pruebe la aplicacin Suscriptor definitiva

1. En la carpeta de prcticas del Escritorio de Windows, pulse dos veces el


archivo de base de datos Cap1 1 Suscriptor (asegrese de pulsar el archivo de base de datos de Access, no el archivo de mapa de bits).
Access se abrir en segundo plano. Sin embargo, lo que veremos ser una
pantalla de presentacin personalizada de la base de datos Suscriptor
- e l mapa de bits que hemos renombrado antes. Despus de unos segundos, esta pantalla desaparecer y Access mostrar el formulario de inicio:
el formulario PanelPrincipal. (Vase pantalla en pgina siguiente.)
La base de datos Suscriptor es ahora una aplicacin completa e independiente -tiene su propia pantalla de presentacin, su propia barra de ttulo y una interfaz de usuario personalizada para ayudar a los usuarios a
realizar su trabajo. Para cuando hayan terminado, tiene incluso un mtodo personalizado para salir de Access.

El nombre de nuestra aplicacin aparecer en la barra de ttulo

Base de datos de siiscnpcioiiez:


b~

e e io?mdesea hace,

El formulario de
inrc~oaparecer
en lugar de la
ventana Base de
datos

En el Panel principal, pulse el botn Salir de la aplicacin de suscripciones.


El procedimiento de evento del botn ejecutar el mtodo Quit del objeto DoCrnd y se cerrar Access.

Resumen del captulo


Para

Haga esto

Crear un formulario
panel de control
personalizado

Cree un nuevo formulario en blanco y adale


texto e imgenes para presentar su
aplicacin, despus aada botones de rdenes
para acceder a las tareas habituales de la
aplicacin. Establezca las propiedades de
formato para aplicarle un aspecto de panel
de control.

Conseguir que un
formulario se abra
automticamente
cuando comience la
aplicacin

En el men Herramientas, pulse Inicio y


seleccione el formulario en el cuadro Mostrar
formulario/pgina. Establezca el resto de
opciones de inicio que le interesen y
pulse Aceptar.

""b
Ayuda

Para

Haga esto

Ignorar las opciones de


inicio de una aplicacin

Mantenga pulsada la tecla MAYUS mientras


abre la aplicacin.

Proporcionar una pantalla


de presentacin que
aparezca cuando se abra
la aplicacin desde
Windows

Cree un archivo de mapa de bits con la


pantalla que desea mostrar, gurdelo con
el mismo nombre de la aplicacin y en el
mismo directorio.

Dividir una aplicacin


en dos archivos de base
de datos para facilitar su
mantenimiento

En el men Herramientas, seale Utilidades


de la base de datos y seleccione Divisor de
base de datos.

Proteger los datos


mediante una contrasea

Utilice las rdenes del submen Seguridad del


men Herramientas, especifique una
contrasea para la base de datos o establezca
seguridad de usuario y de grupo.

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Divisin de una aplicacin Divisor de bases de datos


en dos archivos de base
de datos
Uso de caractersticas
permisos
de seguridad para proteger
las bases de datos
Creacin de aplicaciones
multiusuario

base de datos multiusuario en red

AVANCE DEL SIGUIENTE CAPITULO


A lo largo de esta Parte 111 hemos aprendido las tcnicas bsicas para personalizar la interfaz de usuario de una aplicacin. En la parte final de este libro, estudiaremos temas ms avanzados de la programacin con Visual Basic y aprenderemos otras formas de trabajar directamente con los datos y los
objetos. En el Captulo 12 aprenderemos ms sobre la manipulacin de objetos de Access en cdigo Visual Basic -y a conseguir resultados Ilamativos en nuestros formularios, subformularios e informes, trabajando directamente con los objetos.

PARTE IV
Trabajo con datos
y objetos

Exploracin de objetos
y colecciones
Objetivos del capitulo
En este captulo aprender a:
Tiempo estimado:
45 minutos.

i Entender las referencias a objetos en cdigo de Microsoft Visual Basic.

Realizar las mismas acciones sobre todos los objetos de una coleccin.
i Crear un cuadro de lista que permita a los usuarios seleccionar mltiples

elementos de la lista.
i 'Abrir un objeto Recordset y modificar datos en los registros seleccio-

nados.
iCrear un objeto QueryDef

en cdigo que ejecute una consulta de accin y

modifique datos.

Mirando en el paquete, veo que los tallarines que voy a cocinar esta noche
estn hechos de smola de trigo - e l nico ingrediente. La ciencia moderna
me dice que este trigo est compuesto por un gran nmero de pequeos fragmentos llamados molculas. Las molculas, a su vez, estn compuestas de
tomos, que a su vez estn formados por partculas ms pequeas. Afortunadamente, no necesito entender nada de esto para cocinar mi pasta. En cambio, si trabajara en un laboratorio de anlisis nutricional y quisiera entender
exactamente cmo se comportan los tallarines cuando se cuecen, tendra que
enterarme de lo que ocurre bajo la superficie. Imagino que tendra que consultar detalladamente mis libros de qumica antes de poder predecir cmo se
comportarn las molculas y los tomos.

Igual que la qumica, Microsoft Access admite distintos niveles de conocimiento. Como usuario de Access que, por ejemplo, slo se ocupa de introducir datos no necesitar saber qu est pasando por debajo. Pero si pretende ser un desarrollador de aplicaciones, deber saber mucho ms sobre el
mecanismo interno que hace que Access funcione. Igual que la tabla peridica de elementos, el modelo de objetos de Access es un complejo armazn
(framework) de objetos en el que se basa el funcionamiento de todo -y
cuanto mayores sean sus conocimientos sobre este tema, ms potentes sern
las aplicaciones que podr crear.
En este captulo descubrir el armazn de objetos y colecciones que componen cualquier aplicacin de Access. Aprender a utilizar objetos para controlar formularios y datos de forma mucho ms precisa -y de paso, descubrir muchos de los principios fundamentales en los que esta basado Access.
Aunque slo estudiaremos superficialmente los complejos mecanismos que
permiten funcionar a Access, los conocimientos que adquiera sern una buena base para seguir estudiando por su cuenta en el futuro.

Inicie la leccin
i Inicie Access y abra la base de datos Cap12 Problemas de la carpeta de

prcticas.
Aparecer un cuadro de dilogo presentando la aplicacin de base de datos Seguimiento de problemas, con la que trabajaremos en esta cuarta
parte del libro.

PRESENTACIN DE LA APLICACIN SEGUIMIENTO DE PROBLEMAS


/

El archivo de base de datos que acaba de abrir es una completa aplicacin de


Access para el seguimiento de problemas en un grupo de trabajo. El hecho
de que varios usuarios puedan abrir una misma base de datos en una red, hace
de Access un entorno ideal para la creacin de aplicaciones para grupos de
trabajo -sistemas diseados para ayudar a la gente a trabajar juntos en un
entorno de oficina. La aplicacin Seguimiento de problemas es un ejemplo
de este tipo de sistema: permite a los usuarios el tratamiento interactivo de
problemas pendientes relacionados con su trabajo, asignando cada uno de
ellos a los empleados adecuados y consultando la base de datos para determinar qu problemas deben tratarse.

Entre en la aplicacin Seguimiento de problemas

Cada vez que abra la aplicacin, aparecer un cuadro de dilogo solicitando


que introduzca su nombre. Este cuadro de dilogo es un formulario de inicio
creado con la misma tcnica utilizada en el Captulo 11 para la aplicacin
Suscriptor.

AplicaciSn de seguimiento de problemas


Por favor introdurra -u ricimhe
n -eIacoonelu de lb irte

iLortod

I i otoblernas

'wi iii

arobleiii*

El cuadro de dilogo es su entrada en la aplicacin Seguimiento de problemas (y guarda su nombre para utilizarlo ms adelante) y despus abre otro
formulario que muestra los problemas pendientes que estn almacenados en
la base de datos. Como usuario de la aplicacin Seguimiento de problemas,
lo primero que deber hacer es identificarse.

1. En el cuadro combinado, seleccione Brbara Moneo.


El cuadro de dilogo incluye dos botones de orden, que abren un formulario llamado Problemas (Issues).Con uno de ellos se muestran los problemas de todos los empleados; el otro filtra los problemas y permite que
un usuario consulte los problemas pendientes que tiene asignados.

2. Pulse el botn Ver todos los problemas.


El procedimiento de evento Click del botn abrir el formulario Problemas, que mostrar el primer problema de la base de datos. Ahora podremos examinar los problemas actuales, asignarlos a otros empleados o
realizar comentarios relativos a los mismos.
El formulario Problemas est prcticamente completo -no tendremos que
aadirle casi nada. Este formulario incluye varios procedimientos de evento
que lo convierten en una eficaz herramienta para el seguimiento de problemas de la empresa y acciones a llevar a cabo por los empleados. En este captulo, as como en los restantes captulos del libro, estudiaremos parte de sus
caractersticas y aadiremos algunas nuevas a esta aplicacin personalizada.

r
1 '1

El formulario Problemas permite a los usuarios realizar un


seguimiento del estado de sus problemas.. .

15 bornentaiiu

. ..asignar problemas a
otros empleados.. .

Iiritrcidurido por [~erio\Iingene2

Fecha

]04109,98

. ..y realizar comentarios sobre


el desarrollo de un problema

Consejo Si le interesa, puede examinar por su cuenta el cdigo Visual Basic que maneja la aplicacin -utiliza muchas de las tcnicas que hemos
aprendido en captulo anteriores, combinndolas de distintas formas. Para
hacerlo, abra el formulario Problemas en la vista Diseo y examine su mdulo de formulario.

Abra el mdulo Miscellaneous


Aunque iremos viendo poco a poco el formulario Problemas, lo dejaremos
por ahora para estudiar algunos principios generales de Access. Antes de
empezar, tendremos que abrir un mdulo estndar almacenado en la base de
datos Seguimiento de problemas.
I

Ventana Base
de datos

1. Pulse el botn Ventana Base de datos en la barra de herramientas.


2. Pulse el acceso directo Mdulos.
3. Pulse dos veces sobre el mdulo Miscellaneous.
Se abrir Visual Basic, mostrando la seccin de declaraciones y el primer
procedimiento del mdulo.

Nota Observar que la seccin de declaraciones del mdulo incluye una


instruccin Public -se encarga de declarar una variable llamada 1ngCurrentEmpID. Recuerda el cuadro de dilogo que le pidi su nombre en el
procedimiento anterior? Esta variable guarda el nmero de identificacin
(ID) del empleado cuyo nombre introdujimos en el formulario de entrada, y
al tratarse de una variable declarada como Public, estar disponible para toda
la aplicacin, sieppre que necesitemos saber quin es el usuario actual.

CMO FUNCIONAN LOS OBJETOS Y LAS COLECCIONES


Lo crea o no, todo el cdigo Visual Basic que ha escrito hasta ahora se encuentra dentro de un armazn lgico denominado modelo de objetos. El modelo de objetos es una jerarqua de todos los elementos utilizados en la aplicacin -formularios con sus controles, tablas con sus campos, controles y
propiedades de stos. Esta es la representacin grfica del modelo de objetos de Access que proporciona la ayuda interactiva.
Objetos de Microsoft Access

Application
Forrns (Form)
Controls (Control)

Muchos de los objetos de Access contienen


colecciones de otros
objetos, creando una
jerarqua compleja

Assistant

Reports (Report)

Controls (Control)

1 Modules (Module)

ComrnandBars

F~leSearch

COMAddlns

AnswerWizard

Languagesetting

CurrentData

References (Reference)

WebOptions
Screen

$
Leyenda
Objetos y colecciones
Solo objetos

En esta seccin, exploraremos algunas partes del modelo de objetos y escribiremos cdigo Visual Basic para demostrar cmo funciona. Despus, a medida que avance el captulo, estudiaremos algunos usos prcticos para objetos complejos con los que an no hemos trabajado.
Pruebe el Examinador de objetos

Hasta ahora, hemos probado muchas de las herramientas de Visual Basic que
tenamos a nuestra disposicin. Pero hay una ms que an debemos probar
-el Examinador de objetos. El Examinador de objetos es un cuadro de dilogo que muestra todos los objetos disponibles en nuestra aplicacin y las relaciones entre ellos, adems de permitirnos consultar la ayuda interactiva
para cada uno.
Examinador de

objetos

1. Pulse el botn Examinador de objetos en la barra de herramientas.


Aparecer el Examinador de objetos.

2. Arrastre la esquina inferior derecha de la ventana del Examinador de objetos para hacerla un poco ms grande.

3. Pulse la flecha junto al cuadro combinado Proyecto/Biblioteca (en el que


aparece el texto <Todas>) para mostrar la lista.

e cr

"\

& AcCloseSave
rdP AcColorlndex
AcCommand

'8 AcControlType

61D AcDataAccessPag

-7$] A-ALL

Para acortar la
lista de objetos
en el
Examinador de
objetos,
seleccione la
biblioteca de
objetos que
desea
inspeccionar

Esta lista incluye las bibliotecas de objetos y las bases de datos de objeto de las que Visual Basic tiene conocimiento. Cualquier cosa que escribamos en cdigo o en una expresin -objetos, campos, mtodos, propiedades, funciones y dems elementos- pertenecen a alguno de estos
grupos. En la siguiente lista se describen las cuatro bibliotecas de objetos
de las que debemos saber algo ms.

Access La biblioteca de objetos Access contiene los objetos, mtodos y


constantes que utilizamos para controlar la interfaz de usuario de nuestra
aplicacin, como formularios, informes y controles. Esta biblioteca incluye adems el objeto DoCmd y sus mtodos.
ADODB La biblioteca de Objetos de Datos ActiveX de Microsoft
(ADO) contiene los objetos, mtodos y constantes que utilizamos para
trabajar directamente con archivos de base de datos, as como los datos
guardados en las mismas. ,
Cap12 Problemas.mdb Nuestra aplicacin es tambin una biblioteca de
objetos. Contiene los formularios, informes y mdulos de la base de datos, junto con sus controles, propiedades y cualquier procedimiento que
contengan. Visual Basic controla los objetos de nuestra aplicacin exactamente igual que el resto de sus objetos incorporados, por lo que podremos hacer referencia a ellos en el cdigo -utilizando una funcin en un
~ d u l opor
, ejemplo- igual que si tratramos con los objetos de las bibliotecas VBA o Access.

VBA La biblioteca de objetos Visual Basic para Aplicaciones (VBA)


contiene todas las funciones y constantes de Visual Basic que hemos visto, como, por ejemplo, la funcin MsgBox.
El uso del Examinador de objetos nos permite explorar cada una de estas
bibliotecas de objetos. En este captulo aprenderemos a trabajar con algunos de los objetos ms importantes de las bibliotecas Access y
ADODB; la mayora de estas tcnicas sern aplicables tambin a otros tipos de objetos.

Nota El cuadro combinado Proyecto/Biblioteca no siempre contiene las


mismas entradas. Si agrega bibliotecas de objetos al proyecto Visual Basic
utilizando la orden Referencias, como se describi en el Captulo 10, Visual
Basic incluir esos objetos en el Examinador de objetos. Por ejemplo, en un
proyecto que contenga una referencia a la biblioteca de Objetos de Datos de
Access (DAO), en la lista Proyecto/Biblioteca aparecer DAO.

4. En la lista, seleccione Cap12 Problemas.


El Examinador de objetos mostrar, en la lista Clases que aparece a la izquierda, los formularios, informes y mdulos que contiene la aplicacin
Problemas. La lista Clases incluye tambin una entrada globales, con los
elementos que estn disponibles en toda la aplicacin.

5. Seleccione Messages en la lista Clases.

Cuando pulsa una entrada, los miembros de esa clase -sus propiedades,
mtodos (procedimientos Sub y Function) y constantes- se muestran en
la lista Miembros que aparece a la derecha. Cada tipo de miembro tiene
un icono diferente, para que sea ms fcil distinguirlos.

Seleccione una clase, como, por ejemplo, este


mdulo de nuestra aplicacin ...

t+tiembrusde Ilessayes'
A coiiApliNaiiie

ja ~i~eport-ISSU~S

ll ara ver sus


miembros,
como las
constantes y los
procedimientos,
aue contiene el

Observar que los miembros del mdulo Messages son una constante,
conAppName, y dos procedimientos, Confirm y DisplayMessage. Corresponden a los procedimientos que creamos en el Captulo 5, que se han
incluido tambin en la aplicacin Seguimiento de problemas.

6. Seleccione Confirm en la lista Miembros.


En el panel inferior del Examinador de objetos aparece informacin sobre la funcin Confirm, incluyendo sus argumentos y el tipo de datos que
devuelve.

Consejo Si desea ver un procedimiento o una constante en la que est interesado, pulse dos veces sobre su nombre en el Examinador de objetos. Visual
Basic abrir la ventana Cdigo y se ver directamente el cdigo que define
8
el objeto.

Pase al modelo de objetos de Access

El Examinador de objetos proporciona un modo sencillo de acceder al contenido de una aplicacin que incluye muchos mdulos y procedimientos. Sin

embargo, es probable que nos resulte ms til para explorar los modelos de
objetos Access, D A 0 y VBA, dado su gran tamao.

1. En el cuadro combinado Proyecto/Biblioteca, seleccione Access.


El Examinador de objetos mostrar las clases de objetos pertenecientes a
Access. La entrada <globales>, que est seleccionada por omisin, es
un buen lugar para empezar. La mayora de los miembros de este grupo
son constantes, algunas de las cuales ya las hemos utilizado en los captulos anteriores para especificar argumepos en el cdigo. Sin embargo,
si desplaza la lista hacia abajo, cerca del final empezar a encontrar mtodos, como RunCommand y SetOption, y propiedades, como MenuBar
y Visible.

2. Desplace la lista Clases y seleccione DoCmd.


Esta parte de la lista Clases contiene objetos de Access que nos resultan
ms familiares. Aqu encontramos objetos como ComboBox, CommandButton y Form, que ya hemos utilizado varias veces. Al seleccionar
DoCmd, en la lista Miembros se muestran todos los mtodos de este objeto, muchos de los cuales ya los hemos visto en captulos anteriores.

3. Seleccione Close en la lista Miembros.

DataAccessPage

Mtodos del
objeto DoCmd

Igual que cuando visualizamos los elementos de la aplicacin Seguimiento de problemas, en el panel inferior del Examinador de objetos se
muestra informacin sobre el elemento seleccionado. En este caso, el
Examinador de objetos muestra los argumentos que se pueden utilizar
con el mtodo Close.

Utilice el Examinador de objetos para obtener ayuda interactiva

A continuacin, echaremos un vistazo a la clase Form, una de las ms importantes en la jerarqua de Access. Despus pasaremos directamente del
Examinador de objetos a la ayuda interactiva sobre el objeto que estemos
viendo.
1. En el cuadro de lista Clases, seleccione Form.
La lista Miembros de la derecha mostrar las propiedades y los eventos
que pertenecen a los formularios -reconocer el evento AfterUpdate y
la propiedad AllowEdits, entre otros. Si recorremos la lista, podremos ver
algunos de los mtodos que hemos utilizado en las lecciones anteriores,
como GoToPage, Refresh y Requery.

2. En la lista Miembros, seleccione Controls.


Controls es el nombre de una coleccin de objetos. Cada formulario tiene su coleccin, y contiene -lo adivin- los controles incluidos en dicho formulario.

Ayuda

El botn Ayuda que aparece en la parte superior de la ventana (el que tiene el signo de interrogacin) nos proporciona una sencilla forma de acceder a la ayuda interactiva sobre el elemento seleccionado. Para los objetos de Access, como podr ver, el uso de la ayuda interactiva es una de
las mejores formas de explorar el modelo de objetos.

3. Pulse el botn Ayuda en el Examinador de objetos.


El tema de ayuda sobre la coleccin Controls aparecer en una ventana
aparte. Esta ayuda nos proporciona una gran cantidad de informacin sobre cmo utilizar la coleccin y permite acceder a un ejemplo de cdigo

Coleccin Controles (Controls)


Veatambin

Ejemplo

Propiedades

Yetodiir

L,en*os

Grfico del
modelo de
objetos
La coleccin C o n t r o l s ( C o n t r o l e s ) contiene todos los controles de un formulario. informe
o seccin, dentro de otro control, o conectado a otro control. La coleccin C o n t r o l s
t
(Controles) e s un miembro de un objeto F a r m (Formulario), R e ~ o r (Infornie),
S e c t i o n ( S e c c i i n ) o C o n t r o l . En el diagrama siguiente r e ilustra la relacin entre la
coleccin C o n t r o l s (Controles) y un objeto F o r m ( F o r m u l a r i o ) o R e p o r t ( I n f o r m e ) .

Comentarior
Puede enumerar controles individuales, cnntarlor y establecer sus propiedades en la
coleccion C o n t r o l s (Controles) Por ejemplo, puede enumerar la coleccion C o n t r o l s
(Controles) de un formulario particular y establecer la propiedad H e i g h t ( A l t u r a ) de
cada control en un valor especificado

Visual Basic. El tema muestra tambin una representacin grfica de la


porcin del modelo de objeto a la que pertenece la coleccin, que podremos utilizar para recorrer otros temas de ayuda.
Tal como muestra el grfico del modelo de objeto, el objeto Application se
encuentra en lo ms alto de la jerarqua y un poco ms abajo se encuentra
la coleccin Controls, que a su vez contiene objetos Control individuales.
El cuadro Multiple Objects (Mltiples objetos) indica que son muchos los
objetos que tienen una coleccin Controls +omo explica el texto que sigue al diagrama, entre ellos se encuentran los objetos Form 1Report.

4. Cierre la ventana de ayuda.

5. En el Examinador de objetos, pulse el botn Cerrar.

Adems de mostrar los objetos disponibles y de permitirnos saltar a la


ayuda interactiva, el Examinador de objetos incluye las siguientes ca
ractersticas que podremos utilizar:
Si nos interesa pegar en nuestro cdigo Visual Basic algn fragmento de texto que aparezca en el Examinador de objetos -por
ejemplo, el nombre de un mtodo o una constante- podemos uti
lizar el botn Copiar del examinador para copiarlo al Portapapeles
Tambin podemos seleccionar el texto que aparece en el panel inferior de la ventana, para as copiar, por ejemplo, la lnea con la sintaxis del mtodo que est seleccionado en la lista Miembros. Una
vez copiado el texto, pasaramos a la ventana Cdigo y selecciona
ramos la orden Pegar.
Podemos buscar texto en una biblioteca de objetos o en todas las bi

el botn Buscar (el que tiene el dibujo de unos prismticos).

REFERENCIA A OBJETOS Y COLECCIONES


En las lecciones anteriores hemos utilizado bastantes objetos -y hemos
aprendido a referirnos a ellos en nuestro cdigo. Por ejemplo, para hacer referencia al formulario Contactos de la Parte 1, utilizamos la expresin
Forms!Contactos, y para nombrar al control IDContacto de ese formulario
utilizamos la expresin Forms!Contactos!lDContacto.De hecho, la mayora
de las referencias a objetos que utilizaremos en el cdigo sern tan simples
como stas. An as, como las utilizaremos con mucha frecuencia, conviene
entender de forma ms completa cmo funcionan las referencias a objetos.
Como veremos ms adelante en esta captulo, no todas las expresiones que
incluyen objetos son tan sencillas como las que hemos visto hasta ahora.
Cuando hacemos referencia a los objetos de una coleccin, como la coleccin Forms, podemos utilizar distintos modos de referencia alternativos.
Una forma de referenciar objetos es mediante nmeros. Los objetos de una
coleccin estn numerados consecutivamente empezando desde cero, por lo
que podemos hacer referencia a un objeto utilizando su nmero entre parntesis. Por ejemplo, el primer objeto de formulario de la coleccin Forms es
Forms(O),el segundo es Forms(1) y as sucesivamente. Pero hay ms formas
de referenciar un miembro de una coleccin -por nombre, o utilizando el
operador signo de exclamacin (!). Cada uno de estos mtodos sigue reglas
ligeramente diferentes.
En lugar de hablar sobre ellas, quiz sera mejor probar estos tipos de referencias para entender cmo funcionan. En esta seccin, probaremos varios
tipos de referencias a objetos utilizando la ventana Inmediato.
Pruebe referencias a objetos en la ventana Inmediato

1. Si la barra de herramientas Depuracin no est visible, apunte a Barras


de herramientas en el men Ver y seleccione Depuracin.
Ventana
Inmediato

2. Pulse el botn Ventana Inmediato en la barra de herramientas.


3. Escriba ?Forms.Count y pulse INTRO.
Aparecer un 1,el nmero de formularios que hay en la coleccin Forms.
El formulario que est abierto es el formulario Problemas (Issues).
El primer objeto de una coleccin es el objeto nmero 0, al que podemos
referenciar de esta forma. Veamos cul es el nombre del formulario utilizando la propiedad Name.

4. Sustituya la primera lnea de la ventana Inmediato por ?Forms(O).Name


y pulse INTRO.(No es necesario que vuelva a escribir la lnea entera, bastar con que edite la existente.)

La ventana Inmediato devolver el nombre Issues (Problemas), correspondiente al primer formulario de la coleccin Forms.

Para hacer referencia a un miembro de una coleccin por su nombre,


podemos utilizar un valor de cadena en lugar del nmero del objeto
-por ejemplo, podemos utilizar Forms(lssues)para hacer referencia al formulario Problemas. Utilicemos ahora la propiedad ActiveControl de la coleccin Forms para ver qu control del formulario
lssues est activo.

5. Reemplace la primera lnea por ?Forms(Issues).ActiveControl.


Name y pulse INTRO.
La ventana Inmediato mostrar Title (Ttulo), el nombre del campo que
tiene el foco cuando abrimos el formulario Problemas.
Observe que la tcnica de utilizar una cadena entre parntesis despus de
una coleccin tiene otro importante uso: si hemos guardado el nombre de
un objeto en una variable de cadena, podremos utilizar esa misma sinta, xis para referirnos al objeto. Por ejemplo, si el nombre del formulario que
queramos utilizar antes hubiera estado guardado en una variable llamada strNombreForm, podramos utilizar la expresin Forms(strNomhreForm).ActiveControl.Name para referirnos al control activo de dicho
formulario.
Como es lgico, si sabemos el nombre de un formulario, bastar con colocarlo despus del signo de exclamacin como hemos hecho hasta ahora. A continuacin, probaremos una referencia a la coleccin Controls,
una coleccin que debe tener cualquier objeto informe o formulario. Para
hacer referencia a cualquier coleccin, escribiremos el nombre del objeto al que pertenece -su objeto padre- seguido de un punto y el nombre
de la coleccin. En el siguiente ejemplo, Forms!Issues es el objeto padre,
mientras que Controls es la coleccin que le pertenece.

6. Sustituya la primera lnea por ?Forms!Issues.Controls.Count y pulse


INTRO.

La ventana Inmediato mostrar 24, el nmero de controles del formulario Issues.


A continuacin haremos referencia al valor del tercer objeto de la coleccin Controls, el control Title.

7. Sustituya la primera lnea por ?Forms!Issues.Controls(2) y pulse INTRO.


Como el control nmero 2 del formulario Issues es el cuadro de texto Ttulo (Title),la ventana Inmediato mostrar el ttulo del problema que actualmente muestra el formulario Problemas (Issues). La referencia que
hemos utilizado es equivalente a Forms!lssues.Controls(Title). Tambin es equivalente a Forms!lssues!Title, el sistema de referencia al que
estamos ms acostumbrados. Esto se debe a que Controls es la coleccin
predeterminada para cualquier objeto formulario. Cuando utilizamos el
signo de exclamacin, Access asume que lo que viene a continuacin es
un miembro de la coleccin predeterminada Controls.
A continuacin, haremos referencia al subformulario del formulario Issues. Para hacerlo, utilizaremos el control del subformulario, Forms!lssues!Comments. Como a lo que queremos referirnos es a las propiedades
del subformulario que est mostrando el formulario Problemas, en lugar
del propio control del subformulario, escribiremos la propiedad Form a
continuacin de la referencia al control -y despus la propiedad cuyo
valor queremos averiguar.

8. Sustituya la primera lnea por ?Forms!Issues!Comments.Form.Name


y pulse INTRO.
La ventana Inmediato mostrar ComrnentsSubform, el nombre del formulario almacenado en la base de datos Seguimiento de problemas.
Existe una excepcin a la regla de que para los subformularios debemos
utilizar la propiedad Form para referirnos al formulario. Si queremos referirnos a un control de un subformulario, podemos ignorar la palabra
clave Form +stbhar la referencia un poco ms corta.

9. Sustituya la primera lnea por ?Forms!Issues!Comments!Comment y


pulse INTRO.
La ventana Inmediato mostrar el texto del primer comentario que aparece en el subformulario. Esta expresin viene a decir, En el control Comentarios (Comments)del formulario Problemas (Issues),jcul es el valor del campo Comentario (Comment)?

10. Cierre la ventana Inmediato.


Las referencias a objetos y a sus propiedades requieren cierta prctica. Antes
de escribir cdigo que utilice un nuevo tipo de expresin, conviene utilizar
la ventana Inmediato para comprobar la sintaxis. Si no obtiene el valor es-

perado o si Visual Basic muestra un error cuando introduzca la referencia,


consulte la ayuda interactiva para ver ejemplos de expresiones que utilizan
el tipo de objeto que le interesa.
Ahora que ya hemos descubierto algunos mtodos para hacer referencia a las
colecciones y a los objetos que contienen, estamos preparados para escribir
cdigo que utilice dichas colecciones y objetos. En la siguiente seccin, veremos referencias a objetos en funcionamiento y aprenderemos tcnicas para
guardar objetos en variables, de forma que podamos llevar a cabo acciones
*
utilizando dichos objetos.

USO DE LA INSTRUCCIN

FOR EACH CON U N A COLECCIN

Los objetos de una coleccin comparten muchas propiedades y caractersticas, por lo que a menudo nos interesar aplicar las mismas acciones en todos
los objetos de la coleccin. Por ejemplo, podramos querer cambiar una propiedad especfica, como el color del texto, para todos los controles de un for-.
mulario. Cuando queramos ejecutar el mismo bloque de cdigo para todos
los objetos de una coleccin, rodearemos el bloque con las instrucciones For
Each y Next.
Escriba un procedimiento que asigne las propiedades de los controles

Para ver cmo funciona la instruccin For Each, escribiremos un procedimiento que cambie la propiedad ForeColor -el color del texto- de todas
las etiquetas del formulario Issues. Crearemos el nuevo procedimiento, llamado CambiarColorEtiqueta, en el mdulo Miscellaneous. La ventana Cdigo seguir mostrando la seccin Declaraciones, que contiene tres lneas de
cdigo. Comenzaremos por introducir el nuevo procedimiento debajo de la
instruccin Public.

1. En la ventana Cdigo, desplcese hasta el final del mdulo Miscellaneous y pulse debajo de la ltima instruccin End Function para colocar
el punto de insercin.

2. Escriba el siguiente cdigo, incluyendo la lnea de encabezamiento Sub.


(Cuando escribimos la instruccin Sub, Microsoft Access introduce la 1nea End Sub automticamente.)
Sub CambiarColorEtiqueta(strNombreForm As String, IngCdigoColor
As Long )
' Cambia el color de las etiquetas del formulario Issues.
Dim ctl As Control

For Each ctl In Fonns(strNombreForm).Controls


If TypeOf ctl 1s Label Then
ctl.ForeColor = IngCdigoColor
End If
Next ctl
End Sub

Esto es lo que hace el cdigo.


iEl

encabezamiento del procedimiento Sub declara dos argumentos:


strNombreForm, que tiene el nombre del formulario al que se le quieren cambiar las etiquetas, y ZngCdigoColor, que guarda el nmero de
cdigo del color que aplicaremos a las etiquetas. El argumento 1ngCdigocolor utiliza el tipo de datos entero largo, porque ForeColor acepta este tipo de valores.
La lnea Dim del procedimiento declara una variable objeto. Cuando
queremos llevar a cabo acciones sobre objetos, como tablas, formularios o controles, podemos almacenar las referencias a ellos, de la misma forma que almacenamos cualquier otro tipo de valor en una variable. Esta variable tiene el tipo de datos Control, que slo puede guardar
un objeto de tipo control.

iLa

siguiente instruccin inicia un bucle, un mecanismo para repetir un


bloque de cdigo una serie de veces. Este bucle utiliza las instrucciones
For Each y Next -uno de los tipos de bucles permitidos en Visual Basic- que conseguirn que el procedimiento realice la misma serie de acciones en todos los controles del formulario. Al final de cualquier instruccin For Each, despus de la palabra clave In, se escribe el nombre de
la coleccin que queremos recorrer, en este caso, la coleccin Controls
del formulario cuyo nombre indique la variable strNornbreFonn. La palabra clave In siempre va precedida por una variable, en este caso ctl, que
guarda cada objeto de la coleccin a medida que el cdigo la recorre.
Cuando se utilice este procedimiento sobre el formulario Issues, el bloque de cdigo que se encuentra entre las instrucciones For Each y Next
se ejecutar 24 veces, una por cada control del formulario. Cada vez que
se ejecute, la variable ctl representar a un control distinto del formulario Issues.

iEl bloque If ...Then que est dentro del bucle comprueba si el control ac-

tual es una etiqueta. Para hacerlo, utiliza la palabra clave TypeOf, que nos
permite comprobar el tipo de control guardado en la variable. Si el control
no es una etiqueta, el cdigo sigue en la instruccin Next, y no hace nada.
iSi el control actual es una etiqueta, se ejecuta la lnea central, que asig-

na a la propiedad ForeColor del control el valor que hemos pasado en


el argumento 1ngCdigoColor.

La instruccin Next incluye a ctl, la variable que se incrementa cada


vez que se ejecuta el bucle. Podramos describir esta variable como si
dijera, Ya hemos terminado con este control. Por favor, pase al siguiente. Cuando Visual Basic termina de ejecutar el bloque de cdigo para todos los controles de la coleccin, finaliza el procedimiento.

3. Pulse el botn Guardar de la barra de herramientas.

Guardar

4. Cierre la ventana Cdigo del mdulo Miscellaneous.


Ejecute el procedimiento desde la ventana Inmediato

Ahora podemos cambiar todos los controles de etiqueta del formulario de


una vez ejecutando el procedimiento desde la ventana Inmediato.

1. Pulse el botn Ventana Inmediato en la barra de herramientas Depura-

Ventana
Inmediato

cin.

2. En una lnea nueva de la ventana Inmediato, escriba CambiarColorEtiqueta Issues, vbBlue y pulse INTRO.
Se ejecutar el procedimiento, que cambiar el color de todas las etiquetas del formulario Issues a azul (la constante vbBlue proporciona el cdigo de color correcto para el azul, con lo cual no necesitamos conocerlo).

3. Cambie a Access.
Como podr ver, las etiquetas del formulario Problemas (Issues) ahora
son azules.

4. Vuelva a Visual Basic.

5. Sustituya la segunda lnea de la ventana Inmediato por Cambiarcolor


,

Etiqueta Issues, vbBlack y pulse INTRO.

6. Cambie a Access.
Las etiquetas volvern a ser negras.
Este tipo de procedimiento es til para proporcionar a los usuarios la posibilidad de personalizar formularios mientras se ejecuta la aplicacin. En la siguiente seccin utilizaremos algunas de estas herramientas -las variables
objeto y la instruccin For Each- para aadir caractersticas potentes a la
aplicacin Seguimiento de problemas.

USO DE UN CUADRO DE LISTA DE SELECCIN MLTIPLE


Hasta ahora, hemos utilizado cuadros de lista que permitan a los usuarios seleccionar un solo elemento. Como podr ver, tambin podemos crear cuadros

de lista que permitan seleccionar ms de un elemento cada vez. La base de


datos de prcticas ya incluye un formulario que contiene un cuadro de este
tipo. El formulario, llamado Reassigner (Reasignador), es un cuadro de dilogo diseado para permitir a los usuarios reasignar uno o ms problemas a
otros empleados. A diferencia de los cuadros de lista normales, un cuadro de
lista de seleccin mltiple requiere que escribamos cdigo extra para acceder a los elementos seleccionados. En el resto de este captulo, aadiremos
cdigo al formulario Reassigner para que funcione correctamente.
Para conseguir que un cuadro de lista permita seleccin mltiple, estableceremos su propiedad Seleccin mltiple (MultiSelect). La propiedad tiene tres
posibles valores: Ninguno, Simple y Extendido. Si asignamos a la propiedad
el valor Ninguno, los usuarios slo podrn seleccionar un elemento cada vez;
si el valor es Simple, los usuarios podrn pulsar varios elementos para seleccionarlos; si el valor es Extendido, tambin se podrn seleccionar varios elementos pero los usuarios debern utilizar la combinacin de teclas MAYUS y
CTRL mientras pulsan los elementos. El cuadro de lista con el que trabajaremos en el formulario Reassigner tiene en su propiedad Seleccin mltiple el
valor Simple.
Abra el formulario Reassigner

Antes de aadir cdigo al formulario Reassigner, veamos cmo funciona de


momento. Para abrirlo, utilizaremos una orden de men de la barra de mens personalizada del formulario Issues.
1. En el men Herramientas, seleccione Reasignar problemas.
Se abrir el formulario Reasignador (Reassigner).
2. En el cuadro combinado Ver problemas asignados a, seleccione Brbara
Moneo.
El cuadro de lista del formulario mostrar los cuatro problemas actualmente asignados a ese empleado.

Pruebe el cuadro de lista de seleccin mltiple

En los cuadros de lista que hemos utilizado hasta ahora en este libro, cuando
se pulsa un elemento, se quita la seleccin del elemento que la tuviera antes
-el cuadro de lista slo puede tener un valor cada vez. En este cuadro de lista, por contra, podemos seleccionar ms de un valor.

1. Pulse el problema nmero 4 de la lista (el segundo) y despus pulse el


problema nmero 8 (el tercero).
Cuando un cuadro de lista slo tiene un valor, podemos acceder al mismo mediante una referencia al propio cuadro de lista -por ejemplo,
como el nombre del cuadro de lista es IssueList, la expresin Forms!Reassigner!IssueList devolver el nmero de identificador del problema seleccionado. Por el contrario, cuando se utiliza un cuadro de lista de seleccin mltiple, para saber los elementos que estn seleccionados
deberemos utilizar una coleccin especial llamada ItemsSelected. Utilizaremos la ventana Inmediato para ver cmo funciona:
2. Cambie a Visual Basic.

Para hacer referencia a los elementos de la lista, deberemos utilizar una


expresin bastante complicada. No se preocupe, en realidad es similar a
las referencias a las que estamos acostumbrados.

3. En una lnea nueva de la ventana Inmediato escriba ?Forms!Reassigner!IssueList.ItemsSelected.Count y pulse INTRO.


Para interpretar la expresin, pruebe a leerla de derecha a izquierda
-pregunta por el nmero de elementos de la coleccin ItemsSelected del
control IssueList del formulario Reassigner. La ventana Inmediato mostrar un 2, el nmero de elementos que hemos seleccionado en el cuadro
de lista.

1
(

C o n s u l t a d o c o n e l Consejo G e n e r a l . Debemos a r r e g l a r
ConunentsSubform
Problema c o n e l nombre d e l p r o d u c t o
24

Title
CambiarColorEtiqueta "Issues",
CBI1U31arColorEtiqueta " I s s u e s " ,

vbBlue
vbBlack

A continuacin probaremos otras expresiones que nos dirn cules son


los elementos seleccionados. La coleccin ItemsSelected guarda real-

mente los nmeros que corresponden a las posiciones de los elementos


seleccionados en la lista. Igual que los elementos de una coleccin, las
posiciones en la lista se numeran comenzando por cero, por lo que el primer elemento tendr la posicin 0, el segundo la 1 y as sucesivamente.
Por tanto, el nmero del primer elemento estar guardado en ItemsSelected(O),el segundo en ItemsSelected(I), etc.

4. Sustituya la lnea por ?Forms!Reassigner!IssueList.ItemsSelected(O)


y pulse INTRO.
La ventana Inmediato mostrar un 1, la posicin del primer elemento que
hemos seleccionado. (Hemos seleccionado el segundo elemento de la lista, cuya posicin es 1.) Podramos haber supuesto que la coleccin ItemsSelected contendra los valores reales de los elementos seleccionados,
pero no es as -slo contiene sus posiciones en la lista. Para averiguar
el valor de cada elemento seleccionado, en este caso, el IssuelD de cada
problema, deberemos utilizar el mtodo ItemData, a partir del nmero de
posicin del elemento que acabamos de obtener.

5. Sustituya la lnea por ?Forms!Reassigner!Is~ueList.ItemData(l)y


pulse INTRO.

La ventana Inmediato mostrar un 4, que es, por fin, el identificador


(IssueID) del primer problema que hemos seleccionado.

6. Cierre la ventana Inmediato.


Aunque el proceso de localizacin de elementos seleccionados en el cuadro
de lista es complicado, merece la pena esforzarse para aprovechar la potencia de los cuadros de lista de seleccin mltiple. En la siguiente seccin, aadiremos cdigo que pondr en funcionamiento el cuadro de lista, utilizando
los conceptos de cuadro de lista que hemos aprendido para cambiar los datos de los problemas seleccionados por el usuario.

T R A B A J O DIRECTO CON OBJETOS DE ACCESO A DATOS


Cuando los usuarios modifican datos en un formulario vinculado a una tabla
o consulta -el formulario Issues, por ejemplo-Access realiza automticamente los cambios en las tablas correspondientes. Hasta ahora, hemos permitido a Access que se encargue de la mayor parte del trabajo en la sombra.
No obstante, cuando necesitamos tomar el control de lo que est ocurriendo
en la base de datos, podemos trabajar directamente con los datos escribienido cdigo que utilice una de las dos bibliotecas de objetos de base de datos
que proporciona Access: la biblioteca de Objetos de acceso a datos (DAO) y
la biblioteca de Objetos de datos de ActiveX (ADO). En los Captulos 7 y 8
utilizamos el objeto Recordset D A 0 para agregar y localizar registros en una
base de datos. En esta seccin, utilizaremos cdigo ADO para poner en fun-

cionamiento el formulario Reassigner. Como ver, el nombre concreto del


archivo de biblioteca de objetos que proporciona la mayor parte de la funcionalidad ADO es ADODB -y eso ser lo que pongamos en el cdigo.
El formulario Reassigner tiene dos botones de orden cuyos procedimientos
de evento an no estn completos: Reasignar seleccionados y Reasignar todos. Cuando un usuario pulsa el botn Reasignar seleccionados, queremos
que se abra la tabla Issues y que se actualicen nicamente aquellos registros
que el usuario ha seleccionado en el cuadro de lista. Para hacerlo, utilizaremos un objeto Recordset. Cuando un usuario pulsa el botn Reasignar todos,
queremos que se actualicen todos los registros de la tabla Issues que tengan
un cierto valor en el campo Asignado a (AssignedTo). Para realizar estas dos
operaciones desde el cdigo, necesitamos aprender nuevas tcnicas para trabajar con objetos.

D A 0 y ADO: por qu dos modelos de objetos de base de datos?

Como si no fuera ya suficientemente compleja la programacin de bases de datos con un solo conjunto de estndares, Access ahora proporciona dos estndares para trabajar directamente con los datos. La biblioteca de Objetos de acceso a datos (DAO), heredada de versiones
anteriores de Access, fue diseada especficamente para ser utilizada
con la mquina de base de datos de Access (tambin conocida como
motor de base de datos Jet). La biblioteca de Objetos de datos ActiveX (ADO), por el contrario, est diseada para ser ms genrica y poder trabajar con cualquier base de datos a la que pueda conectar Access.
Es importante ser consciente de cul de los modelos de objetos se utiliza en el cdigo, ya que los objetos, las propiedades y los mtodos que
se utilicen sern distintos en los dos modelos. La biblioteca de objetos
que se utiliza est determinada por la referencia a biblioteca de objetos del proyecto Visual Basic para la base de datos. Las nuevas bases
de datos que se creen con Access harn referencia a la biblioteca ADO.
Por otro lado, si se actualiza una base de datos de una versin anterior
de Access, o se crea una base de datos con el Asistente para bases de
datos, el proyecto automticamente contendr una referencia a la biblioteca de objetos DAO. En cualquier caso, se pueden especificar las
bibliotecas que se quieren utilizar en el cuadro de dilogo Referencias
(que se describi en el Captulo 10).Si se incluye una referencia a ambas bibliotecas de objetos, se pueden incluso utilizar ambas en la misma aplicacin, definiendo conjuntos de registros en el cdigo con los
tipos de objetos DAO.Recordset y ADODB.Recordset.

(contina)

(Continuacin)

de la jerarqua D A 0 comienza con el objeto DBEngine, que representa al motor de base de datos de Access. El objeto DBEngine tiene una
coleccin Workspaces, que a su vez tiene una coleccin Databases, con
muchas otras colecciones dentro, y as hacia abajo. La jerarqua ADO
rompe la cadena un poco ms rpidamente. Comienza con el objeto
Connection, similar al objeto Database de DAO, pero que puede representar una conexin con cualquier motor de base de datos.

Obletos y colecc~ones

Ambos modelos de objetos


tienen un objeto Recordset
para trabajar con los datos
de las tablas y las consultas,
pero el resto de los objetos
de la jerarqua son dist~ntos

' O b l e t o s solo

,No lo tiene claro? Comience familiarizndose con ADO siguiendo

LOCALIZACIN Y MODIFICACIN

DE DATOS E N UN RECORDSET

Nuestra primera tarea consistir en aadir cdigo al botn Reasignar seleccionados. Siempre que un usuario pulse este botn, deberemos abrir la tabla
Issues, colocarnos en cada uno de los registros seleccionados y cambiar el
valor del campo AssigndeTo por otro nmero de empleado: el que haya seleccionado el usuario en el cuadro combinado NewAssignee (Reasignar problemas a).
Cuando queremos cambiar un registro de una tabla directamente usando
ADO, primero abrimos un objeto Recordset. Despus, pasamos al registro
que queremos modificar. Si el recordset est basado en una tabla de una base
de datos de Access, como la tabla Issues, la forma ms rpida de hacerlo es
utilizando el mtodo Seek. Despus llevamos a cabo la modificacin utilizando el mtodo Update para establecer los valores en los campos que queremos modificar. En esta seccin aadiremos cdigo que lleve a cabo estos
procesos para cada uno de los registros seleccionados por el usuario en el
cuadro de lista IssueList.
Edite el procedimiento de evento Click
del botn Reasignar seleccionados

El botn Reasignar seleccionados ya tiene un procedimiento de evento


-slo le falta el cdigo que reasigna los problemas a otros empleados.
Como ya est en Visual Basic, puede utilizar la ventana Proyecto para abrir
el mdulo del formulario Reassigner.

1. En la ventana Proyecto de Visual Basic (en la esquina superior izquierda


de la ventana de Visual Basic), pulse dos veces sobre Form-Reassigner.
Visual Basic abre el mdulo de formulario del formulario Reassigner.
Como ya dijimos antes, el formulario Reassigner ya est casi terminado.
Incluso tiene cdigo que mantiene sincronizado el control IssueList con
el empleado actualmente seleccionado. Ahora llega el momento de darle
unos toques finales al procedimiento del evento Clic para el botn Reasignar seleccionados.

2. Pulse la flecha del cuadro Objeto de la ventana Cdigo - e l que se encuentra arriba a la izquierda en la ventana Cdigo y debe mostrar (General)- y luego seleccione ReassignSelected.
La ventana Cdigo pasa al procedimiento ReassignSelected-Click.
Como puede ver, el procedimiento ya contiene bastantes lneas de
cdigo.
El cdigo que ya est presente hace varias cosas.

Ux11-

un re,-ordset y reasignar las cuescioncl s r i e c c i a n a , l i s

A * ~ g u r ~ rde
~ e,que PJeulssionee tiene un valor asignado
1t IsNulL(NewLssignee) Then
DiaplayMessage "Debe selceeionar un empleada a q u e " aslgnar
Exlt Sub

Lnd Ii

Ii 1ss~eList.Ir.emsSeleeted.Count O Then
D~splayHe~sage
"Debe seleccionar cuestione3 a reasignar."

i La instruccin Dim declara una variable que se utiliza ms tarde para

guardar el texto de un mensaje.


El primer bloque de cdigo comprueba que el cuadro combinado NewAssignee tenga algn valor -si no es as, no sabremos a qu usuario reasignar los problemas. Si el cuadro combinado est en blanco, el procedimiento mostrar un mensaje y se cerrar.
El segundo bloque de cdigo comprueba que haya seleccionado al menos
un problema en la lista -para hacerlo, examina la propiedad Count de la
coleccin ItemsSelected del cuadro de lista, igual que hicimos antes.
i

A continuacin, el procedimiento confirma que el usuario quiere reasignar los problemas seleccionados. Para hacerlo, utiliza la funcin Confirm, igual que la que escribimos en el Captulo 5 -funcin que tambin
se ha incluido en esta base de datos.
Si el usuario confirma la operacin, la siguiente lnea de cdigo utiliza el
mtodo Hourglass del objeto DoCmd para mostrar un cursor de reloj
mientras el cdigo actualiza los registros. Siempre que el cdigo tarde en
hacer algo, podemos utilizar esta tcnica para indicar al usuario que se
est trabajando.

i El

>

ltimo bloque de cdigo est diseado para ejecutarse despus de haber


asignado los problemas, con el fin de actualizar el cuadro de dilogo en
pantalla, antes de que finalice el procedimiento. Por ejemplo, la primera 1nea asigna al cuadro combinado AssignedTo el valor del identificador del
empleado al que hemos asignado los problemas y la tercera lnea se encarga de que el cuadro de lista muestre el nuevo conjunto de problemas. De
esta forma, el usuario puede comprobar que los cambios se han efectuado.
Para completar el procedimiento, aadiremos cdigo en dos sitios: cerca
del comienzo del procedimiento declararemos tres variables que despus
utilizaremos en el cdigo, y cerca del final aadiremos cdigo para cambiar los registros seleccionados.

3. Pulse debajo de la instruccin Dim del procedimiento y escriba las siguientes lneas de cdigo:
Dim cnn As Connection
Dim rstIssues As New ADODB.Recordset
Dim varposition As Variant

Estas instrucciones declaran tres variables.


i

La variable cnn representar una conexin con la base de datos actual.


La variable rstlssues guardar una referencia a la tabla Issues para que
podamos modificar sus datos. El uso de la palabra clave New al declarar
esta variable indica a Visual Basic que cree realmente el objeto Recordset, no que simplemente disponga memoria para ella. Siempre se debe
utilizar la palabra clave New al declarar un conjunto de registros ADO,
debido a que el mtodo Open que se utilizar para abrir una tabla o consulta requiere que el objeto Recordset exista realmente.
Observe que en la declaracin del tipo de datos se ha precedido Recordset por el nombre de la biblioteca de objetos ADODB y un punto. Aunque aqu no es estrictamente necesario especificar la biblioteca de objetos (porque el proyecto Seguimiento de problemas ya tiene una referencia
a la biblioteca de objetos ADO y no a DAO), siempre es una buena idea
hacerlo. De otra forma, en un proyecto que utilice tanto ADO como D A 0
se podran encontrar errores cuando el cdigo cree el tipo incorrecto de
Recordset.

i La

variable varPosition guardar la posicin de cada uno de los elementos seleccionados en la lista, para que podamos disponer del identificador
de los problemas seleccionados. Esta variable es de tipo Variant, porque
ese es el tipo de valor utilizado para guardar la posicin en la coleccin
ItemsSelected.

4. Desplace la ventana hacia abajo, pulse el rea en blanco que est debajo de
la instruccin DoCmd.Hourglass Tme e introduzca el cdigo siguiente:
' Abre un objeto de tipo recordset en la base de datos actual.
Set cnn = CurrentProject.Connection

rstIssues.Open "Issues", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect


'Comienza una transaccin antes de cambiar los datos.
cnn.BeginTrans
' Fija el valor de la propiedad Index para buscar sobre la

clave primaria.
rstIssues.Index = "IssueID"

' Va pasando por cada problema seleccionado en la lista.

For Each varposition In IssueLi~t.Item~Selected


' Encuentra el registro en la tabla Issues.

rstIssues.Seek IssueList.ItemData(varPosition)
'Cambia el valor AssignedTo en la tabla.
rstIssues!AssignedTo = NewAssignee
rstIssues.Update
Next varposition

' Guarda todos los cambios de esta transaccin.

Veamos qu hace este cdigo lnea por lnea -utiliza


nuevos.

varios conceptos

i La

primera lnea de cdigo utiliza la propiedad Connection del objeto


CurrentProject para guardar una referencia a la base de datos actual, que
ser necesaria para abrir la tabla desde el cdigo. Recuerde que siempre
que asignamos el valor de una variable objeto -a diferencia de lo que
ocurre con las variables normales, como las de cadena- debemos colocar la instruccin Set delante de la asignacin.

i La

segunda lnea utiliza el mtodo Open del objeto Recordset para abrir
la tabla Issues utilizando el objeto recordset de la variable rstlssues. El
primer argumento del mtodo Open especifica la tabla o consulta que se
quiere abrir. El segundo argumento proporciona la conexin de base de
datos que se quiere que utilice ADO; en este caso, la conexin de base de
datos actual que se ha guardado en la variable cnn.
tres siguientes argumentos del mtodo Open usan constantes ADO
para especificar el tipo de Recordset que se quiere abrir. El tercer argumento, adOpenKeyset, hace que ADO solicite a Access un dynaset, un
tipo de conjunto de registros que se puede modificar. El cuarto argumento, adLockOptimistic, indica a ADO que se desea un bloqueo de registros
optimista si varios usuarios intentan editar datos a la vez, lo que significa
que los registros se bloquean una mnima cantidad de tiempo mientras el
cdigo los modifica. El ltimo argumento, adCmdTableDirect, indica a
ADO que se quiere un conjunto de registros tipo tabla. Es importante que
se abra un conjunto de registros tipo tabla, ya que el cdigo posterior del
procedimiento utiliza el mtodo Seek, que slo se permite sobre tablas.

i Los

La siguiente lnea utiliza el mtodo BeginTrans sobre el objeto Connection para abrir una transaccin. Una transaccin es un grupo de cambios
que se quiere que Access trate como una nica operacin. Al abrir una
transaccin le estamos indicando a Access que lleve la cuenta de los cam-

bios que realizamos, pero que espere hasta que terminemos para guardarlos en el disco. Ms tarde, cerraremos la transaccin utilizando el mtodo CommitTrans.
El uso de una transaccin para realizar mltiples cambios tiene dos ventajas: la primera es que acelera la ejecucin del cdigo, porque slo accede al disco o a la red una vez, en lugar de hacerlo cada vez que modificamos un registro; la segunda es que nunca realizaremos cambios
parciales en los registros -si se produce un error antes de que se hayan
realizado todos los cambios, no guardaremos la transaccin. (Para cancelar los cambios en una transaccin, utilizaremos el mtodo RollbackTrans.)
i Antes

de poder utilizar el mtodo Seek para localizar los registros en la


tabla, debemos asignar la propiedad Index del conjunto de registros, indicando a ADO cul es el campo por el que queremos buscar. La siguiente lnea asigna a la propiedad Index el campo IssueID, la clave primaria de la tabla Issues. El campo o campos que designemos para la
bsqueda deber ser la clave primaria de la tabla o tener algn ndice.
Como este campo tiene un ndice, la bsqueda ser muy rpida.

La siguiente lnea utiliza la instruccin For Each que aprendimos en la


seccin anterior. En este procedimiento nos interesa actualizar cada uno
de los problemas seleccionados en la lista. Como la operacin de localizacin y modificacin se realizar registro por registro, necesitamos ejecutar el bloque de cdigo una vez para cada elemento de la coleccin
ItemsSelected del cuadro de lista. Esta instruccin podra leerse como:
Ejecuta el siguiente bloque de cdigo una vez para cada elemento de la
coleccin ItemsSelected del control IssueList, guardando cada vez la posicin del elemento seleccionado en la variable varPosition.

Las cuatro lneas de cdigo que se repetirn en el bucle para cada problema seleccionado, debern localizar el problema en el conjunto de registros y cambiar su valor AssignedTo. La primera lnea utiliza el mtodo Seek para colocarse en el registro seleccionado.

El mtodo Seek utiliza un argumento que le indica a Access el valor que


estamos buscando. Como ya vimos antes en este captulo, la forma de hacer referencia al valor del elemento seleccionado en una lista es utilizar
el mtodo ItemData del control cuadro de lista. Este argumento le indica
a Access que busque el valor IssueID que est en la posicin actual
-guardada en la variable varPosition- en el control IssueList. Despus
de ejecutar esta lnea de cdigo, el registro actual del conjunto de registros rstlssues ser el registro de uno de los problemas seleccionados en la
lista.

i Las

dos lneas siguientes se encargan de la reasignacin propiamente dicha, reemplazando el valor del campo AssignedTo del registro con el va-

lor del cuadro combinado NewAssignee del formulario. Una vez que hayamos terminado de asignar los valores de uno o ms campos del conjunto de registros, como hacemos aqu en la segunda instruccin, completamos el cambio mediante el uso del mtodo Update.
i La instruccin Next le indica a Access que repita el bloque de cdigo For

Each para el siguiente elemento de la lista. Cuando el bloque se ha ejecutado para todos los elementos seleccionados, el procedimiento sigue
ejecutndose a partir de este punto.
i La ltima lnea de cdigo que hemos introducido utiliza el

mtodo CommitTrans del objeto Connection. Este mtodo le indica al motor de base
de datos que guarde todos los cambios realizados desde el comienzo de
la transaccin de este procedimiento.

5. En el men Depuracin, seleccione Compilar Cap 12 Problemas.


Si el procedimiento tiene algn error tipogrfico, la compilacin lo sacar a la luz para que podamos corregirlo antes de ejecutar el cdigo.
Pruebe el procedimiento ReassignSelected-Click

Ahora ya estamos preparados para probar el procedimiento pulsando el botn Reasignar seleccionados del cuadro de dilogo.
Ver Microsofi
Access

1. Cambie a Access.
En el cuadro de dilogo todava estn seleccionados los problemas nmeros 4 y 8, listos para ser reasignados a otro empleado.

2. En el cuadro combinado Reasignar problemas a, seleccione Carlos Fernndez.

3. Pulse el botn Reasignar seleccionados y despus pulse Aceptar cuando


el procedimiento le pida que confirme la reasignacin.
Se ejecutar el cdigo, que abrir el conjunto de registros Issues y pasar por los dos registros seleccionados, para cambiar sus valores AssignedTo en la tabla Issues. Cuando el procedimiento finalice, el cuadro de
lista mostrar los problemas que han cambiado de manos, pero que ahora pertenecen a Carlos Fernndez, un empleado distinto.

yer pioblemas arignados a I11-irlos Fsrri3ridt.r


Reaatgner problema-.

CREACIN Y EJECUCIN DE U N A CONSULTA DE ACCIN


El primer botn de orden del cuadro de dilogo Reassigner ya est completo. Sin embargo, al segundo le falta an algo de trabajo. Este botn, llamado
Reasignar todos, servir a los usuarios para reasignar todos los problemas, en
lugar de slo los seleccionados, de un empleado a otro. En esta seccin, aadiremos el cdigo para que funcione correctamente.
La tcnica utilizada para reasignar los problemas seleccionados -abrir un
conjunto de registros y despus localizar y cambiar los registros uno a unoes perfecta para reasignar unos cuantos problemas. En cambio, cuando queremos cambiar valores de un grupo completo de registros, la modificacin de
registros uno a uno no es el mejor mtodo. Para hacerlo de forma ms efectiva, utilizaremos una consulta de accin. Mediante una consulta de accin,
podemos actualizar, aadir o borrar muchos registros de un solo paso.
Normalmente utilizamos la ventana de consultas de Access para crear una
consulta de accin. Sin embargo, las consultas pueden crearse y ejecutarse
desde el cdigo, usando el mtodo Execute de ADO. Para que el botn
Reasignar todos utilice esta tcnica, escribiremos cdigo que cree y ejecute
una consulta, consulta que cambiar los valores del campo AssignedTo para
todos los registros de la tabla Issues de un identificador de empleado a otro.
Edite el procedimiento de evento Click del botn Reasignar todos

Igual que el botn anterior, ste tambin tiene un procedimiento de evento


-al que slo le falta el cdigo que reasigna realmente los registros. Aadiremos cdigo que cree y ejecute una consulta de accin para actualizar los
registros.

1. Cambie a Visual Basic.

2. En el cuadro Objeto de la ventana Cdigo, seleccione ReassignAll.


La ventana Cdigo mostrar el procedimiento ReassignAll-Click. Como
puede comprobar, el procedimiento ya contiene varias lneas de cdigo.
El cdigo es muy similar al que vimos en el procedimiento ReassignSelected-Click: comprueba que el usuario ha seleccionado empleados a los
que asignar y desasignar problemas y pide confirmacin sobre la reasignacin, para mostrar despus el cursor del reloj.
Para poder completar el procedimiento, aadiremos una lnea en la zona
de declaracin de variables y despus aadiremos cdigo para ejecutar la
consulta que cambiar los datos.

3. Pulse debajo de la instruccin Dim del procedimiento y escriba la siguiente lnea de cdigo:
Dim cnn As Connection

Igual que antes, la variable cnn representar una conexin con la base de
datos actual.

on el fin de hacerlo ms simple, el procedimiento con el que hemos


trabajado en este captulo no contiene cdigo de manejo de errores. No
obstante, siempre que utilicemos ADO para cambiar registros, deberemos incluir cdigo de manejo de errores en el procedimiento. Los
errores pueden producirse por motivos muy diversos, por lo que nuestra aplicacin puede terminar generando una interrupcin no deseada
si no incluimos cdigo de manejo de errores. Por ejemplo, suponga
que hay otro usuario cambiando datos mientras se ejecuta nuestro cdigo. Los registros que estamos intentando modificar pueden estar
bloqueados, lo que producir un error.
Para manejar este tipo de errores deberemos aadir una instruccin On
Error COTOal comienzo del procedimiento, y despus incluir cdigo
de manejo de errores al final del mismo; de forma similar a la tcnica
utilizada en el Captulo 7. En el cdigo de manejo de errores, podramos comprobar qu error se ha producido y, si los registros estn bloqueados, permitir al usuario que los vuelva a guardar. En cualquier
caso, si no somos capaces de actualizar los registros como queremos,
el procedimiento debe finalizar correctamente y mostrar un mensaje
formando del problema. Si decidimos salir del procedimiento, podemos incluir el mtodo RollhackTrans del objeto Connection, que deshace los cambios realizados desde que comenz la transaccin con el
todo BeginTrans - d e esta forma, los registros no se actualizarn

4. Pulse la zona en blanco debajo de la instruccin DoCmd.Hourglass True


y escriba el siguiente cdigo.
' Ejecutar una consulta UPDATE para reasignar los problemas.
Set cnn = CurrentProject.Connection
cnn.Execute "UPDATE Issues SET AssignedTo = " & NewAssignee & " WHERE AssignedTo = " & AssignedTo

Nota Asegrese de colocar espacios antes y despus de las comillas, exactamente como aparecen en el texto. Si no lo hace, pueden producirse errores
al intentar ejecutarlo.

Esto es lo que hace el cdigo:


i La primera

lnea que hemos aadido utiliza la propiedad Connectio del


objeto CurrentProject para guardar una referencia a la base de datos
actual.

i La

segunda lnea utiliza el mtodo Execute del objeto Connection para


crear y ejecutar una consulta SQL. Cuando se ejecuta la lnea, ADO pedir a Access que ejecute la consulta, igual que si hubiramos ejecutado
una consulta de accin desde la ventana de consultas. La instruccin UPDATE le indica a Access que queremos cambiar los valores de los registros existentes. Como puede ver, esta lnea de cdigo concatena varios
elementos para construir la instruccin SQL. Este cdigo podra haberse
escrito en una sola lnea, pero la hemos dividido con un guin bajo (-)
para facilitar su lectura en la ventana Cdigo.
La cadena que hemos creado para la propiedad SQL combina el texto
SQL con los valores de dos campos del formulario Reassigner: el campo
AssignedTo y el campo NewAssignee. Cuando se ejecute el cdigo, Visual Basic combinar todo el texto para generar una cadena que defina la
consulta de accin. Por ejemplo, la cadena completa podra ser:
UPDATE Issues SET AssignedTo = 14 WHERE AssignedTo = 20

Si ejecutramos esta consulta, Access localizara todos los registros de la


tabla Issues asignados al empleado 20 y los reasignara al empleado 14.

5. En el men Depuracin, seleccione Compilar Cap12 Problemas.

6. Cierre Visual Basic.

Pruebe el procedimiento ReassignAII-Click

Ahora ya puede probar el procedimiento. Ahora se ven los problemas asignados a Carlos Fernndez, por lo que slo tendr que seleccionar otro empleado a quien reasignrselos y pulsar el botn.

1. En el cuadro Reasignar problemas a, seleccione Brbara Moneo.


1. Pulse el botn Reasignar todos y despus pulse Aceptar para confirmar la
reasignacin.
Se ejecutar el cdigo, creando y ejecutando la consulta de accin para
los valores de empleados que hemos seleccionado. Cuando termine, el
cuadro de lista mostrar los problemas de Brbara Moneo -y como podr ver, los problemas anteriores vuelven a pertenecerle igual que al principio de este captulo, que es exactamente lo que pretendamos.
Los objetos Recordset y Connection que hemos aprendido a utilizar en este
captulo son probablemente los objetos ADO ms comunes para trabajar
directamente con bases de datos. No obstante, slo son la punta del iceberg.
Por suerte, la mayora de las tcnicas que hemos aprendido en este captulo
son aplicables a cualquier operacin que hagamos con objetos y colecciones. Slo recuerde que trabajando directamente con objetos en su cdigo,
podr llevar a cabo prcticamente cualquier cosa que Access pueda hacer
-e incluso ms.
Cierre el cuadro de dilogo y salga de Microst Access

1. Pulse el botn Cerrar.


2. En el men Archivo, pulse Salir.

Uso del lenguaje de consultas estructurado (SOL)


Cuando definamos la consulta de accin en esta seccin, utilizaremos
el lenguaje de consultas de Access, llamado Lenguaje de consultas estructurado o SQL (del ingls Structured Queiy Language). Probablemente ya habr visto ejemplos de instrucciones SQL en la hoja de propiedades -SQL se utiliza habitualmente en los valores Origen del
registro (RecordSource) y Origen de la fila (RowSource) de nuestros
formularios, cuadros combinados y cuadros de lista. Cuando utilizamos asistentes para crear los objetos, habitualmente asignan a estas
propiedades las instrucciones SQL apropiadas. En el formulario Reas- '
signer, por ejemplo, el cuadro combinado AssignedTo se cre utilizando el Asistente para cuadros combinados. El asistente asign a la propiedad Origen de la fila del cuadro combinado la siguiente instruccin
SQL:
SELECT DISTINCTROW Employees.EmployeeID,
Employees.EmployeeNam?
FROM Employees
ORDERED BY Employees.EmployeeName;

Esta instruccin le indica a Access que obtenga (<<seleccione)los valores de dos campos -EmployeelD y EmployeeName- de todos los
registros de la tabla Empleados, ordenndolos por nombre. En sus
aplicaciones de Access podr utilizar una instruccin SQL casi en
cualquier parte donde aparezca el nombre de una tabla o una consulta.
Adems, tal como se ha visto en esta seccin, puede construir consultas en su cdigo utilizando SQL.

Para aprender SQL, un buen comienzo puede ser la ayuda interactiva.


Adems, existe una tcnica sencilla que puede utilizar para aprender
SQL. Las consultas que puede crear utilizando la ventana Generador
SQL -incluidas las consultas de accin- tienen una vista SQL que
Access se encarga de actualizar automticamente. Para ver la instruccin SQL correspondiente a cualquier consulta en la vista Diseo,
pulse Vista SQL en el men Ver. Tambin puede copiar el texto SQL
en su cdigo ADO.

Resumen del captulo


Para

Haga esto

Ver los objetos de una


biblioteca de objetos

En Visual Basic, pulse el botn


Examinador de objetos. Seleccione
una biblioteca de objetos o una base
de datos y pulse clases de objetos para
ver sus miembros.

Hacer referencia a un
objeto de una coleccin

Escriba la referencia a la coleccin


seguida del nombre o nmero del
objeto entre parntesis, como en
Forms!lssues. Controls(0) o Forms!
Issues. Controls(IssuelD).Si el
elemento es el miembro predeterminado
de la coleccin, utilice el operador signo
de exclamacin (!), como en
Forms!Issues!IssueID.

Ejecutar un bloque de
cdigo para cada
elemento de una
coleccin, como los
controles de un
formulario

Utilice un bloque For Each ...Next,


especificando una variable para guardar
los objetos mientras el cdigo recorre
la coleccin.

Crear un cuadro de lista


que permita mltiples
selecciones

Asigne a la propiedad Seleccin


mltiple del cuadro de lista los valores
Simple o Extendido. Obtenga la
posicin de cada seleccin en la
coleccin ZtemsSelected y acceda a
los datos seleccionados utilizando el
mtodo ItemData.

Abrir la base de datos


actual en cdigo ADO

Declare un objeto Connection utilizando


una instruccin Dim y luego haga que
el objeto se refiera a
CurrentProject.Connection.

Abrir un conjunto de
registros ADO

Declare y cree un objeto Recordset


utilizando una instruccin Dim y
especificando As New ADODB.
Recordset, y luego utilice el mtodo
Open del conjunto de registros para
abrir una tabla o una consulta.

Botn

pa

Para

Haga esto

Localizar un registro en
un recordset de tipo tabla

Utilice el mtodo Index del conjunto


de registros para especificar el campo
que quiere buscar, y despus utilice el
mtodo Seek para pasar al registro
en la tabla.

Cambiar datos en el
registro actual de un
recordset

Asigne valores a los campos del


conjunto de registros y despus utilice
el mtodo Update para guardar los
cambios.

Agrupar varios cambios


a los datos para que se
realicen de una sola vez

Abra una transaccin utilizando el


mtodo BeginTrans y despus utilice
el mtodo CommitTrans para actualizar
los cambios cuando haya terminado.
Si no quiere guardar los cambios,
utilice el mtodo RollbackTrans para
deshacer todos los cambios efectuados
desde el comienzo de la transaccin.

Ejecutar una consulta


de accin desde el
cdigo

Abra una conexin y luego utilice el


mtodo Execute, especificando la
instruccin SQL que quiere ejecutar.

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Ayuda

Uso del Examinador de


objetos

Examinador de objetos

Uso de ADO para trabajar


directamente con bases
de datos

ADO

Creacin de aplicaciones
para mltiples usuarios
en una red

base de datos multiusuario en red

Uso del lenguaje de


instrucciones SQL
consulta estructurado (SQL)

Botn

AVANCE DEL SIGUIENTE CAPITULO


En este captulo hemos aprendido las reglas generales para hacer referencia
a objetos y colecciones, y hemos descubierto unos cuantos tipos de objetos
nuevos. Seguiremos trabajando con objetos nuevos en el resto de la Parte IV.
En el siguiente captulo, por ejemplo, aprenderemos ms sobre el uso de objetos informe en el cdigo. Aunque la mayor parte del cdigo que hemos escrito hasta ahora en este libro se ha aplicado a formularios, descubrir que
tambin se puede escribir cdigo para personalizar los informes -proporcionando ms potencia y flexibilidad a las aplicaciones.

Personalizacin de informes
con Visual Basic
Objetivos del captulo
En este captulo aprender a:
Tiempo estimado:
40 minutos.

Responder a eventos que se generen en informes.


iCambiar el formato de campos y

registros individuales mientras se impri-

me un informe.
Calcular totales mientras se est ejecutando un informe.
Cuando estamos aprendiendo un tema completamente nuevo, como la programacin de bases de datos, resulta fcil que los rboles no nos dejen ver el
bosque: solemos detenernos demasiado en los detalles y no apreciar el propsito principal para el que sirven las aplicaciones. A medida que va aumentando nuestra experiencia, an tendemos a perder demasiado tiempo aadiendo detalles a una aplicacin y a olvidar sus objetivos principales.
Afrontmoslo -por mucho que se pueda complicar el trabajo con bases de
datos, el problema se reduce a dos actividades bsicas: introducir datos en la
base de datos y extraer datos de la base de datos.
Hasta ahora hemos dedicado un gran esfuerzo para permitir introducir datos en
formularios y trabajar con ellos de forma sencilla. En este captulo dedicaremos
nuestra atencin a una de las formas bsicas de sacar datos de una base de datos de Microsoft Access: la impresin de informes. Utilizaremos las herramientas de creacin de informes junto con nuestros procedimientos de Visual Basic
para personalizar y mejorar los informes de una aplicacin -y aprenderemos
tcnicas para tomar el control exacto de lo que se imprime en la pgina.

Inicie la leccin
i

UTILIZACIN

Inicie Access y abra la base de datos Cap12 Problemas de la carpeta de


prcticas.

DE LAS CARACTERISTICAS ESTANDAR DE LOS INFORMES


Los informes de Access son herramientas extraordinariamente potentes para
presentar informacin, independientemente de que escribamos o no cdigo
Visual Basic. El Asistente para informes puede ayudarnos a crear muchos
tipos complejos de informes para agrupar o resumir informacin -o, si
diseamos nuestros propios informes personalizados, para llevar a cabo casi
cualquier cosa que podamos necesitar en nuestra aplicacin. Antes de escribir cdigo, nos aseguraremos de estudiar las potentes caractersticas incluidas en los informes, como la agrupacin o la totalizacin, el ensanchamiento
o reduccin de secciones y la flexibilidad a la hora de numerar las pginas,
por poner slo algunos ejemplos. El informe Problemas (Issues) incluido en
la base de datos de prcticas muestra algunas de estas caractersticas.
Vea la vista preliminar del informe sobre problemas

Antes de empezar a personalizar el informe Problemas, vamos a echar un


vistazo a lo que ya contiene. Como podr ver, el informe imprime todos los
problemas pendientes en la base de datos, agrupados por el empleado al que
han sido asignados.

1. En la ventana Base de datos, pulse el acceso directo Informes.


2. Pulse dos veces sobre el informe Issues (Problemas).
Aparecer la vista preliminar del informe Problemas.

Alosde~e3micrguSieiEdoan

M w

Media

( 0 W

El informe Problemas est basado en una consulta llamada IssuesForReport, que combina informacin de varias tablas. El informe se cre inicialmente utilizando el Asistente para informes y despus se organiz y
se puli un poco ms en la vista Diseo de informe.
Utilizando la barra de desplazamiento vertical de la ventana del informe
(no la barra de desplazamiento de Access), desplcese hacia abajo para
ver el resto de problemas de la pgina.
El informe agrupa todos los problemas asignados a cada empleado - e n
este caso, el primer grupo de problemas pertenece a Brbara Moneo. El
informe muestra tambin el nmero total de problemas para cada grupo
al final de la seccin del empleado.
La siguiente ilustracin muestra varias caractersticas del informe de
problemas.

- Los registros de
problemas se
agrupan por
empleados,
repitindose el
encabezamiento
para cada grupo
de problemas

Access cuenta
automticamente el
nmero de problemas
de cada grupo
- Un valor de
prioridad Alta
aparece en
negrita debido
al formato
condicional
aplicado al
campo

Todos los elementos que vemos en el informe de problemas tal como est
en el archivo de prcticas -el agrupamiento de los datos, los totales automticos y el diseo personalizado, por ejemplo- son caractersticas estndar de los informes que no requieren cdigo alguno. Este es slo el principio de lo que podemos hacer con los informes.
No obstante, en algunos casos ser imposible obtener lo que queremos utilizando nicamente las caractersticas estndar de los formularios. Por ejemplo, si queremos realizar modificaciones en el formato de ciertos campos
dependiendo de los datos que aparezcan en un registro concreto, o si queremos cambiar el diseo del informe slo en ciertos casos, no habr herramienta estndar que lo haga por nosotros -requerir cierta intervencin
creativa por nuestra parte. En las siguientes secciones, comenzaremos por
aadir caractersticas a este informe que requerirn algo de cdigo Visual
Basic.

RESPUESTA A EVENTOS DE INFORME


Cuando queremos llevar a cabo alguna tarea en nuestros informes que no
sea posible realizar mediante caractersticas estndar de los informes, no
debemos preocuparnos, porque seremos capaces de controlar prcticamente cualquier detalle relacionado con los informes desde el cdigo Visual Basic. La programacin de informes es muy similar a la de formularios: los informes tienen eventos a los que podremos responder con procedimientos de
evento de Visual Basic. Pero el modelo de evento de los informes es distinto, ya que los usuarios no pueden interactuar con los informes, tal como hacan con los formularios. En su lugar, los eventos de informe se generan en
ciertos puntos durante el proceso de impresin del informe -el tiempo que
transcurre desde que le decimos a Access que imprima un informe o lo
muestre en vista preliminar y la llegada del informe a la pantalla o la impresora- y podemos escribir cdigo Visual Basic para cambiar el resultado de este proceso.
Estos son los dos tipos de eventos de informe a los que responderemos habitualmente, junto con los motivos tpicos para su uso:

Eventos de informe generales Hay varios eventos que se aplican al formulario entero. Algunos de ellos nos resultarn familiares porque ya los hemos
visto en la programacin de formularios, como el evento Open, que podemos
utilizar para realizar acciones cuando el usuario pide la impresin o la vista
preliminar del informe. Otros dos eventos generales bastante tiles son el
evento NoData, que nos permite intervenir si el origen de registros del informe resulta que no tiene ningn registro, y el evento Page, que nos da la
oportunidad de ejecutar cdigo una vez por pgina -por ejemplo, para imprimir un borde alrededor de cada pgina.

Eventos para cada seccin del informe Los eventos ms interesantes son
aquellos que ocurren una o ms veces en cada seccin del informe, en el encabezado o el pie del mismo, en los encabezados y pies de cada pgina, en
los de los grupos e incluso en la seccin Detalle, en la que aparecen los registros concretos. Los dos eventos de seccin ms importantes son el evento
Fonnat, que aparece justo antes de que Access genere el diseo de cada seccin del informe, y el evento Print, que se produce despus de que el diseo
de la pgina est hecho pero justo antes de imprimirla. Durante estos eventos, tenemos acceso a los datos del registro que est siendo formateado o impreso -y como podremos ver, nos permiten realizar cambios basados en lo
que est a punto de imprimirse.
En este captulo escribiremos procedimientos de evento que respondan a los
eventos Format y Print, personalizando el informe de problemas incluido en
la base de datos de prcticas. Aunque slo probaremos algunas de las muchas
tcnicas para controlar la salida de informes, aprenderemos los conceptos
fundamentales que necesitamos para personalizar informes.

Personalizacin de informes asignando propiedades en ejecucin


Podemos determinar en gran medida el aspecto de nuestro informe mediante el establecimiento de las propiedades de los controles y las secciones. Podramos cambiar el tamao de fuente de un control del informe que fuera ms
importante que los dems, o incluso ponerlo en negrita -y el cambio se reflejara en todo el informe. Pero, qu hacemos para imprimir un control de
forma diferente dependiendo de los datos que contenga cada registro? Por
ejemplo, suponga que quiere alternar el color de fondo de los registros de
problemas para que se distingan ms fcilmente. Necesitaremos una forma
de cambiar las propiedades de la seccin Detalle mientras se est imprimiendo el informe.
Aqu es donde demuestran su importancia los eventos. La respuesta al evento Print de la seccin Detalle del informe, que se activa antes de imprimir
cada registro, nos permite cambiar el control para que se imprima como
queramos. Nuestro cdigo modificar la propiedad BackColor de la seccin
Detalle antes de que se imprima cada registro.
Haga que la seccin Detalle alterne entre blanco y gris

Cuando trabajamos con un procedimiento de evento en un informe, es importante asociarlo con la seccin del informe apropiada. En este caso, seleccionaremos la seccin Detalle del informe Issues (Problemas), porque queremos que el cdigo se ejecute para cada uno de los registros del detalle
-cada uno de los problemas que se impriman en el informe.

1. En el men Ver, pulse Vista Diseo.


El informe pasar a la vista Diseo.
Para poder crear un procedimiento de evento para la seccin Detalle,
abriremos la hoja de propiedades y consultaremos las propiedades de
evento de esa seccin.

2. Pulse dos veces la barra de la seccin Detalle.


Access mostrar la hoja de propiedades para la seccin Detalle (Detail).

Pulse dos veces la


barra de la seccin
Detalle para ver las
propiedades de la
seccin

3. En la hoja de propiedades, pulse la ficha Eventos, pulse la propiedad Al


imprimir (OnPrint) y despus pulse el botn Generar.

4. Pulse dos veces Generador de cdigo.


%sual Basic abrir el mdulo del informe Issues y mostrar el procedimiento de evento Detail-Print.

5. Ajada el siguiente cdigo al procedimiento de evento:


Private Sub DetaiOrint(Cance1As Integer, PrintCount As Integer)
' Alterna el fondo de la seccin entre blanco y gris.
Const conGrisClaro = 13816530
If Detail.BackColor = conGrisClaro Then
Detail.BackColor = vbWhite
Else
Detail.BackColor = conGrisClaro
End If
End Sub

Esto es lo que hace el cdigo.

i Al

comienzo del procedimiento, la instruccin Const declara una constante para el color gris claro. No es necesario declarar una constante para
el color blanco porque ya existe una constante predefinida en Visual Basic, vbWhite.

i La instruccin If ...Then comprueba

si la propiedad BackColor de la seccin Detalle (Detail) ya tiene asignado el color gris o no.

i Si la

seccin es gris, la siguiente lnea asigna el color blanco a la propiedad BackColor. En caso contrario, la clusula Else asigna a la propiedad
BackColor el color gris.

Este cdigo se ejecutar cada vez que Access se disponga a imprimir los
datos de un problema en el informe. Si imprimimos el informe completo,
que contiene actualmente 11 problemas, el procedimiento se ejecutar 11
veces.
Vea el informe

Ahora veremos el informe para com~robarcmo funciona.


Ver Microsoft
Access

1. Cambie a Access.
2. Pulse el botn Vista preliminar en la barra de herramientas.

W
Vista preliminar

Aunque ocurre tan rpido que incluso nos hace dudar si de verdad ha ocurrido, Access ha ejecutado nuestro procedimiento de evento una vez por
cada registro de la pgina, permitiendo al cdigo establecer la propiedad
BackColor de la seccin Detalle para cada uno de ellos.

3. Desplcese hacia abajo en la ventana para ver ms registros.

D6qCI>I

~uo~trueitudln
i ~ r n ~ r g dda
o
& m u r mmourndaiorrssRadoademsdm a m a
cBmprna pm nnoonal

DE-'DW

vmorsrecslrr martarde om8ntempisa dcaliraat


masenvi 06cma~l~mips

F . E ~ Qb

Fmh* de

alternan entre

Modificacin del diseo del informe desde el cdigo


El procedimiento de evento Print es un lugar adecuado para llevar a cabo
gran nmero de acciones sobre una seccin del informe, porque se ejecuta
una vez por cada registro de la seccin. No obstante, debemos tener cuidado: cuando se activa el evento Print, Access ya ha determinado la organizacin de los elementos que se imprimirn en la seccin, por lo que ser
demasiado tarde para hacer cambios en el diseo de dicha seccin. Por ejemplo, si nuestro cdigo pretende modificar el nmero de registros que aparecern en cada pgina, el evento Print no nos servir. Si queremos realizar acciones que afecten al diseo de una seccin, deberemos incluir el cdigo en
el evento Format.
En el informe Issues (Problemas) habr visto las tres etiquetas que aparecen
en la parte derecha de cada registro de problema. Aunque la mayora de los
registros del informe no tienen valores para estos campos (porque los problemas an no estn resueltos), las etiquetas aparecen en todos los registros
de la seccin Detalle. Si queremos que slo aparezcan cuando el problema
est resuelto, podemos escribir un procedimiento de evento que se encargue
de ello. Los cambios que realicemos en el cdigo afectarn al diseo de la
seccin, por lo que nuestro cdigo deber escribirse en el procedimiento de
evento Format de la seccin Detalle, en lugar de hacerlo en el procedimiento Print.
Aada cdigo para ocultar las etiquetas de los campos no resueltos

Para mostrar u ocultar controles, utilizaremos su propiedad Visible. Si aplicamos esta tcnica a los campos de resolucin en el procedimiento de evento Format, Access tendr en cuenta si los controles deben o no ser mostrados
cuando componga el diseo de la seccin.

1. En la barra de herramientas, pulse el botn Cerrar.


El informe volver a la vista Diseo.

2. En la hoja de propiedades, pulse la propiedad Al dar formato y, a continuacin, pulse el botn Generar.

3. Pulse dos veces Generador de cdigo.


Visual Basic mostrar el procedimiento de evento Detail-Format.

4. Aada el siguiente cdigo al procedimiento de evento:


P r i v a t e Sub D e t a i u o r m a t ( C a n c e 1 As I n t e g e r , FormatCount As I n t e g e r )

' Cuando se da formato al registro de cada problema slo se


' muestran las etiquetas de los campos de resolucin si el problema
' est resuelto.
Dim blnResuelto As Boolean

' Determinar si el campo DateResolved (fecha de resolucin)


' tiene valor.
blnResuelto = Not IsNull(DateResolved)
' Establecer la propiedad Visible de las
DateResolvedLabel.Visib1e = blnResuelto
ResolutionLabel.Visible = blnResuelto
ResolvedByLabel.Visible = blnResuelto

tres etiquetas.
' Fecha de resolucin
' Resolucin
' Resuelto por

End Sub

Esto es lo que hace el cdigo:


i El procedimiento utiliza una variable Boolean, llamada hlnResuelto, para

registrar si el problema actual est resuelto o no. La segunda instruccin


asigna a la variable el valor True o False basndose en la expresin Not
IsNull(DateResolved), que hace referencia al campo DateResolved de la
seccin Detalle del informe. Si el campo DateResolved contiene una fecha n o contiene un valor nulo- blnResuelto ser True.
i Las

tres lneas siguientes utilizan el valor blnResuelto -que ser True


cuando deban aparecer los campos de resolucin y False en caso contrario- para fijar la propiedad Visible de las tres etiquetas.

Este procedimiento se ejecutar cada vez que Access empiece a construir el


diseo de un registro en la pgina -al menos una vez y potencialmente
varias veces por cada registro del informe. Como la mayora de los problemas estn sin resolver, tambin para la mayora de los registros se ocultarn
estas etiquetas.
Establezca las propiedades para estrechar la seccin
Detalle como corresponda

Por omisin, Access deja espacio para los campos en un informe -aunque
estn en blanco- de forma que incluso cuando las etiquetas de resolucin
del informe Issues sean invisibles, habr un espacio extra para las mismas en
cada registro del informe. Afortunadamente, Access proporciona la propiedad Autocomprimible (CanShrink) para corregir automticamente esta situacin. Si asignamos a esta propiedad el valor True en los tres cuadros de

texto y en la propia seccin Detalle, le estaremos indicando a Access que


comprima esos campos cuando estn vacos, asegurndonos as de que no
ocupan espacio alguno.

Ver Microsofi
Access

1. Cambie a Access.
2. En la hoja de propiedades, pulse la pestaa Formato y despus asigne a
la propiedad Autocomprimible de la seccin Detalle el valor S.

3. En la parte derecha de la seccin Detalle, seleccione los tres cuadros de


texto que muestran la informacin de resolucin. (Pulse en uno de ellos
y mantenga pulsada la tecla MAYUS mientras pulsa sobre los otros dos.
Asegrese de seleccionar nicamente los controles de cuadro de texto, no
sus etiquetas.)

Seleccione estos tres


cuadros de texto para
establecer las
propiedades de los
tres a la vez

4. En la hoja de propiedades, asigne el valor S a la propiedad Autocomprimible.


Vea la vista preliminar del informe

1. Pulse el botn Vista preliminar en la barra de herramientas.


Vista preliminar

Una vez ms, se ejecuta nuestro cdigo para cada problema de la pgina
-primero el procedimiento Detail-Format se ejecuta varias veces mientras Access compone los registros en el diseo de la pgina, y despus el
procedimiento de evento Detail-Print se ejecuta varias veces para imprimir cada registro. Nuestro nuevo procedimiento deja invisibles las tres
etiquetas en la mayora de los registros, porque slo unos pocos problemas estn resueltos.

Observar que en la primera pgina del informe caben muchos ms problemas que antes, porque ya no muestra los campos vacos de los problemas no resueltos. Si se desplaza hacia abajo en el informe, podr verificar que los tres cuadros siguen apareciendo en los problemas
resueltos.

2. Desplcese hacia abajo en la ventana para mostrar el quinto registro de la


pgina -el primer problema del segundo grupo. (Si es necesario, desplcese un poco hacia la derecha para ver los campos de resolucin.)
Los tres campos de resolucin, pertenecientes al problema que est resuelto, aparecen en la pgina.

En los problemas
no resueltos, la
secc~nDetalle
se comprime
para mostrar
nicamente
aquellos campos
que tienen datos
Dsmpan

~lc~lrsprcrsteuon
enis fena p e o w a e i saiiwrde
'qUpOs ,susi WP la mima iez

fie=lnd@ raro-

1010998

Estos campos
slo aparecen en
los problemas
que estn
resueltos

Ya hemos visto cmo podemos hacer dos tipos de cambios mientras


Access prepara el informe para imprimirlo: cambios antes y despus de
formatear la seccin. Pero hasta ahora nuestros cambios se han limitado a
establecer propiedades para los controles de la seccin. Aunque estos tipos
de cambios pueden llegar a ser muy potentes, no son ms que el principio
-tambin podemos realizar clculos, asignar valores a los controles e
incluso combinar varios procedimientos de evento del informe para conseguir los resultados deseados. En la siguiente seccin, utilizaremos un
sencillo ejemplo de estas tcnicas para mejorar el informe de problemas.

CLCULODE TOTALES MIENTRAS SE IMPRIME EL INFORME


Una caracterstica estndar de los informes es la posibilidad de calcular totales -la suma o el promedio de unos valores, por ejemplo- para todos los
registros de una seccin o del informe completo. E1 Asistente para informes

suele ser el encargado de configurar este tipo de campos. Nosotros tambin


podemos aadirlos mediante la inclusin de un cuadro de texto en el pie de
un grupo o en el pie del informe y la asignacin a su propiedad Origen del
control (ControlSource) de la expresin adecuada. El informe de problemas
ya tiene un control de este tipo en la seccin pie de cada grupo de problemas
de un empleado: el control Total de problemas calcula (cuenta) el nmero de
problemas asignados al empleado.
Aunque los totales estndar pueden realizar un gran nmero de operaciones
en los informes, puede que nos interese realizar nuestros propios clculos
utilizando Visual Basic. Un motivo razonable puede ser la intencin de incluir totales para un grupo de registros que no coincidan con el modo de
agrupacin estndar de un informe. Por ejemplo, adems del total de cada
grupo, podramos intentar mostrar un total acumulado en la pgina actual del
informe. Para hacerlo, deberemos guardar en todo momento el total acumulado desde el cdigo, mientras Access imprime el informe. En los puntos
apropiados, colocaremos el total acumulado dentro de un control cuadro de
texto del informe.
Otro motivo similar para calcular totales por nuestra cuenta puede ser dividir los valores en grupos que no pueda manejar el propio informe. El informe Issues, por ejemplo, agrupa los registros de problemas por el empleado
al que estn asignados. Pero suponga que queremos mostrar el nmero de
problemas pendientes o de problemas de prioridad alta al final de la seccin
de cada empleado. En otras palabras, queremos un resumen que diga: Este
empleado tiene un total de cuatro problemas, tres de los cuales estn abiertos y uno de ellos es de prioridad alta. No es fcil calcular estos valores en
una expresin -tendremos que escribir cdigo Visual Basic para contar los
problemas por nuestra cuenta. En esta seccin aadiremos cdigo en procedimientos de evento para que calculen estos totales y los muestren para cada
empleado en dos cuadros de texto en el pie de grupo.
Cree cuadros de texto para mostrar totales por secciones

Para imprimir el resultado de los clculos que realicemos en los procedimientos de evento, necesitamos colocar controles independientes en el informe. Crearemos dos cuadros de texto en el pie de grupo del informe Problemas, uno para mostrar los problemas pendientes que tiene cada empleado
y otro para mostrar el nmero de problemas de prioridad alta.

1. En la barra de herramientas, pulse el botn Cerrar.


El informe volver a la vista Diseo.

2. Si no puede ver la seccin Pie AssignedTo del informe, desplcese hacia


abajo por el mismo.

En esta seccin de pie de grupo, podemos ver el control Total de problemas, que muestra el mtodo estndar para obtener totales de seccin. La
expresin Origen del control, =Cuenta([lssuelD]),le indica a Access que
cuente el nmero de registros de la seccin que contienen un valor
IssueID.
Cuadro de texto

3. En el cuadro de herramientas, pulse la herramienta Cuadro de texto.


4. Pulse en la seccin Pie AssignedTo del informe, a la derecha del campo
Total de problemas y ms o menos en el centro del informe.

Pulse aqupara
crear el cuadro de
texto

Aparecer un cuadro de texto independiente en el informe. Su etiqueta


muestra un nombre predeterminado (algo as como Texto.55).Para facilitar la referencia desde el cdigo, introduciremos un nuevo nombre para
el control.

5. En la hoja de propiedades, pulse la pestaa Otras y asigne a la propiedad


Nombre el valor ProblemasPendientes.
Debemos cambiar tambin la etiqueta que acompaa al cuadro de texto.

6. Pulse la etiqueta para seleccionarla.


7. Para cambiar la etiqueta del control, pulse dos veces su texto y escriba
Pendientes para reemplazar al texto anterior.
Esto finalizar la creacin del cuadro de texto ProblemasPendientes que
utilizaremos para mostrar el nmero de problemas pendientes de cada
empleado. A continuacin, crearemos un segundo cuadro de texto independiente a la derecha del que acabamos de terminar.

8. En el cuadro de herramientas, pulse la herramienta Cuadro de texto y


pulse en la seccin Pie AssignedTo entre el cuadro de texto ProblemusPendientes y el extremo derecho del informe.

Aparecer otro cuadro de texto independiente en el informe.

9. En la hoja de propiedades, asigne a la propiedad Nombre el valor Prioridadhlta.


10. Cambie la etiqueta del control por Prioridad alta.

11. Si es necesario, arrastre los dos cuadros de texto para distribuirlos uniformemente a lo ancho de la seccin Pie AssignedTo del informe.

Aada cdigo que incremente los campos ProblemasPendientes


y PrioridadAlta

Cada vez que se imprima un registro de problema de un empleado, nos interesa que el cdigo cuente el nmero de problemas pendientes y de problemas
de prioridad alta. Podemos realizar esta cuenta de dos formas: almacenando
los totales en variables que definamos o colocndolos directamente en los
cuadros de texto independientes que acabamos de crear. En este caso utilizaremos el segundo mtodo (el ms sencillo). Cada vez que el informe imprima un problema pendiente o de prioridad alta, incrementaremos el valor de
uno de los cuadros de texto. Podemos hacerlo como respuesta al evento
Print, que se activa justo antes de imprimir cada problema.
Adems, necesitamos poner a cero estos valores cada vez que comencemos
la seccin de un nuevo empleado -si no lo hacemos, el cdigo crear un total acumulado que sumar los problemas de todos los empleados anteriores.
Para poner los campos a cero, aadiremos cdigo al procedimiento de evento Print de la seccin Encabezado AssignedTo, que se activa justo antes de
que comience a imprimirse la seccin de un empleado.

1. Pulse la barra de la seccin Encabezado AssignedTo.

2. En la hoja de propiedades, pulse la pestaa Evento, pulse la propiedad Al


imprimir (OnPrint) y despus pulse el botn Generar.
3. Pulse dos veces Generador de cdigo.
Visual Basic mostrar el procedimiento GroupHeaderO_Print del informe. Access ejecutar este procedimiento cada vez que vaya a imprimir el
encabezamiento AssignedTo para un nuevo empleado.

4. Aada el cdigo que sigue al procedimiento.


' Inicializa los campos de totales que aparecen en el pie para
' cada empleado.

ProblemasPendientes = O
PrioridadAlta = O

Este cdigo pone a cero los valores de los dos cuadros de texto independientes, ya que, al comienzo de cada seccin el empleado no tiene
contabilizado ningn problema. A medida que Access vaya avanzando
por el informe, estos nmeros irn cambiando. Se har en el procedimiento de evento DetailPrint, nuestra siguiente parada. El procedimiento de evento Detail-Print ya contiene el cdigo que aadimos hace
algunas pginas.

5. Desplace la ventana Cdigo hasta que aparezca el procedimiento de


evento D e t a i u r i n t , pulse justo encima de la instruccin End Sub y escriba el siguiente cdigo:
' Incrementa los campos de totales si el problema est pendiente
' o tiene prioridad alta.

If PrintCount = 1 Then
If Status = "Activo" Then
ProblemasPendientes = ProblemasPendientes + 1
End If
If Priority = "Alta" Then
PrioridadALta = Prioridadlta + 1
End If
End If

Este cdigo realizar un seguimiento de los problemas pendientes y de


los de prioridad alta mientras se imprime el informe. Aunque el cdigo
es muy simple, ilustra un par de conceptos clave. Esto es lo que hace el
cdigo:
El evento Print suele activarse una sola vez por cada seccin impresa
en un informe. No obstante, en ciertos casos puede ocurrir ms de una

vez, como cuando la seccin Detalle ocupa dos pginas. Por este motivo, el procedimiento de evento Print tiene un argumento llamado
PrintCount, que nos indicar si es la primera vez que se activa el evento. Para evitar contar un registro dos veces, el cdigo utiliza una instruccin If ...Then, que slo ejecutar el resto del cdigo si PrintCount
es 1 - e n otras palabras, slo la primera vez que se ejecute el procedimiento para un problema dado.
El resto del cdigo lo componen dos bloques If ...Then prcticamente
iguales. El primero de ellos comprueba si el problema actual est pendiente -si el campo Status (Estado) contiene el valoi- Activo- en
cuyo caso incrementa en 1 el valor del control ProblemasPendientes.
El segundo bloque hace lo mismo con los problemas de prioridad alta,
incrementando el valor del control PrioridadAlta si el campo Priority
(Prioridad) contiene el valor Alta.
Como podemos ver, cuando queremos incrementar un valor en Visual
Basic, escribimos el nombre del control o variable seguido de un signo
igual y de la expresin que calcula el nuevo valor. La primera de las instrucciones, por ejemplo, podra leerse como: Asigna al valor del campo
ProblemasPendientes su valor actual ms 1.
Una vez que se ha ejecutado este cdigo para un problema, el campo Problemaspendientes contendr el nmero de problemas pendientes impresos hasta el momento y el campo PrioridadAlta contendr el nmero de
problemas de prioridad alta que se han impreso. Cuando se imprima la
seccin de pie de grupo, los campos contendrn sus valores finales, que
sern los que se impriman en el informe.

6. En el men Depuracin, seleccione Compilar Cap 13 Problemas.


7. Cierre Visual Basic.
Muestre la vista preliminar del informe

Ahora ya podemos probar el informe y ver qu tal funcionan los totales.

1. Pulse el botn Vista preliminar en la barra de herramientas.


l4sta preliminar

Ahora que hemos aadido ms cdigo, pasan todo tipo de cosas cuando
imprimimos el informe o mostramos su vista preliminar. Cuando Access
est listo para imprimir la seccin de encabezamiento de cada empleado
con problemas pendientes, se ejecuta el procedimiento GroupHeader0-Print, poniendo a cero los campos independientes. Despus se ejecuta el procedimiento D e t a i o r i n t para cada registro de problema.
Cuando se va a imprimir la seccin de pie de grupo para un empleado, los
cuadros de texto contienen ya los valores correctos. Despus, cuando Ac-

cess pasa a la seccin del siguiente empleado, el cdigo vuelve a poner


los campos a cero.

2. Si es necesario, desplcese hacia abajo en la ventana para ver la seccin


de pie de grupo de Brbara Moneo y tambin la de Carlos Fernndez.
Como puede ver, los cuadros de texto que hemos creado muestran ahora
los totales correctos.

Los nuevos
camDos

I
P."l.lt".

r n ~ i d s dik.

"

m*--*

1
=m'-

Los ejemplos que hemos utilizado en este captulo muestran cmo podemos
acceder a los datos de registros individuales en un informe. Las necesidades
particulares de cada informe podrn variar en un amplio margen, que nos
obligar a experimentar distintas posibilidades de impresin hasta que todo
est correcto. Sin embargo, un buen comienzo es recordar los distintos lugares en los que podemos aadir cdigo -los eventos Format y Print de cada
seccin- y la forma en la que pueden afectar al informe, variando las propiedades del informe y de los controles, as como los valores de los controles independientes.
Cierre el informe y salga de Access

1. Cierre la ventana del informe y pulse S cuando Access pregunte si s


quieren guardar los cambios.

2. En el men Archivo, seleccione Salir.

Los cambios que hemos realizado al informe en este captulo han tenido un efecto prctico sobre la forma en la que se imprima el informe de problemas (Issues).Pero aunque nuestro cdigo establezca una
serie de propiedades y valores, no ha efectuado ningn cambio significativo en el funcionamiento del informe -asume que el informe se
imprime hasta que est completo, incluyendo todos los registros y secciones. En algunas ocasiones se nos puede plantear la necesidad de seleccionar qu secciones se imprimirn y dnde, por lo que Access proporciona propiedades de tiempo de ejecucin para el informe, as
como argumentos de los procedimientos de evento que permiten a
nuestro cdigo influir en el proceso de impresin.
La tcnica ms simple para controlar si una seccin se imprimir o no,
es el argumento Cancel del procedimiento de evento Print. Si deternamos en el cdigo que no queremos que una seccin en concreto
imprima, podemos poner a True el argumento Cancel del procediento y Access no imprimir la seccin. Por ejemplo, en el informe
de problemas podramos excluir los problemas del empleado que est
utilizando la aplicacin. Para ello, escribiramos cdigo que cancelara
la impresin de las secciones cuyo campo AssignedTo (Asignado a)
contuviera el identificador del empleado actual.
Para obtener un control ms estrecho sobre qu secciones se imprimirn y dnde, podemos utilizar tres propiedades de tiempo de ejecucin:

Resumen del captulo


Para

Haga esto

Llevar a cabo acciones


antes de que se determine
la disposicin de un
registro en una pgina de
un informe

Escriba un procedimiento de evento Format


para la seccin Detalle (Detail) del informe.

Llevar a cabo acciones


antes de que se imprima
cada registro (o seccin
de encabezamiento o pie)
de un informe

Escriba un procedimiento de evento Print para


la seccin Detalle (o para otra seccin) del
informe.

Impedir que se impriman


los controles que no
tengan valor alguno

Asigne el valor True a la propiedad


Autocomprimible de los controles y de la
seccin a la que pertenecen. Si los controles
tienen etiquetas en la seccin Detalle que no
queremos que se impriman, asigne False a la
propiedad Visible en los registros que no
tengan valores.

Calcular totales de
seccin mientras se
imprime un informe
y mostrarlos en el
mismo

Cree controles de cuadros de texto


independientes para almacenar y mostrar los
totales en la seccin de pie correspondiente
del informe. Escriba un procedimiento de
evento que ponga los valores totales a cero al
comienzo de cada seccin y otro que actualice
los valores cuando se imprima cada registro o
seccin.

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Ayuda

Creacin y personalizacin crear informes


de informes
Agrupamiento de datos
en informes

agrupar registros en informes


\

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Respuesta a eventos de
informe utilizando
procedimientos de evento

evento Format o evento Print

Modificacin de la
distribucin de los datos
y de espacios en blanco
en un informe

propiedad Autocomprimible o
propiedad MoverDiseo

AVANCE DEL SIGUIENTE CAP~TULO


Las tcnicas que estamos aprendiendo en los ltiinos captulos de este libro
son ms especializadas y nos ensean nuevos objetos de Access, adems de
encaminarnos hacia nuevas reas de la programacin que deberemos explorar por nuestra cuenta para crear aplicaciones ms avanzadas. En el siguiente captulo veremos otra serie de conceptos conocidos como Automatizacin,
que nos permitirn trabajar directamente con otras aplicaciones Windows
desde nuestro cdigo Visual Basic en Access. En concreto, combinaremos
las capacidades de Access con las de Microsvft Word y Outlook, aprendiendo a enviar rdenes Visual Basic desde Access a esas aplicaciones.

Comparticin de datos
con otras aplicaciones
Objetivos del captulo
En este captulo aprender a:
Tiempo estimado:
35 minutos.

iUtilizar

objetos de Automatizacin para trabajar con otras aplicaciones


Windows.

iEnviar

rdenes y datos a Microsoft Word.

w Trabajar con informacin de contactos en Microsoft Outlook.

i' Obtener datos de otra aplicacin, como Microsoft Excel.


Cuando viajamos al extranjero, la comunicacin con los dems puede ser a
la vez una aventura y un reto. Aunque las distintas lenguas y culturas puedan
plantearnos algunos obstculos, los seres humanos siempre encontramos alguna forma de comunicar nuestro mensaje a los dems, ya sea mediante el
lenguaje corporal, las seales con las manos o alguna aproximacin al idioma extranjero. Como podra atestiguar cualquiera que haya viajado mucho,
la exposicin a otras culturas puede ser muy enriquecedora -absorbemos
parte de la experiencia y 19 sabidura de los dems en cada nuevo encuentro.
Como programador de Microsoft Access, el trabajo con otras aplicaciones
Windows es en cierto sentido similar a la comunicacin con gente de otras
culturas - e s un reto, pero hay mucho que ganar al compartir las posibilidades de otros sistemas. Afortunadamente, Microsoft Visual Basic proporciona un mecanismo de comunicacin entre dos aplicaciones distintas, como
Access y Excel, o Access y Word. Se denomina Automatizacin. La Auto-

matizacin nos proporciona un marco para utilizar objetos que pertenecen a


otras aplicaciones como si fueran una extensin de la aplicacin con la que
estamos trabajando. Igual que ocurre con la comunicacin humana, veremos
que es importante saber algo sobre el lenguaje de la otra parte. Con Automatizacin, combinamos los objetos, las propiedades y los mtodos de la otra
aplicacin con el cdigo de Visual Basic que escribimos para Access.
En este captulo aprenderemos las tcnicas generales para comunicarnos utilizando Automatizacin. Al trabajar con Word y Outlook descubriremos
cmo combinar las capacidades de los dos sistemas para mejorar nuestras
aplicaciones de base de datos.
Nota Para poder completar los pasos de este captulo es imprescindible que
tenga instalado en su computadora Microsoft Word 2000 y Microsoft Outlook 2000.

Inicie la leccin
i Inicie Access

y abra la base de datos Cap14 Problemas de la carpeta de

prcticas.

USO DE OBJETOS DE AUTOMATIZACIN


Access no es un buen procesador de textos. Se puede crear un informe en Access que parezca una carta profesional -pero nos costar mucho trabajo y
nunca tendr la flexibilidad de cualquier aplicacin de procesamiento de textos. De igual forma, Access no es una calculadora estadstica, ni un administrador de proyectos, ni un programa de presentaciones grficas. Pero es un
sitio estupendo para almacenar datos!
Una forma de ampliar las posibilidades de nuestras aplicaciones Access consiste en unirle las ventajas de otras aplicaciones. La Automatizacin es el mecanismo que proporciona Visual Basic para lleva a cabo esta tarea. Si las bases de datos que creemos necesitan las ventajas de otras pplicaciones
Windows -y dichas aplicaciones utilizan Visual Basic- podemos utilizar
cdigo Visual Basic para combinar la potencia de Access con las ventajas de
otros sistemas.
En captulos anteriores hemos aprendido a utilizar distintos objetos que podamos controlar desde Access, como los objetos Form, Report, Database y
Recordset. Las dems aplicaciones tambin tienen objetos, y nuestro cdigo,

ejecutndose en Access, podr trabajar en segundo plano con dichos objetos.


Excel, por ejemplo, utiliza los objetos Worksheet y PivotTable, que podremos incorporar en una aplicacin de Access utilizando tcnicas similares a
las que hemos aprendido para trabajar con objetos de Access. Muchas otras
aplicaciones Windows ponen sus objetos a nuestra disposicin a travs de la
Automatizacin.
Aunque las posibles formas de combinar aplicaciones son ilimitadas, estos son
algunos de los modos ms comunes de utilizar Automatizacin con Access:

Creacin o edicin de documentos. Desde el cdigo Visual Basic de Access podemos crear o abrir un documento en Word o una hoja de clculo en
Excel, por ejemplo, y controlarlos utilizando las rdenes de la otra aplicacin. Sin necesidad de que el usuario tenga que hacer nada, podemos enviar
datos de nuestra base de datos al documento o a la hoja de clculo, e incluso
utilizar las rdenes de la otra aplicacin para imprimirlos. En este captulo
utilizaremos estas tcnicas para trabajar con un documento en Word.
Obtencin de datos de otra aplicacin. Aunque normalmente guardamos
los datos de nuestra aplicacin en tablas de Access (o en otro formato con el
que pueda vincularse Access), ocasionalmente podemos tomar datos de archivos de otras aplicaciones. Por ejemplo, podramos incorporar informacin de agenda o de contactos guardada en Outlook. Mediante Automatizacin, podemos utilizar en Visual Basic las propiedades y mtodos de Outlook
para acceder a esta informacin.
Distribucin de datos a otras aplicaciones. Todas las tcnicas nombradas
hasta ahora implican la escritura de cdigo en Access para controlar otras
aplicaciones -otro sistema consiste en escribir cdigo Automatizacin en
otra aplicacin para trabajar con los datos de una base de datos Access. Esta
estrategia tiene ms sentido si nuestra aplicacin trabaja para otro sistema de
programacin. Por ejemplo, si creamos un sistema financiero utilizando Visual Basic en Excel, podramos intentar guardar parte de los datos en tablas
de Access e incluso imprimir informes de Access desde la aplicacin Excel.
En este captulo no tendremos oportunidad de utilizar todas estas tcnicas, pero
descubriremos muchos conceptos de Automatizacin aplicables a todas ellas.

ENVIO DE RDENES A MICROSOFT WORD


Suponga que desea que su aplicacin cree e imprima un memorando, incluya los nombres en una lista de correo o imprima sobres -tareas que queremos realizar en Word. Afortunadamente, Word utiliza Visual Basic como
lenguaje de programacin y soporta Automatizacin, con lo cual es posible
realizar desde Access prcticamente cualquier tarea que se pueda llevar a
cabo en el propio Word.

Una posible estrategia de Automatizacin es abrir un objeto documento directamente y controlarlo desde Visual Basic utilizando sus propios mtodos
y propiedades. Otra alternativa es utilizar el objeto Application, que est disponible en todas las aplicaciones que soportan Automatizacin, y a travs del
cual se pueden enviar rdenes a la aplicacin -Word en este caso- como
si estuvisemos programando en el propio Word. Es posible abrir documentos, insertar texto y controlar Word de la forma que nos convenga -todo ello
desde un procedimiento de nuestra aplicacin Access. En cualquier caso, declararemos una o ms variables de objeto, utilizaremos instrucciones especiales para conseguir que las variables hagan referencia a los objetos de
Word y luego utilizaremos los mtodos y las propiedades de Word.
'

En este captulo escribiremos cdigo Visual Basic para llevar a cabo acciones en Word: crear un memorando e insertar texto en el mismo. El memorando que crear nuestra aplicacin servir como recordatorio para los empleados que tengan problemas pendientes en la base de datos -y nuestro
cdigo determinar automticamente a qu empleados debe ir dirigido.

Aunque no se utilicen en este libro, existen otras dos tcnicas en Windows que, al igual que la Automatizacin, permiten utilizar otras aplicaciones desde Microsoft Access. La primera es la Vinculacin e

en un formulario o un informe de Access para luego insertar en ese

propiedades para ellos establecidas-,

es posible utilizar cdigo

os o para modificar sus propiedades OLE.


as aplicaciones que no soportan ni Automatizacin ni OLE, se
escribir cdigo que utilice Intercambio dinmico de datos
, del ingls Dynamic Data Exchange). DDE nos permite enviar,
segundo plano, datos y rdenes de unas aplicaciones a otras. Por
mplo, algunos programas de comunicaciones para Windows soporn DDE, con lo cual es posible incluir rdenes DDE en el cdigo Vi1 Basic para recoger datos de un modem y almacenarlos en una
e de datos de Access.
ara obtener ms informacin acerca de estas tcnicas busque en el n-

Abra la plantilla de Word que utilizar nuestra aplicacin

Antes de escribir el cdigo Automatizacin en la aplicacin Seguimiento de


problemas, abriremos una plantilla de documento Word, a partir de la cual
crearemos el memorando. El uso de una plantilla es una estupenda forma de
crear un documento que repetiremos con cierta frecuencia, como una carta.
Si nuestra plantilla est prcticamente completa, todo lo que deber hacer el
cdigo ser rellenar la informacin que falte, como los nombres y direcciones que se encuentran en nuestra base de datos.

1. Inicie Word. (Pulse el botn Inicio de la barra de tareas, apunte a Programas y seleccione Microsoft Word.)

2. En el men Archivo, pulse Abrir.

3. En el cuadro Tipo de archivo, seleccione Plantillas de documento.


4. Vaya a la carpeta de archivos de prcticas y abra la plantilla de documento Cap14 Memorando.

tar Emmiltn &riarnientas

Tnbb Yemnna

. - 1

"

@ , ~ ~ o ~BII
i n . &-4.

B4

"e<

w s =:gs=

:z;;'gie

'

"

Aada un marcador en la plantilla

Cuando nuestro cdigo cree el memorando, nos interesar insertar en el mismo los nombres de los empleados. El primer paso ser marcar el lugar en el
que introduciremos el texto en el documento, para que el cdigo pueda localizarlo fcilmente. Una forma sencilla de hacerlo es mediante un marcador,
una marca con nombre de Word a la que podemos saltar en un documento
utilizando el mtodo GoTo de Word.

1. Pulse la segunda lnea del memorando, a la derecha de la cadena Para:,


para colocar el punto de insercin.
Ah es donde introduciremos los nombres de los empleados desde Access.

2. En el men Insertar, seleccione Marcador.


Word mostrar el cuadro de dilogo Marcador.

3. Escriba LneaMemoPara en el cuadro Nombre del marcador y pulse


Agregar.
Aunque no podemos ver el marcador en el documento, nos proporciona
una forma rpida de saltar a este punto desde el cdigo de Access.

4. En el men Archivo, seleccione Salir y pulse S cuando Word le pregunte si desea guardar los cambios.
Word se cerrar y Access volver a estar al frente.
Abra la funcin CreateWordMemo del mdulo Miscellaneous

El men Herramientas del formulario Problemas (Issues) incluye la orden


Crear Memo de Word, para que los usuarios puedan ejecutar el cdigo Automatizacin que vamos a escribir. El elemento del men ejecuta una funcin
llamada CreateWordMemo, que ya est incluida en el mdulo Miscellaneous. Simplemente abriremos la funcin y le aadiremos el cdigo Automatizacin para que funcione.
la ventana Base de datos, pulse el acceso directo Mdulos y, a continuacin, pulse dos veces sobre el mdulo Miscellaneous.

i En

Option Explicit
Publlc InQCurrentEmpID As Long
Public Function CreateWordMem ( )
Kbre un memorando e n Ilord e inserte texto - usado por orden de men.
Dim rstEmployees Ils Neu ADODB.Recordset
Ahre un recordset basado en la consulca Employee~WlthOpenIssues.
rstErnployees.Open "EmployeesUithOpenIssues",
CursentPro~ect.Conneccion, adopentegset, adlockptmistic

' S I nadie tiene problemas activos, m s t r a r un mensaje y salir.


If rstEmployees.RecordCount = O Then
DisplayMessage "No hay p r o b l e m activos aue anunciar."
Exit Function

Visual Basic mostrar el mdulo Miscellaneous. El primer procedimiento del mdulo es la funcin Create WordMemo.
La funcin ya contiene algo de cdigo importante -pero es cdigo al que ya
estamos habituados por los captulos anteriores. A continuacin se explica lo
que hace.
i

La instruccin Dim declara la variable rstEmployees y crea un conjunto


de registros ADO.

i La lnea

siguiente abre un conjunto de registros de acuerdo con una consulta denominada Employees WithOpenIssues (empleados con problemas
activos). Como su nombre indica, esta consulta devuelve un registro por
cada empleado que tenga al menos un problema pendiente en la tabla
Zssues --exactamente los individuos a los que queremos enviar el memorando.
bloque If ...Then ...Else comprueba que al menos haya un empleado en
el recordset - e n caso contrario, no tendr sentido enviar el memorando. La condicin que examina la instruccin If ...Then hace referencia a
una propiedad del objeto Recordset que an no hemos visto: la propiedad RecordCount. Esta propiedad devuelve el nmero de registros del
conjunto de registros que Access ha ledo del disco hasta el momento.
(Tenga en cuenta que no es necesariamente el nmero total de registros
del conjunto de registros, a menos que hayamos llegado al final del conjunto de registros.) Si la propiedad RecordCount devuelve 0, significar
que est vaco; en cuyo caso el cdigo mostrar un mensaje y terminar
el procedimiento.

i El

Establezca una referencia a la bibloteca de objetos de Word

Word tiene su propia biblioteca de objetos, similar a las bibliotecas de objetos Access, VBA y D A 0 que exploramos en el Captulo 12. Para poder utilizar objetos de Word en nuestro cdigo es necesario que se lo indiquemos a
Access, definiendo una referencia a la biblioteca de objetos de Word. Y ya
que vamos a establecer esa referencia, aprovecharemos para establecer tambin otra para la biblioteca de objetos de Outlook, pues nos har falta ms
adelante en este captulo.

1. En el men Herramientas, pulse Referencias.


Aparece el cuadro de dilogo Referencias donde se muestran todas las bibliotecas de objetos que estn registradas en su sistema. Las tres que aparecen marcadas son aquellas con las que trabajamos en el Captulo 12:
VBA, Access y ADODB.

nft ActiieX Data Oblects 2.1 Library


Llt~~cacin:C:\ARCHIVOS DE PROf;RAE.IA\ARCHIVCiS COMl~lNE5JSVSTEP~l\

Idorna:

Estindar

2. Localice Microsoft Word 9.0 Object Library y Microsoft Outlook 9.0


Object Library en la lista de referencias disponibles y pulse en el cuadro
de verificacin que aparece junto a esas entradas para seleccionarlas.

3. Pulse Aceptar.

Consejo Adems de permitirnos establecer las condiciones necesarias


para poder trabajar con una biblioteca de objetos nueva, la orden Referencias tambin sirve para permitir el acceso al cdigo Visual Basic incluido en
otra base de datos -para poder llamar a los procedimientos de una base de
datos, es necesario establecer una referencia a ella. De la misma forma,
tambin es habitual que se necesite establecer una referencia para poder utilizar productos adicionales (add-in) para Access, como, por ejemplo, los
controles ActiveX. Para establecer una referencia a un archivo que no aparezca en el cuadro de dilogo Referencias, basta con pulsar el botn Examinar y localizar el archivo.

Escriba cdigo que cree un documento de Word e inserte texto

Es el momento de ponerse en marcha. En primer lugar, aadiremos una lnea


de cdigo que declare una variable para nuestro objeto Application Word;
esta variable nos proporcionar una pasarela entre Access y Word. Despus,
aadiremos un bloque de cdigo Automatizacin que hablar con el objeto aplicacin Word, pidindole que cree el documento memorando y envindole algunas rdenes ms, para finalmente insertar en el documento los nom-

bres de los empleados que figuren en el conjunto de registros rstEmployees.


Comprobar que la programacin con Automatizacin es similar al resto de
la programacin con Access y objetos D A 0 - e x c e p t o en que para enviar rdenes a la otra aplicacin es necesario conocer otra completa biblioteca de
objetos, llena de propiedades, mtodos y constantes.

1. Aada la siguiente lnea debajo de la instruccin Dim existente:


Dim appWord As New Word.Application

Utilizaremos esta variable objeto appWord en el resto del procedimiento


para referirnos a Word y transmitirle rdenes. Observe que la instruccin
declara la variable con el tipo de datos especial Word.Application -este
tipo de datos slo est disponible porque hemos establecido una referencia a la biblioteca de objetos de Word. La instruccin tambin usa la palabra clave New, que hace que Visual Basic cree un ejemplar de Word,
abrindolo en segundo plano si todava no est en ejecucin.

2. Aada cdigo al final del procedimiento, justo antes de la instruccin


End Function (si Word o los archivos de prcticas no estn en sus carpetas predeterminadas del disco fijo, asegrese de sustituir en el cdigo las
rutas de acceso por las correspondientes).
' Abre un documento basado en la plantilla de m r a n d o , desactiva
' la comprobaci6n ortogrfica, se coloca en el marcador
' LneaMemoPara y luego muestra Word.

With appword
.Documents.Add "C:\Archivos de ejercicios de Access\Capl4
Memorando. dot"
.ActiveDocument.ShowSpellingErrors = False
.Selection.GoTo wdGoToBookrnark, Name:="LineaMemoParaM
.Visible = True
End With
' Recorre los registros del recordset devuelto por la consulta,
' insertando el nombre de cada empleado en el documento.

Do Until rstEmployees.EOF
appWord.Se1ection.TypeText rstEmployees!EmployeeName
rstEmp1oyees.MoveNext
LOOP

& "

"

Veamos cmo funciona este cdigo.


En las seis primeras lneas del cdigo se utiliza algo nuevo para nosotros:
un bloque With. La instruccin With proporciona simplemente una forma de ahorrar cdigo a la hora de realizar distintas acciones con el mis-

mo objeto. Access interpreta este cdigo como si hubiramos escrito el


nombre del objeto delante de cada punto en las lneas siguientes. Por
ejemplo, la primera lnea que sigue a la instruccin With es equivalente
a app Word.Documents.Add, aunque no se haya especificado la variable
app Word. Podemos utilizar un bloque With en cualquier cdigo de manipulacin de objetos -pero resulta especialmente til para Automatizacin, porque a menudo querremos realizar varias acciones sobre un mismo objeto. Como era de esperar, la instruccin End With cierra el bloque
With.
i La primera instruccin dentro del bloque With utiliza el mtodo Add de

la coleccin Documents de Word. La coleccin Documents contiene un


objeto Document por cada documento de Word que est abierto en ese
momento, de forma similar a la coleccin Forms de Access que contiene un objeto Form por cada formulario que est abierto. El mtodo Add
crea un objeto Document nuevo -igual que si el usuario hubiese pulsado la orden Nuevo en el men Archivo. El argumento del mtodo Add
especifica una plantilla de Word a partir de la cual se crear el nuevo documento, en este caso la plantilla Cap14 Memorando que acabamos de
ver. (Si no se especifica este argumento se crear un documento de Word
vaco.)
i La

siguiente instruccin del bloque establece una propiedad del documento Word que se acaba de crear: la propiedad ShowSpellingErrors. Al
asignar el valor False a esta propiedad evitamos que Word muestre una
lnea roja debajo de cada palabra que no reconozca, como podra ser el
caso de los nombres de los empleados que el cdigo se encargar de introducir.

i La

siguiente instruccin del bloque lleva el punto de insercin de Word


al marcador LneaMemoPara que antes creamos. Para conseguirlo, hace
referencia a un objeto muy importante de Word, el objeto Selection, que
representa el punto de insercin (o el texto que est seleccionado) del documento Word. El mtodo GoTo del objeto Selection se encarga de cambiar la ubicacin del punto de insercin. Al utilizar la constante wdGoToBookmark como primer argumento, el mtodo GoTo hace que el punto
de insercin se coloque en el marcador especificado por el argumento
Name.

i La ltima instruccin del bloque asigna el valor True a la propiedad Vi-

sible de Word. Hasta que se hace que Word est visible, toda la actividad
en Word se produce en segundo plano. Cuando se ejecute esta instruccin, aparecer en la pantalla el nuevo documento de memorando.
i Ahora que el memorando ya est preparado y en l estamos colocados en

el lugar adecuado, el cdigo puede insertar los nombres del conjunto de


registros. Para insertar los distintos nombres del conjunto de registros, el

cdigo utiliza un nuevo mecanismo de repeticin de cdigo, el bucle Do.


La instruccin Do va seguida de una condicin Until: mientras la condicin devuelva False, se ejecutar el bloque de cdigo. La instruccin
Loop le indica que se vuelva a ejecutar -suponiendo que la condicin
siga sin ser True- y el bucle contina hasta que la condicin toma el valor True.
La condicin de la instruccin Do Until hace referencia a la propiedad
EOF (final de archivo) del objeto Recordset. El valor de la propiedad
EOF de un conjunto de registros es False mientras haya un registro actual en el conjunto de registros. Si nos situamos ms all del ltimo registro del conjunto de registros (o si no hay ningn registro), el valor de
la propiedad EOF ser True.
i La

siguiente lnea utiliza el mtodo TypeText del objeto Selection de


Word para escribir un nombre en el documento. Podemos colocar una expresin de cadena detrs del mtodo TypeText para que se coloque en el
documento - e n este caso, es el valor del campo EmployeeName (nombre del empleado) del conjunto de registros seguido de tres espacios (para
separar cada nombre del siguiente).
La siguiente instruccin utiliza el mtodo MoveNext del objeto Recordset para pasar al siguiente registro del conjunto de registros rstEmployees. Despus vuelve a empezar: si hay otro empleado, se vuelve a ejecutar
el cdigo TypeText; si no, la expresin Not rstEmployees.EOF devuelve
False y el bucle termina. Ya se ha completado el memorando!

3. En el men Depuracin, seleccione Compilar Cap14 Problemas.


Guardar

4. Pulse el botn Guardar de la barra de herramientas.


Tenga en cuenta que al terminar el procedimiento, Word todava sigue abierto y muestra el memorando para que los usuarios lo editen si les apetece. Si
queremos que se salga de Word una vez que se termina de trabajar con l en
el procedimiento, se puede utilizar el mtodo Quit del objeto aplicacin
Word.
Pruebe el procedimiento de Automatizacin

Creemos por fin el famoso memorando. Para ejecutar el procedimiento de


evento, podemos utilizar la orden del men Herramientas personalizado de
la barra de mens del formulario Issues.

1. Cambie a Access.
Ver Microsofi
Access

2. En la ventana Base de datos, pulse el acceso directo Formularios y, a continuacin, pulse dos veces sobre el formulario Issues (Problemas).

3. En el men Herramientas, pulse Crear memorando de Word.


Nuestro cdigo se ejecutar -abrir un conjunto de registros, crear un
objeto Application Word, crear el nuevo memorando e insertar los
nombres del conjunto de registros. Al terminar, estaremos en Word con
el memorando completo delante de nuestro ojos.

. ,,xs

z o s E ' = : = < z- i cri

Memorando
P
,,

CarlmFemander Rosa Puido PaciaPintada Bbrbara Moneo

rerii: 1M7R9
a s u n t i Prdilemas aendierdes

i~esoived
vucstms p n ~ as!
~ m
Todos los que apareceis en la Iinea Para de este memotando tenas uno o ms problemas activos
aslrjnados actualmente a vosotros en la aplicacion de Seguimiento de problemas

"ag. 1

l
A 7 cm
.. I j..
."'-

L8n. 2

Col, ii

Erpaiivl ib

..""

4. Cierre el documento memorando y pulse No cuando Word le pregunte si


desea guardar los cambios.
Aunque en este memorando slo se transfiere una pequea cantidad de datos, podemos imaginar fcilmente usos ms potentes para este tipo de Automatizacin. Con Word, por ejemplo, podramos utilizar la misma tcnica
para imprimir sobres fcilmente, combinar documentos con una serie de datos y guardarlos, e incluso crear e imprimir una distribucin de correo completa para enviar a todos los clientes que figuren en una base de datos. Si preferimos que los usuarios no tengan que trabajar ellos mismos con Word,
podemos realizar todas estas operaciones en segundo plano.

OBTENCIN

DE INFORMACIN

DE OTRA APLICACIN

Hasta ahora, hemos enviado rdenes y datos desde Access -incluso hemos
establecido una propiedad de Word- pero no hemos obtenido nada a cambio desde Word. Mediante la Automatizacin tambin podemos pedir informacin de los objetos de una aplicacin, como el valor de una funcin o una
propiedad. Esto nos permite interactuar con los objetos de formas ms potentes y variadas. Por ejemplo, suponga que queremos ejecutar una funcin

estadstica de Excel que no existe en Access. Podemos crear un objeto Automatizacin y utilizarlo para ejecutar la funcin de Excel, asignando el resultado a una variable del cdigo de nuestra aplicacin. 0, si lo que queremos
es obtener nmeros de telfono o direcciones de correo electrnico de Outlook, podemos utilizar Automatizacin para buscar en las carpetas de
Outlook (como haremos ms adelante en este captulo) y luego acceder a
las propiedades de los elementos de Outlook que encontremos.
Ahora aadiremos una ltima seccin al procedimiento CreateWordMemo
que ejecutar la funcin Information de Word y utilizar el valor devuelto
por ella, el nmero de pginas del memorando en este caso. Con este cdi-"
go, mostraremos un cuadro de mensaje que indique al usuario el nmero de
pginas del memorando terminado y le pregunte si desea imprimirlo.

Muestre un cuadro de mensaje en Word que acte de acuerdo


con la decisin del usuario

Antes de aadir cdigo al final del procedimiento, deberemos declarar un par


de variables al principio.

1. Cambie a Visual Basic.


En el mdulo Miscellaneous seguir vindose la funcin CreateWordMemo.

2. Aada el cdigo que sigue debajo de las dos instrucciones Dim que hay.
Dim intpginas As Integer, strMensaje As String

Esta lnea declara dos variables que utilizaremos con la funcin de Word:
intpginas para guardar el valor con el nmero de pginas del memorando
que nos comunique Word y strMensaje para el mensaje que mostraremos.

3. Aada el siguiente cdigo justo antes de la instruccin End Function, detrs del bucle Do.
Volver a Access.
AppActivate "Seguimiento de problemas"
' Obtener el nmero de pginas del memorando, preguntar al
' usuario si desea imprimirlo e indicar a Word que lo haga.

intpginas

appWord.Selection.Information(wdNumber0fPagesInDocument )
strMensaje = "Se ha generado el memorando y contiene " & CStr(intPginas) & " pgina(s). Desea imprimirlo?"
=

If Confirm(strMensaje) Then
appWord.ActiveDocument.PrintOut
End If

Veamos qu hace el cdigo.


i La

primera lnea vuelve a activar Access mediante la instruccin AppActivate. En ella se especifica el nombre de la aplicacin de seguimiento de problemas en lugar de Access porque AppActivate consulta la barra de ttulo para localizar la aplicacin solicitada.

i La siguiente lnea utiliza la funcin Information

que es una propiedad del


objeto Selection de Word que ya hemos utilizado antes. Esta funcin puede devolver distintos tipos de informacin sobre un documento; la informacin que se obtenga depender de la constante que se utilice al invocarla. En este caso se ha especificado la constante wdNumberOf
PagesInDocument, con lo que la instruccin obtiene el nmero de pginas
del documento Word y lo asigna a la variable intpginas.

i La

siguiente lnea asigna el texto del mensaje a la variable strMensaje.


Utiliza la funcin CStr para convertir el valor con el nmero de pginas
en una cadena que se puede concatenar con el resto del texto del mensaje. A continuacin, se utiliza la cadena construida para hacerle una pregunta al usuario, por medio de la funcin Confirnz anloga a la que escribimos en el Captulo 5.

i Si el

usuario pulsa Aceptar en el cuadro de mensaje, se ejecutar el bloque If ...Then. La instruccin enva una ltima orden a Word: ejecutar el
mtodo PrintOut del objeto Document. El documento que Word debe imprimir es el que se especifica en la propiedad ActiveDocument - q u e , por
supuesto, es el memorando.

4. En el men Depuracin, seleccione Compilar Cap14 Problemas.


Vuelva a generar el memorando

pJ

Probemos el procedimiento con los cambios introducidos.

Ver Microsofi
Access

2. En el men Herramientas, seleccione Crear memo de Word.

1. Cambie a Access.
Esta vez, cuando finalice la creacin del memorando, el foco volver a la
aplicacin de seguimiento de problemas y aparecer un mensaje por encima del formulario.

Se ha generado rl rrirmordridny

~ciiiliene1 pagna(sj

'Desea mpimcrlo?

Como puede ver, el cdigo ha obtenido de Word el nmero de pginas del


documento. Si pulsara Aceptar, el cdigo le indicara a Word que imprimiese el documento -aunque no ser necesario que lo pruebe, a menos
que realmente quiera imprimir el memorando.

3. Pulse Cancelar.

4. Cambie a Word.
5. En el men Archivo, seleccione Salir y pulse No cuando Word le pregunte si desea guardar los cambios.
Access vuelve a estar en primer plano.

TRABAJO CON CARPETAS DE MICROSOFT OUTLOOK


Una vez que hemos aprendido a automatizar una aplicacin, ya estamos
listos para trabajar con otra. Pero cada aplicacin que admite Automatizacin
dispone de su propio modelo de objetos. Suponga que quiere que su aplicacin se haga con datos guardados en las carpetas de Outlook del usuario, tales como informacin de contacto, de agenda o de tareas. En esta seccin escribiremos cdigo que busque en la carpeta de contactos de Outlook del
usuario el nombre de una persona y luego abra un registro de contacto. Durante el proceso se podrn descubrir algunas de las complejidades del modelo de objetos de Outlook.

Nota Antes de comenzar con los siguientes pasos, asegrese de haber utilizado Outlook desde que instal Office en su mquina. (La primera vez que
se utiliza Outlook, ste hace una serie de preguntas y crea unos archivos de
inicializacin.)

asignado a

j ~ a u l aFintado

Recuelto poi

Prioridpd

11

Rr<niucion

l ~ i 1 3

- 1
[

arreglar este problema

I[

lanzar el produdo

Cuando los usuarios pulsen este botn se


querr buscar el empleado asignado en la
carpeta de contactos de Outlook -o crear
un nuevo elemento de contacto si el
empleado no est all
4

Aada cdigo al procedimiento OpenOutlookContact


1

El formulario Zssues (Problemas) ya dispone de un botn, junto al cuadro


combinado Asignado a, que ejecuta un procedimiento Sub del mdulo Miscellaneous denominado OpenOutlookContact. Simplemente tenemos que incluir en l cdigo que lo ponga a trabajar.

1. Cambie a Visual Basic.


El mdulo Miscellaneous todava est abierto.

2. En el cuadro Procedimiento de la esquina superior derecha de la ventana


Cdigo, seleccione OpenOutlookContact.
Como pude ver, el procedimiento OpenOutlookContact toma un argumento, strFullName. Este es el nombre del contacto que se buscar en
Outlook.

3. Aada el cdigo que sigue al procedimiento.


Public Sub OpenOutlookContact(strFullName As String)
' Abrir un contacto de Microsoft Outlook para el nombre
' especificado.

Dim appOutlook As N e w 0utlook.Application

Dim nsoutlook As NameSpace


Dim mfcontactos As W I F o l d e r
Dim cicontacto As ContactItem

Abrir la carpeta Contactos predeterminada de Outlook.


Set nsoutlook = appOutlook. GetNamespace ( MAPI )
Set mfcontactos = ns0utlook.GetDefaultFolder(olFolderContacts)

' Buscar el contacto con el nombre proporcionado.

Set cicontacto = mfContactos.Items.Find("[FullName]


strFullName)

= " &

' Si no existe el contacto, crear un nuevo contacto.

If cicontacto 1s Nothing Then


Set cicontacto = mContactos.Items.Add
ciContacto.Ful1Name = strFullName
End If

' Abrir la ventana de contactos de Outlook.


ciContacto.Display
End Sub

Veamos qu hace el cdigo.


i

Se declaran cuatro variables. En la primera se utiliza la palabra clave


New para abrir un ejemplar del objeto Application Outlook con el que
trabajar en segundo plano. La siguiente lnea declara un objeto Name
Space de Outlook, que se utilizar para representar un conjunto de carpetas de correo que haya en el disco fijo. A continuacin se declara un objeto MAPIFolder, en el que se mantendr una referencia a la carpeta de
contactos de Outlook, y finalmente un objeto ContactItem para referirse
al elemento de contacto que se va a buscar.

Las dos lneas siguientes usan instrucciones Set para asignar objetos a
esas variables. La primera usa el mtodo GetNamespace del objeto aplicacin Outlook para abrir el archivo de carpetas personales del usuario,
que siempre est identificado como MA PI, de acuerdo con el estndar de
correo electrnico que adopta. La segunda lnea utiliza el mtodo GetDefaultFolder con la constante olFolderContacts para abrir la carpeta de
contactos predeterminada de Outlook. Se pueden utilizar lneas similares
a stas para abrir cualquier carpeta de Outlook, como las carpetas de correo, calendario o tareas.
La siguiente lnea utiliza el mtodo Find de la coleccin Items de la carpeta para localizar el primer contacto que cuadre con la cadena de filtrado. La cadena de filtrado, encerrada entre parntesis, combina el texto

[FullNarne] = con el valor de la variable strFullName, que es el argumento que se pasa al procedimiento. Si se llama al procedimiento Open
OutlookContact pasndole, por ejemplo, Brbara Moneo, este cdigo pedir a Outlook que filtre los elementos de contacto con [FullName] =
Brbara Meneo*. Si el mtodo Find tiene xito, el cdigo hace que la
variable ciContacto haga referencia al elemento de contacto localizado.

La siguiente lnea usa el operador 1s para determinar si la variable objeto ciContacto apunta a un objeto o no +S decir, si la lnea anterior pudo
localizar un contacto para el nombre especificado.
i

Si la variable ciContacto hace referencia a Nothing (nada), las dos lneas


del bloque If ...Then se ejecutan. La primera usa el mtodo Add para crear un nuevo objeto ContactItem de Outlook, aadirlo a la coleccin Items
y hacer que la variable ciContacto apunte a l. La segunda lnea establece la propiedad FullName (nombre completo) del nuevo contacto para
que el usuario no tenga que introducir el nombre. Si se dispone de ms
informacin sobre el empleado en Access, como nmeros de telfono o
direcciones de correo, se pueden establecer fcilmente otras propiedades
del elemento de Outlook.
La ltima lnea utiliza el mtodo Display para abrir la ventana de contacto de Outlook y mostrar el elemento cicontacto -o bien el contacto
existente que encontr el cdigo o el nuevo contacto que cre.

4. En el men Depuracin, seleccione Compilar Cap14 Problemas.


Guardar

5. Pulse el botn Guardar en la barra de herramientas.


6. Cierre Visual Basic.
Pruebe el nuevo procedimiento desde el formulario lssues

Vamos a probar la automatizacin de Outlook pulsando el botn Abrir contacto de Outlook del formulario Issues (Problemas).

1. Pulse el botn Abrir contacto de Outlook (junto al cuadro combinado


Asignado a).
El cdigo iniciar un ejemplar de Outlook en segundo plano, abrir la
carpeta Contactos y buscar a Paula Pintado. Seguramente no lo encontrar entre sus contactos, por lo que crear un nuevo elemento de contacto, establecer su propiedad de nombre completo como Paula Pintado y
luego mostrar la ventana Contacto de Outlook.

El cdigo ha creado un contacto y le ha asignado su propiedad Nombre


completo.

El cdigo ha
creado un
contacto y le ha
asignado su
propiedad Nombre
completo

A continuacin guardaremos informacin adicional de este contacto y lo


usaremos para asegurarnos de que el cdigo puede localizar un contacto
existente.

2. En el cuadro Puesto, escriba Socio.


3. En el cuadro Organizacin, escriba Gamboa y Asociados.

4. En el cuadro Trabajo escriba el nmero de telfono 91 123 44 55.


5. Pulse el botn Guardar y cerrar de la barra de herramientas de la ventana
Contacto.
Ahora que Paula Pintado se encuentra en Outlook, veamos si el cdigo
puede localizarle.

6. Pulse el botn Abrir contacto de Outlook.


Ahora, con toda seguridad el cdigo localiza y muestra el registro de con+
tacto de Outlook existente.

7. Cierre la ventana Contacto.

Uso de objetos de Access desde Microsoft Excel


La programacin con Automatizacin es una calle de dos sentidos:
igual que el procedimiento que escribimos en Access controlaba Word,
podemos escribir cdigo en otra aplicacin para controlar Access. Por
ejemplo, si escribimos cdigo Visual Basic en Excel podremos abrir y
trabajar directamente con objetos de Access y de ADO o DAO.
Lo que sigue es un procedimiento de Visual Basic que funciona en Excel -para usarlo, crearamos un nuevo mdulo de Visual Basic desde
,

(contina)

(Continuacin)

Excel y estableceramos una referencia a la bibliot


cess 9.0 Object Library. El procedimiento crea un objeto Application
Access y luego lo utiliza para abrir la base de datos de problemas e imprimir un informe.

I
!b

Sub ImprimirInfornieProblemas()
'Declarar y crear un objeto aplicacin de Access.
D i m appAccess As New Access.Application
'Abrir la aplicacin de problemas de Access.
appAccess.OpenCurrentDatabase"c:\Archivos de ejercicios de Access\Capl4
Problemas.mdb"
'Imprimir el informe Problemas (Issues).
appAccess.DoCrnd.0penReport "Issues"

End Sub

Al declarar la variable appAccess, que luego se utiliza para enviar rdenes a Access, la primera lnea utiliza la palabra clave New para
crear un ejemplar de Access que se ejecute en segundo plano.
La siguiente lnea del procedimiento utiliza el mtodo OpenCurrentDatabase del objeto Application, cuya misin especfica es facilitar la
Automatizacin cuando Access se utiliza desde otra aplicacin.
La ltima lnea utiliza una tcnica que ya nos debe resultar muy familiar -un mtodo del objeto DoCmd- para abrir e imprimir el informe de problemas.
Aunque en este ejemplo slo se reali~auna tarea muy sencilla, sirve
para demostrar lo potente que puede llegar a ser la Automatizacin entre aplicaciones que admiten cdigo Visual Basic, como son Word, Excel y Microsoft Project. Si se escribe cdigo en esas aplicaciones, desde el proyecto de Visual Basic se puede controlar prcticamente todo
como si se hiciera desde el propio Access.

Salga de Access
i En

el men Archivo, pulse Salir.

Resumen del captulo


Para

Haga esto

Indicar a Access que


quiere utilizar objetos
de otra aplicacin

En Visual Basic, seleccione Referencias


(men Herramientas) y luego seleccione la
biblioteca de objetos que desee utilizar.

Utilizar Automatizacin
para enviar rdenes a
otra aplicacin

Declare una variable objeto Application para


la otra aplicacin y utilice la palabra clave
New (o la funcin GetObject o CreateObject)
para asignar a la variable un ejemplar del
objeto Application. Despus, utilice la variable
para ejecutar instrucciones y mtodos o para
acceder a los objetos y las propiedades del
modelo de objetos de aquella aplicacin.

Ejecutar varias
instrucciones sobre un
mismo objeto sin tener
que repetir el nombre
del objeto

Utilice un bloque With, especificando la


variable objeto en la lnea With y
comenzando cada lnea de cdigo del bloque
con un punto.

,
Recorrer todos los
registros de un conjunto
de registros con un bucle

Utilice la instruccin Do Until, especificando


una condicin que compruebe la propiedad
EOF del conjunto de registros. Y justo antes
de la instruccin Loop, utilice el mtodo
MoveNext para pasar al siguiente registro del
conjunto de registros.

Para obtener informacin


interactiva sobre
Ayuda

Pulse el botn Ayuda y luego pida ayuda sobre

Trabajo con objetos


Automatizacin

Automatizacin

Creacin de un ejemplar
de un objeto de otra
aplicacin

palabra clave New (o funcin CreateObject)

AVANCE DEL SIGUIENTE CAPITULO


En los ltimos tres captulos hemos trabajado sobre reas especficas de la
programacin en Access, descubriendo algunos mecanismos muy potentes.
En el ltimo captulo exploraremos el soporte para la comparticin de datos
en Internet o en una intranet, uno de los aspectos ms candentes de Access.
Aprenderemos a controlar hipervnculos desde Visual Basic y crearemos una
pgina de acceso a datos, un tipo especial de pgina Web que permite ver y
modificar datos de Access.

Conexin a Internet
Objetivos del captulo
En este captulo aprender a:
Tiempo estimado:
45 minutos.

iCrear y

actualizar hipervnculos a datos de Intemet desde los formularios


de Microsoft Access.

iCrear

una pgina de acceso a datos para ver datos en Microsft Internet


Explorer.

m Usar el Editor de secuencias de comandos de Microsoft para desarrollar


cdigo para una pgina Web.
La creciente popularidad de Internet est haciendo que el mundo de la informacin sea ms accesible cada da. Las empresas, grandes o pequeas, tienen sitios en Internet que ponen nuevas fuentes de datos a disposicin de los
que estn conectados. Muchos lugares de trabajo disponen tambin de su
propia intranet, un sitio Web interno con informacin que los empleados
pueden utilizar en su trabajo. Si est conectado a Internet o a una intranet
puede hacer que sus aplicaciones Access ayuden a los usuarios a trabajar con
los datos de la red de una manera ms efectiva.
Algunas de las innovaciones ms atractivas de Access han sido diseadas
para sacar partido de Internet. En este captulo exploraremos dos de las caractersticas que son buenas candidatas para pasar a formar parte de sus aplicaciones. Primero, aprenderemos a mejorar los formularios de Access con la
inclusin de hipewnculos, imgenes y texto que se pueden pulsar con el ratn y que se utilizan para ir de unas pginas a otras en un explorador de Internet. Despus aprenderemos a crear pginas de acceso a datos, pginas
Web a medida que muestran datos de las aplicaciones Access en Microsoft
Intemet Explorer.

Nota Para poder completar los pasos de este captulo es necesario que tenga instalado en su computadora Internet Explorer 5 y que est conectado a
Internet a travs de un mdem o de una red. Intemet Explorer 5 se incluye
con Microsoft Office 2000. Adems, si no tiene instalado el Editor de secuencias de comandos de Microsoft (no se instala por defecto con Office
2000), cuando intente utilizarlo Access le pedir que lo instale desde el
CD-ROM de Office 2000 o desde un lugar de la red.

Dependiendo de la configuracin concreta de la conexin a Internet de su


sistema, es posible que los pasos descritos en este captulo no funcionen
exactamente de la manera descrita. Aunque no pueda llegar a completar el
captulo, su lectura le resultar instructiva y le permitir utilizar algunas de
las caractersticas Internet que trata. Adems, tenga en cuenta que el contenido de los sitios Web puede haber cambiado y no coincidir con los aqu
mostrados.

Inicie la leccin
i

Inicie Access y abra la base de datos Cap15 Problemas de la carpeta de


prcticas.

USO DE HIPERVINCULOS

Si alguna vez ha utilizado un explorador de Intemet, o simplemente ha visto


archivos de ayuda interactiva, ya debe estar familiarizado con los hipervnculos. Suelen venir indicados por un texto azul subrayado, aunque tambin pueden aparecer con otros formatos y colores de texto. (Tambin hay
hipervnculos que son botones o imgenes.) Al pulsar un hipervnculo se le
indica al programa que debe ir a otro lugar, ya sea a un archivo de la propia
computadora o de la red a la que estamos conectados, o a un sitio de Internet. Podemos incluir hipervnculos en los formularios de nuestras aplicaciones para que los usuarios se puedan mover ms fcilmente. Como veremos a
continuacin, los hipervnculos tambin le hacen la vida ms fcil a los desarrolladores de aplicaciones -mientras que los botones que creamos en los
captulos anteriores necesitan cdigo de Microsoft Visual Basic para funcionar, los hipervnculos son automticos. Slo es necesario especificar una direccin, el lugar al que pasar.

Existen dos formas especialmente adecuadas de utilizar los hipervnculos en


los formularios de nuestras aplicaciones. Se pueden crear controles en un
formulario y luego establecer sus propiedades para hacer que definan hipervnculos a sitios Web. Las direcciones asociadas con los controles se guardan en el formulario y no cambian al pasar de un registro a otro. Tambin se
puede afiadir un campo a una tabla de la base de datos, asignarle el tipo de
datos Hipervnculo y almacenar en l los hipervnculos. Si luego creamos un
cuadro de texto en un formulario que est ligado al campo de tipo Hipervnculo, los hipervnculos aparecern en l. Cuando los usuarios pasen de un
registro a otro en el formulario, el cuadro de texto mostrar el hipervnculo
contenido en el correspondiente registro. Con cualquiera de los dos mtodos,
basta con que los usuarios pulsen un hipervnculo para saltar a la direccin
que contiene.

Fecha dp reculiicion

__j
eatfo

1 1 1

L /carmen Gomez

Fecha

Eetsdo

U4KIgiSB Activo

9198 Activo

Re,u~llo

Coriientsrio
Con;uBado con el ~ u n a e l o
General Di.hemos
arreglar este problema ardes de lanzar el pr
David, Lpuedes convocar una reunion para
discutrlo?

Aadiremos hipervnculos al formulario Issues (Problemas) para que los


usuarios puedan ir fcilmente a sitios Web

En este captulo utilizaremos ambos mtodos para crear hipervnculos y


mejorar as la aplicacin Seguimiento de problemas. Primero, aadiremos
un control de etiqueta de hipervnculo en el formulario Problemas (Issues).
Con este hipervnculo los usuarios podrn acceder a un sitio Web donde se
proporciona ayuda sobre Access. A continuacin, aadiremos un nuevo
campo al formulario Issues donde se mostrarn los hipervnculos almacenados en la tabla Issues. A travs de estos hipervnculos los usuarios podrn
acceder a sitios Web relacionados con los problemas almacenados en la base

de datos. Por ltimo, descubriremos cmo se trabaja con cada uno de estos
tipos de hipervnculos desde Visual Basic, escribiendo cdigo que abra
hipervnculos automticamente y los modifique en segundo plano.

Creacin de controles de hipervnculo en un formulario


Para definir un hipervnculo a un sitio Web basta con crear un control -un
botn de comando, una etiqueta o una imagen- y establecer las propiedades que fijan el hipervnculo como destino. Cuando los usuarios pulsen el
control, Access ir directamente a la ubicacin definida por el hipervnculo.
Si la direccin del hipervnculo seala a un sitio Web, entonces se abrir
automticamente el explorador Web del usuario para mostrarlo.

b.

j
k

I
i

f
Insertar
hipervnculo

Cree una etiqueta con un hipervnculo

Para proporcionar a los usuarios una manera sencilla de encontrar ayuda en


Internet, incluiremos una nueva etiqueta en el formulario Issues y definiremos la direccin Web a la que apuntar su hipervnculo. Utilizaremos la orden Insertar hipervnculo, una forma abreviada de crear una etiqueta de hipervnculo y establecer algunas de sus propiedades.
1. En la ventana Base de datos, pulse el acceso directo Formularios.
2. Pulse el formulario Issues (Problemas) y, a continuacin, pulse el botn
Diseo.
3. Pulse el botn Insertar hipervnculo de la barra de herramientas.
Aparecer el cuadro de dilogo Insertar hipervnculo, que preguntar por
la direccin del hipervnculo. Como puede ver, Access facilita la creacin
de vnculos con pginas Web, archivos de la computadora, objetos de la
base de datos actual o direcciones de correo electrnico.
4. En el cuadro Escriba el nombre del archivo o de la pgina Web, escriba
http://www.microsoft.com/support.
Por defecto, Access establece como texto a mostrar del hipervnculo la
direccin Web que se introduce. En lugar de la direccin, querremos que
se muestre el ttulo de la pgina Web.
5. En el cuadro Texto, escriba Soporte de productos de Microsoft y luego
pulse Aceptar.
Access crear una etiqueta donde se mostrar el texto introducido que se
referir a la direccin del hipervnculo y la insertar en el vrtice superior izquierdo del formulario. A continuacin, desplazaremos la etiqueta
a la parte inferior del formulario Issues, a una zona vaca que utilizaremos para mostrar controles relacionados con Internet como ste.

6. Arrastre la etiqueta a la parte inferior del formulario y colquela en la


zona vaca que hay a la derecha de la etiqueta donde se lee Necesita
ms ayuda?. (Si no est visible la parte inferior del formulario, puede
que tenga que arrastrar la etiqueta ms all del borde de la ventana del
formulario para que Access se encargue de desplazarla.)

Coloque la etiqueta aqu

Ahora que la etiqueta est en el lugar que le corresponde, le cambiaremos


el nombre en la hoja de propiedades para que resulte ms fcil referirla
en el cdigo.
Propiedades

7. Si la hoja de propiedades no est a la vista, pulse el botn Propiedades.


8. Pulse la pestaa Todas de la hoja de propiedades.
Observar que las propiedades Ttulo y Direccin de hipervnculo de la
etiqueta contienen el texto a mostrar y la localizacin del vnculo, informacin que ya introdujimos para el hipervnculo. Pero la etiqueta tiene
un nombre por defecto, algo como Etiqueta27

9. Asigne el EnlaceAyuda a la propiedad Nombre.


10. Cierre la hoja de propiedades.
El texto de la etiqueta aparecer subrayado y en color azul, indicando
que se trata de un hipervnculo. En breve lo utilizaremos para acceder a
Internet.

Almacenamiento de hipervnculos en una tabla


Si los usuarios de nuestra aplicacin acceden habitualmente a sitios Web, es
posible que nos interese permitirles que almacenen los hipervnculos a esos

sitios dentro de los registros de una base de datos de Access. El tipo de datos
Hipervnculo permite almacenar toda la informacin relativa a un hipervnculo, incluyendo el texto que se muestra para el hipervnculo y la direccin a la que apunta. Con el tipo de datos Hipervnculo se puede crear una
tabla cuyo nico propsito sea almacenar y gestionar hipervnculos -por
ejemplo, para una base de datos de gestin de sitios Web. Tambin podemos
permitir a los usuarios que asocien sitios Web con otros tipos de registros de
la base de datos.

>
1

La tabla Issues (Problemas) de la base de datos de prctica contiene un nuevo campo denominado WebSite, que ya contiene varios hipervnculos. Si
abre esa tabla, ver una nueva columna conteniendo hipervnculos, con sus
textos azules que ya nos son familiares y listos para que se pulsen.

Este nuevo campo de


la tabla lssues utiliza
el tipo de datos
Hipervnculo para
almacenar
informacin sobre un
sitio Web relacionado
con el registro

Aada el campo WebSite al formulario lssues

El siguiente paso ser crear un control de cuadro de texto que muestre el hipervnculo almacenado con cada problema.
Lista de
campos

1. Si la lista de campos no est a la vista, pulse el botn Lista de campos de


la barra de herramientas.

La lista de campos muestra todos los campos de la tabla Issues. Comprobar que el nuevo campo WebSite ya est all, listo para visualizar un hipervnculo para cada problema.

2. Desplace la lista de campos hasta que aparezca el campo WebSite y a continuacin plselo y arrstrelo a la zona vaca del formulario, encima de la
etiqueta de hipervnculo que creamos anteriormente.
Aparecern en el formulario el cuadro de texto y su etiqueta.

r Arrastre desde aqui ..

. ..hasta aqul: creando as el cuadro de texto

Como el campo lleva asociado el tipo de datos Hipervnculo, el cuadro


de texto mostrar su contenido como un hipervnculo azul subrayado, listo para ser pulsado.

3. Cierre la lista de campos.

4. Arrastre la parte derecha del nuevo cuadro de texto para hacerlo el doble
de grande.

5. Cierre el formulario Issues y pulse S cuando Access le pregunte si quiere guardar los cambios hechos en el formulario.
Pruebe los hipervnculos del formulario lssues

1. En la ventana Base de datos, pulse dos veces el formulario Issues.


El formulario se abre y muestra los dos hipervnculos en la parte inferior.

2. Pulse la tecla AV PG dos veces para pasar a otros registros.


Observar que en el campo Sitio Web relacionado se muestra un hipervnculo diferente para cada problema. Por el contrario, la etiqueta de hipervnculo que est ms abajo muestra siempre el mismo; a menos que
cambiemos sus propiedades en la vista Diseo, seguir proporcionando
un mismo enlace al sitio Web.
I

Nota Aunque en realidad los sitios Web que se incluyen en la base de datos de prctica no estn relacionados con los problemas de ejemplo incluidos
en la tabla Issues, son de inters general y pueden resultarle tiles. En una situacin real, los usuarios deberan establecer estos hipervnculos de forma
que apuntasen a sitios Web que los dems empleados estuviesen interesados
en visitar.

Frcha de rssoiucan

Estado
P-ignado

El cuadro de texto muestra un


hipervnculo diferente para cada registro

--

Fesuelto por

pr
A

Proiidad

5nio web rslacionsdo


t

Nece ita mas 3yuda7

I F d~~4
8

A,~,

ll,ri

-Id!,
18

Suuccrte de ~rociuclo~
de M~eiosoit

El hipervnculo de la etiqueta
es siempre el mismo

3. Pulse el hipervnculo Soporte de productos de Microsoft.


Se abrir Microsoft Internet Explorer (pidindole que establezca una conexin con Internet si es necesario) y mostrar el sitio de Internet.
Si lo desea, puede explorar este sitio Web o aadirlo a su lista de sitios favoritos pulsando Agregar a Favoritos (men Favoritos).

Access pasa la direccin del W e b adecuada


a lnternet Explorer

Get Help-

IEI-CI

uppoi~site

we ha..

streamimed and irproved aur s u p p o l t offeringr w e ue alrn m a d e


than e v e r t o find the right rupport esther by uring the Iinkr t o the
b y i h o o r ng your c u r i o m e r r e g m e n t b e ~ ~ w

it e a s i e r

4. Cierre Internet Explorer y vuelva a Access. (Si aparece un mensaje preguntndole si desea desconectarse de Internet, pulse No.)
Access vuelve a colocarse en primer plano.

5. Pulse el hipervnculo azul subrayado del campo Sitio Web relacionado.


Se abre el segundo sitio Web.

6. Cierre Internet Explorer y vuelva a Access. (Si lo desea, ya puede desconectarse de Internet por un tiempo.)
Como acabamos de comprobar, es muy sencillo proporcionar accesos a
Internet desde nuestros formularios. Al desarrollar una aplicacin debemos
decidir cul es la estrategia ms apropiada: crear los hipervnculos directamente en los formularios o almacenarlos en una tabla. Aunque la primera
estrategia es ms directa, la segunda es ms flexible, especialmente si queremos hacer referencia a muchos sitios diferentes o si queremos asociarles
informacin adicional.

Seguimiento de hipervnculos desde Visual Basic


La barra de mens del formulario Issues contiene dos rdenes de men personalizadas que proporcionan un medio alternativo de acceder a los sitios
Web. Como ya vimos en el Captulo 10, las rdenes de men personali~adas*
pueden ejecutar funciones de Visual Basic; en este momento, sin embargo,
las rdenes de men no tienen ninguna funcin que ejecutar. Crearemos las

dos funciones que permiten acceder a los sitios Web que identifican esos hipervnculos.
&wamantas V e a r i a

m-

Re<,

Ortogtafia.

F.

&utc~~:orrect:i<~r~
&asignar problonias

&r infarne de pruhlomas


Crear ilrriio do W o ~ d
Abrir z>It I V i ~b relacior~eis

$ Abrir sitio

~b de dfi~da

Crearemos /as funciones que hagan


operativas estas rdenes de men

Conexin de hipervnculos a archivos u objetos


de base de datos
Todos los hipervnculos que se utilizan en este captulo apuntan a sitios de Internet. Sin embargo, los hipervnculos no tienen que apuntar
necesariamente a sitios Web, ni siquiera a Internet. Como hemos visto, el cuadro de dilogo Insertar hipervnculo ayuda a crear muchos tipos de vnculos o localizar el objeto con el que se quiere establecer el
vnculo. Los hipervnculos pueden apuntar a distintos tipos de documentos, ya sea en Internet, en la red de nuestra organizacin o en nuestra propia computadora.

Acceso a objetos de base de datos. Un hipervnculo puede abrir un


objeto de base de datos, como un informe o un formulario -tarea que
estamos acostumbrados a realizar con un botn de orden. Por si siente curiosidad sobre cmo representa Access este tipo de vnculos, as
es como funciona: adems de una direccin, cada hipervnculo tiene
una subdireccin que apunta a un objeto o un lugar especfico dentro
de un archivo. Para definir un hipervnculo que abra un objeto de base
de datos se debe definir su subdireccin de forma que contenga el tipo
de objeto y su nombre, separados por un espacio. Por ejemplo, para
crear un hipervnculo al informe Issues bastara con asignar el valor
Report Issues a la propiedad Subdireccin de hipervnculo (Hyperlinksubaddress). Cuando se pulse el hipervnculo, se abrir la vista
preliminar del informe, igual que si se hubiese utilizado el mtodo
OpenReport para abrirlo.
(contina)

(Continuacin)

pueden utilizar para abrir cualquier documento de Office. En este ti


de hipervnculos, la direccin es la ruta y el nombre del docu
como c:\Mis documentos\Carta.doc. Para ir a un lugar especfico dentro del archivo, por ejemplo a un marcador en un documento Wor
asigna el nombre de ese lugar a la subdireccin del hipervnculo.

Otros documentos HTML. Los exploradores de Web, como Int


Explorer, visualizan documentos formateados en el Lenguaje de m
do hipertextual (HTML). Un documento HTML no tiene que estar
cesariamente en Internet -puede ser una direccin local de la intran
de la empresa o incluso directamente en nuestra computadora. Por eje
plo, si ha creado sus propias pginas Web utilizando Microsoft
Page, puede incluirlas en su base de datos mediante hipervncul
Otras direcciones de Internet. Aunque todas las direcciones qu
mos utilizado hasta ahora apuntaban a sitios de la World Wide
(empezaban por http:/l), Access puede reconocer otros tipos de dir
ciones de Internet. Por ejemplo, se puede establecer la direccin de
hipervnculo de forma que transfiera un archivo desde un servidor F
o enve un mensaje de correo electrnico (estos tipos de direccione
Internet empiezan por ftp:// o mailto:).
Como puede ver, la flexibilidad de los hipervnculos es patente. A
ms, el texto mostrado para el hipervnculo es independiente
ccin, por lo que los usuarios no tendrn que ser conscientes de e
iferencias. Somos nosotros los que tenemos que saber dnde es
ubicados los documentos -en la computadora del usuario, en la intranet de la empresa o en Internet. Los usuarios slo los pulsan.

Cree un procedimiento que siga un hipervnculo

Para abrir, o seguir, un hipervnculo definido para un control se utiliza el mtodo Follow del objeto Hyperlink.

1. Pulse el botn Ventana Base de datos de la barra de herramientas.

2. Pulse el acceso directo Mdulos y, a continuacin, pulse dos veces el mVentana Base
de datos

dulo Miscelnea.
Visual Basic mostrar el mdulo en una ventana Cdigo.

3. Desplcese hasta el final del mdulo y luego pulse en la ventana Cdigo


debajo de la ltima instruccin End Sub.

4. Introduzca el siguiente cdigo (a excepcin de la instruccin End Function, que la aade Visual Basic automticamente al introducir el encabezamiento de la funcin).

Public Function AbrirSitioAyuda()


' Seguir el hipervnculo que aparece en el cuadro EnlaceAyuda.

!
i

On Error Resume Next


Forms!Issues!EnlaceAyuda.Hyperlink.Follow
End Function

i
,

La primera lnea de la funcin AbrirSitioAyuda utiliza la instruccin On


Error para indicarle a Visual Basic que suspenda el manejo de errores.
Esto es importante porque si se produjese algn error al establecer la conexin a Internet, el sistema (o Internet Explorer) mostrara automticamente un mensaje de error, y no queremos que el programa se detenga y
muestre un error.
La segunda lnea del cdigo especifica un control del formulario llamado Issues - e l control EnlaceAyuda- mediante la expresin Forms!
Issues!EnlaceAyuda. Para hacer referencia al hipervnculo que este control contiene en lugar de al propio control, se utiliza la propiedad
Hyperlink. Por ltimo, se ejecuta el mtodo Follow del hipervnculo.
Puede resultar ms fcil leer la lnea de derecha a izquierda: le indica a
Access que siga el hipervnculo definido en el control EnlaceAyuda del
formulario Issues. Cuando un usuario seleccione la orden de men Abrir
sitio Web de ayuda para ejecutar esta lnea de cdigo, el efecto ser el
niismo que si se hubiese pulsado el hipervnculo.
Cree un procedimiento que siga un hipervnculo contenido en un campo

Si el hipervnculo est almacenado en un campo, no se puede utilizar la propiedad Hyperlink. En lugar de ello, se utiliza un mtodo ms general, el mtodo FollowHyperlink, especificando la direccin a la que se quiere acceder.

1. Introduzca el siguiente cdigo.


Public Function AbrirSitioRelacionado()
' Seguir el hipervnculo almacenado en el campo WebSite.
Dim Direccin As String, Subdireccin As String

Direccin = HyperlinkPart(Forms!Issues!WebSite, acAddress)


Subdireccin = HyperlinkPart(Forms!Issues!WebSite, acSubAddress)
On Error Resume Next
FollowHyperlink Direccin, Subdireccin
End Function

Esto es lo que hace el cdigo:


i La

funcin AbrirSitioRelacionado empieza definiendo dos variables de


cadena, Direccin y Subdireccin, donde se almacenar la informacin
sobre la direccin del hipervnculo.

Un hipervnculo tiene varias componentes: una direccin, una subdireccin y el texto que se muestra para el hipervnculo. Las dos siguientes 1neas del cdigo utilizan una funcin nueva, la funcin HyperlinkPart,
para extraer la direccin y la subdireccin del hipervnculo y almacenarlas en las variables de cadena. El primer argumento de la funcin HyperlinkPart es el propio valor del hipervnculo, en este caso el valor del control WebSite del formulario Issues. El segundo argumento de la funcin
es una constante que especifica qu parte del hipervnculo queremos que
nos devuelva.

i La

siguiente lnea suspende el manejo de errores para que la aplicacin


no se detenga en caso de producirse un error en la conexin a Internet.

i La

ltima lnea utiliza el mtodo FollowHyperlink con los valores que


acabamos de asignar a las variables Direccin y Subdireccin.
Cuando un usuario pulse el elemento de men y se ejecute esta funcin,
el efecto ser el mismo que si se hubiese pulsado el hipervnculo en el
cuadro de texto WebSite.

2. En el men Depuracin, seleccione Compilar Cap 15 Problemas.


Visual Basic comprueba que el cdigo es correcto.
Pruebe el cdigo
Los elementos de men personalizados ya estn listos para seguir hipervnculos.

Ver Microsoi?
Access

1. Cambie a Access.
2. Pase al formulario Issues.

3. En el men Herramientas, seleccione Abrir sitio Web de ayuda.


El cdigo ejecuta el mtodo Follow para la etiqueta EnlaceAyuda, lo que
hace que Access abra el sitio Web en Internet Explorer.

4. Cierre Internet Explorer y vuelva a Access. (Si aparece un mensaje preguntndole si desea desconectarse de Internet, pulse No.)

5. En el men Herramientas, seleccione Abrir sitio Web relacionado.


En esta ocasin, el cdigo obtiene la direccin del campo WebSite y entonces ejecuta el mtodo FollowHyperlink para abrir el sitio Web.

6. Cierre Internet Explorer y vuelva a Access. (Si lo desea, puede desconectarse de Internet.)

Modificacin de hipervnculos mediante Visual Basic


Cuando almacenamos hipervnculos en una tabla no slo queremos seguirlos,
sino que normalmente tambin querremos trabajar con ellos y ser capaces de
cambiar el texto que muestran y la direccin a la que apuntan. La aplicacin
de prctica contiene un sencillo cuadro de dilogo, llamado EditLink, que permite a los usuarios modificar el hipervnculo a un sitio Web almacenado con
cada registro del formulario Issues. En esta seccin crearemos el botn y el
cdigo encargados de abrir el cuadro de dilogo y hicerlo funcionar.

...p ara abrir un cuadro de dilogo donde los usuarios


puedan modificar 10s hipervnculos

Texto a r n o + t r ~

Crearemos este
botn y su
proced~mientode
evento.. .

:itio iseb relac~otiadu


.Necesita rnai ayuda?

/r

-4

JC

arr

i~
,ir ~
idp b i i 3
r i i ,tii

Cree un botn que abra el formulario EditLink

El primer paso ser crear un botn en el formulario Issues que se encargue


de abrir el cuadro de dilogo. Colocaremos el botn a la derecha del campo
WebSite que creamos antes, as los usuarios sabrn para qu sirve.

Vista Diseo

9
Cuadro de
herramientas

..

.ev\

Asistentes para
controles

1. Pulse el botn Vista Diseo de la barra de herramientas.


2. Desplace el formulario hasta que aparezca la zona vaca que est debajo
del subformulario Comentarios.

3. Si el cuadro de herramientas no est a la vista, pulse el botn Cuadro de


herramientas en la barra de herramientas.
4. En el cuadro de herramientas, asegrese de que no est seleccionada la
herramienta Asistentes para controles y, a continuacin, pulse la herramienta Botn de comando.

5. Pulse en el formulario a la derecha del cuadro de texto WebSite.

J
Botn de
comando
Pulse
aqupara
crear el
botn

El botn de orden, con un nombre por omisin como Comando30, aparecer junto al cuadro de texto.

6. Pulse el botn Propiedades de la barra de herramientas.


Propiedades

7. Asigne el valor EditarHipervnculo a la propiedad Nombre.


8. Asigne el valor E&ditar.. a la propiedad Ttulo.

9. Cierre la hoja de propiedades.

10. Con el botn derecho del ratn, pulse el botn EditarHipewnculo y, a


continuacin, pulse Generar evento.

11. Pulse dos veces Generador de cdigo.


Visual Basic mostrar el procedimiento de evento EditarHiperviz(~ulo-Click.

12. Aada el siguiente cdigo al procedimiento (a excepcin de las lneas


Sub y End Sub que ya estarn).
Private Sub EditarHipervnculo-Click()
' Abrir el formulario EditLink.

DoCmd OpenForm "EditLink"

' Si hay un hipervnculo, copiar sus componentes


-' a los controles del cuadro de texto del formulario.

If Len(WebSite) Then
Forms!EditLink!DisplayText = HyperlinkPart(WebSite, acDisplayText)
Forms!EditLink!Address = HyperlinkPart(WebSite, acAddress)
Forms!EditLink!SubAddress = HyperlinkPart(WebSite, acSubAddress)
1

End If
End Sub

Este cdigo abre el formulario EditLink, mediante el mtodo OpenFomz


del objeto DoCmd. A continuacin comprueba si el campo WebSite del
registro actual del formulario contiene un hipervnculo. Si es as, lo que
queremos es copiar en el cuadro de dilogo las componentes de este hipervnculo para que los usuarios puedan trabajar con ellas.
13. En el men Depuracin, seleccione Compilar Cap 15 Problemas.
Aada cdigo para modificar el hipervnculo

Ahora, ha llegado el momento de echarle un vistazo al cuadro del dilogo al


que nos hemos estado refiriendo. Pero, antes de probarlo, es necesario abrirlo en la vista Diseo y aadirle un procedimiento de evento -el que en realidad se encargue de modificar el hipervnculo almacenado en el campo WebSite.
Ver Microsoft
Access

1. Cambie a Access.
2. Pulse el botn Ventana Base de datos en la barra de herramientas.
3. En la ventana Base de datos, pulse el acceso directo Formularios.

Ventana Base
de datos

4. Pulse el formulario EditLink y, a continuacin, pulse el botn Diseo.

El formulario tiene tres cuadros de texto donde los usuarios pueden introducir la informacin de un hipervnculo, adems de dos botones de orden. El botn Cancelar ya contiene el cdigo que cierra el cuadro de dilogo sin hacer nada; aadiremos el cdigo para el botn Aceptar.

5. Con el botn derecho del ratn, pulse el botn Aceptar y, a continuacin


pulse Generar evento.

6. Pulse dos veces Generador de cdigo.


Visual Basic mostrar el procedimiento de evento Aceptar-Click. Aada
el siguiente cdigo al procedimiento.

'

Private Sub Aceptar-Click()


' Fijar el valor del campo WebSite en el formulario Issues.
Forms!Issues!WebSite = DisplayText
Address & "#' & SubAddress

&

"#' &

End Sub

Esto es lo que hace el cdigo:


La primera lnea fija el valor del campo WebSite del formulario Issues. El
nuevo valor se crea concatenando los valores que el usuario ha introducido en los tres cuadros de texto del formulario y separndolos con el carcter N#.
i La siguiente lnea utiliza el mtodo SetFocus para volver al campo Web-

Site del formulario.

La ltima lnea del procedimiento cierra el cuadro de dilogo por medio


del mtodo Close del objeto DoCmd.

7. En el men Depuracin, seleccione Compilar Cap15 Problemas.


8. Cierre Visual Basic.
9. Cierre el formulario EditLink y pulse S cuando Access le pregunte si
quiere guardar los cambios hechos en el formulario.
Pruebe el formulario EditLink

Vamos a probar el cdigo que acabamos de escribir cambiando uno de los hipervnculos almacenados en el formulario Issues.

1. En la ventana Base de datos, pulse dos veces el formulario Issues.


El formulario vuelve a la vista Formulario. El primer registro, que es el
que se muestra en el formulario, contiene un hipervnculo al sitio Web de
Microsoft Press. Supongamos que queremos cambiar el hipervnculo a
un sitio diferente.

2. Pulse el botn Editar que est junto al campo Sitio Web relacionado.
Se ejecuta el procedimiento de evento EditarHipewnculo-Click que
abre el formulario EditLink y rellena los cuadros de texto con las componentes del hipervnculo actual.

3. Seleccione el texto que aparece en,el cuadro Mostrar texto y, a continuacin, escriba The Tax Man.
4. Seleccione el texto que aparece en el cuadro Direccin y, a continuacin,
escriba http://www.irs.ustreas.gov/.

5. Pulse Aceptar.
Se ejecuta el procedimiento de evento Aceptar-Click que asigna el valor
del hipervnculo al campo WebSite. De vuelta en el formulario lssues observar que ha cambiado el hipervnculo que se muestra en este campo.
(Si lo desea puede pulsar el hipervnculo para probarlo, pero asegrese de
que cierra Internet Explorer y vuelve a Access cuando haya terminado.)

6. Cierre el formulario Issues.

Consejo En esta seccin hemos modificado un hipervnculo que estaba almacenado en un campo. La modificacin de un control de hipervnculo
-como la etiqueta Soporte de productos de Microsoft que creamos anteriormente en este captulo- es an ms sencilla. Para modificar un hipervnculo

definido por un control, basta con modificar las propiedades del control y el
hipervnculo cambiar automticamente. Por ejemplo, se podra utilizar el siguiente cdigo para cambiar la etiqueta de hipervnculo del formulario Issues:
EnlaceAyuda.Caption = "Computer Books Galore"
EnlaceAyuda.HyperlinWlddress =
"http://mspress.microsoft.com"

CREACIN DE PGINAS WEB PARA LA APLICACIN


Ya hemos visto cmo los hipervnculos pueden hacer que un explorador de
Web externo colabore con nuestras aplicaciones. Pero, y si queremos que
los usuarios de la Web puedan ver o editar datos de nuestra aplicacin Access? Access proporciona esta capacidad a travs de las pginas de acceso a
datos, pginas Web que estn fuera del archivo de base de datos Access
(.mdb), pero que permiten a los usuarios de Internet Explorer ver y editar datos de las tablas. Al igual que los formularios y los informes, las pginas de
acceso a datos se disean con Access, aunque se pueden utilizar para ver y
editar datos tanto desde dentro de Access como de Internet Explorer. Y las
pginas de acceso a datos ofrecen potentes posibilidades de agrupamiento,
revisin y anlisis de datos de la base de datos, incluyendo los controles para
expansin y exploracin de registros, y los componentes Spreadsheet, Chart
y PivotTable de Office.
Las pginas de acceso a datos ponen los datos a disposicin
de los usuarios de Web en lnternet Explorer

Seguimiento de problemas
Pulse el botn expandir (+) para ver los problemas de un empleado

Los controles
especiales ayudan
a los usuarios a
ver y analizar los
datos

.-

AssignedTo

-neo

A*signedTu

hb~ernandez

155UeID

i
[ ~ l a n e sde exhibicldn

Desc~~ption

/eSuipos

~ prerontacinen
~
~la feria precisar
~
t sl alqu1111
~ de
guai gus la ltima vez

I
F,"!iij

1
S]

Tnle

status

~R~?USL
n1,a

.--.-A- -- *

..

En esta seccin, crear una pgina de acceso a datos donde se mostrarn


registros de la base de datos Seguimiento de problemas. A medida que personalice la pgina, aprender a utilizar algunas de las herramientas incluidas
en Access para el diseo de pginas de acceso a datos. A continuacin, abrir otra pgina de acceso a datos diseada para permitir modificar los datos
de la base de datos. Cuando aada los toques finales a esta pgina, estar
dando sus primeros pasos en el mundo de las secuencias de comandos
(scripts) Web, utilizando Visual Basic, Scripting Edition (VBScript) -un
lenguaje similar al Visual Basic de Access, pero que se ejecuta en Internet
Explorer.
Creacin de una pgina de acceso a datos para la revisin de datos

La aplicacin Seguimiento de problemas resulta muy adecuada para aquellos


usuarios que estn acostumbrados a utilizar Access. Pero hoy en da, muchos
usuarios se sienten ms cmodos trabajando en el sitio Web de la compaa,
utilizando Internet Explorer. Sera bueno proporcionar a estos usuarios una
forma fcil de consultar los problemas -sin tener que abrir la aplicacin Seguimiento de problemas. Ya le han reservado algo de espacio en la intranet
de la compaa, y slo le resta crear sus pginas Web.
El primer paso consistir en crear una pgina de acceso a datos basada en
una consulta previa de la base de datos Seguimiento de problemas. Ser el
Asistente para pginas el que haga la mayor parte del trabajo, para que a
continuacin sea usted quien abra la pgina en la vista Diseo, haga algunos cambios de formato y especifique los grupos. Una vez terminada, la
pgina mostrar los problemas agrupados por el empleado que los tiene
asignados, e incluir controles de expansin y exploracin de registros que
facilitarn a los usuarios Web la visualizacin de esta informacin.
Cree una pgina de acceso a datos para la aplicacin
Seguimiento de problemas

La base de datos ya contiene, entre otras, la consulta ZssuesForReport. Aunque se utiliza en el informe Issues, resulta que incluye los campos que desea
aadir a su pgina Web.

1. En la ventana Base de datos, pulse el acceso directo Pginas y, a continuacin, pulse dos veces sobre Crear una pgina de acceso a datos utilizando el asistente
Access muestra el Asistente para pginas.

2. En el cuadro Tablas/Consultas, seleccione Consulta:IssuesForReport.

El asistente muestra los campos de la consulta.

3. Pulse el segundo botn que aparece entre los cuadros Campos (en el que
aparece el smbolo >>) para seleccionar as todos los campos.

4. Pulse Finalizar.
Access crea el cdigo HTML para la nueva pgina Web y aade todos los
objetos necesarios para mostrar los datos de la base de datos Seguimiento de problemas.

5. Pulse el botn Vista de pgina en la barra de herramientas.


En la Vista de pgina, la pgina aparece tal y como se visualizar en un
Vista de pgina

explorador, mostrando el primer registro de la consulta IssuesForReport.


El asistente ha incluido un control de exploracin de registros en la parte inferior de la pgina, donde se incluyen botones que permiten pasar de
un registro a otro, as como filtrar y ordenar los datos.
Al igual que los formularios de Access, una pgina de acceso de
datos muestra los datos de los campos de la base de datos.. .

Entere&?

'I C ~I I-2 O ~

Assignedfo

bula ~oitada

su

1-

...y proporciona herramientas de exploracin,


ordenacin o filtrado de registros

Aunque las pginas de acceso a datos tienen un aspecto muy similar al de


un formulario de Access, hay muchas diferencias: los controles incluidos en
la pgina funcionan de manera diferente, las herramientas para el diseo de
pginas no son tan avanzadas como las que se utilizan en el diseo de formularios e informes y, desgraciadamente, no puede utilizar ninguno de los
asistentes, expresiones o herramientas de programacin de Visual Basic a
las que est acostumbrado. ES un mundo nuevo!

Cambie el formato de la pgina de acceso de datos

El asistente ha creado la pgina de acceso a datos con un nombre y un ttulo


por defecto, y sin incluir ningn texto explicativo sobre el propsito de la pgina. Ha llegado el momento de pasar a la vista Diseo y realizar algunos
cambios.
1. Pulse el botn Vista Diseo en la barra de herramientas.
Vista Diseo

Al igual que en la vista Diseo de informes y formularios, la vista Diseo de las pginas de acceso a datos presenta una caja de herramientas,
una lista de campos y una hoja de propiedades. Dado que la mayora de
las pginas Web tienen algn tipo de ttulo y una explicacin textual de
su contenido, en la parte superior de las pginas de acceso a datos se incluyen marcadores de posicin para el texto. Con el objeto de hacerla
ms amigable, a continuacin introducir el mensaje con el que se encontrarn los usuarios que accedan a esta pgina.

2. Pulse sobre el marcador de posicin reservado para el ttulo que aparece


en la parte superior de la pgina (donde dice Haga clic aqu y escriba el
texto del ttulo), y escriba Seguimiento de problemas.

3. Pulse debajo del ttulo (encima de la barra gris) y escriba Pulse el botn
expandir (+) para ver los problemas de un empleado.
A continuacin, establecer el tema de su pgina -un conjunto de atributos de diseo entre los que se incluyen el fondo y la fuente.

4. En el men Formato, seleccione Tema.

5. Debajo de Elija un tema, seleccione Bordes rectos, y pulse Aceptar.


A continuacin, establecer la propiedad Ttulo de la pgina, que determina el ttulo que mostrar Internet Explorer cuando se visualice esta pgina Web.

6. Pulse el botn Propiedades


7. Pulse en la barra de ttulo de la ventana Pgina de acceso a datos.
Propiedades

En la hoja de propiedades se muestran las propiedades de la pgina.

8. Pulse la solapa Todas en la hoja de propiedades.


9. En la propiedad Title escriba Seguimiento de problemas.
10. Cierre la hoja de propiedades.
11. Pulse el botn Guardar de la barra de herramientas.

Guardar

Access muestra el cuadro de dilogo Guardar como pgina de acceso a


datos. La pgina Web se guardar junto con el resto de los archivos en la
carpeta de prcticas.

12. Localice la carpeta de prcticas en su disco fijo.

13. En el cuadro Nombre de archivo, escriba Problemas y a continuacin


pulse el botn Guardar.

Access guarda el archivo Problemas.htm en su disco fijo, almacenando


en el cdigo fuente HTML una conexin a la base de datos Seguimiento
de problemas. Tambin crea varios archivos de soporte a los que se hace
referencia en el cdigo fuente HTML -donde se define el formato y
otros elementos- y los coloca en una nueva carpeta bajo el nombre Problemas-archivos.

Nota Si desea que sus pginas de acceso a datos estn disponibles para
otros usuarios de Tnternet o de una intranet, entonces deber llevar el archivo con la base de datos de Access (.mdb) a un servidor de red y guardar sus
pginas Cjunto con las pginas de soporte) en una carpeta Web en lugar de hacerlo en el disco fijo de su computadora. Cuando mueva a un servidor Web
una pgina de acceso a datos o una base de datos creada previamente, asegrese de volver a abrir en Access la pgina y la base de datos -si las referencias entre la pgina y la base de datos son incorrectas, Access intentar repararlas, pidindole que localice los archivos cuando sea necesario.

Agrupe los datos de la pgina Web Seguimiento de problemas

Una de las ventajas de las pginas de acceso a datos est en lo fcil que resulta agrupar los datos que contienen. De hecho, cuando le indicamos que
deseamos ascender un campo y hacer que tenga su propio nivel de agrupamiento, Access se encarga de aadir automticamente un control Expandir,
de forma que los usuarios puedan expandir o contraer un grupo de registros.
El cuadro de dilogo Ordenar y agrupar, por su parte, nos permite definir
exactamente cmo queremos que aparezcan los grupos. En la pgina Web
Seguimiento de problemas, los datos estarn agrupados por el campo AssignedTo.
1. Desplace hacia abajo la ventana Pgina de acceso a datos hasta que aparezca el cuadro de texto AssignedTo.
2. Con el botn derecho del ratn, pulse el cuadro AssignedTo, y a continuacin seleccione Aumentar nivel en el men de acceso directo.

Access crea una seccin con encabezado por encima de la seccin por defecto, mueve el cuadro de texto AssignedTo a la nueva seccin, y aade
un control Expandir en el lado izquierdo de la seccin. Tambin crea una
nueva seccin de desplazamiento en la parte inferior del formulario.
Mientras que la barra de desplazamiento original permite a los usuarios
pasar de unos registros de problemas a otros, la barra de desplazamiento
de esta nueva seccin permite pasar de los problemas de un empleado a
los de otro.
Si prev que la pgina puede llegar a contener una lista con muchos empleados, es posible que desee conservar esta barra de desplazamiento adicional. Pero dado que sabemos que la lista no ser muy larga, podemos
eliminar la barra de desplazamiento del grupo para simplificar as el contenido de la pgina, indicndole a Access que deseamos mostrar todos los
grupos AssignedTo cuando se abra la pgina.

3. Pulse el botn Ordenar y agrupar en la barra de herramientas.

Ordenar y
agrupar

El panel superior del cuadro de dilogo Ordenar y agrupar muestra la lista con los grupos definidos en la pgina.
Aparece seleccionado el grupo AssignedTo, de forma que podemos modificar sus propiedades en el panel inferior.

Encattezxlo de gLipn
Pie da qriip
Secri6n de erplurac. de reyehs 8
Expsridtd de forma predeierrri
Tarriau de pgna da dami
i~ariiparen
It-i&t~~al
de y i i p u
iirden predetermiiiadn
Conlii de filtro de grupo
Campo dr Rlilci li~,
.I~LDU

La erpresiiin n el rtornb

Id?

--

rmslJIt3 o cm)uiit

u Disrnniir nivel de la bar

-. .

4. Establezca el valor No para la propiedad Seccin de explorac. de registros.


Al asignarle el valor No a esta propiedad, hacemos que Access elimine la
barra de desplazamiento asociada con este grupo. An as, se mantiene una
barra de desplazamiento para el grupo de problemas de cada empleado.

5. Establezca el valor Todos para la propiedad Tamao de pgina de datos.


Por defecto, una pgina de acceso a datos slo muestra cinco grupos
- d e esta forma, una base de datos que contenga un gran nmero de registros no da lugar a una pgina Web excesivamente grande y lenta. Al
asignarle el valor Todos a esta propiedad conseguimos que una pgina
con pocos registros resulte ms fcil de utilizar.
A continuacin, establecer una propiedad del grupo de segundo nivel
-la seccin de la pgina donde se muestran los problemas concretos.

6. En el panel superior del cuadro de dilogo Ordenar y agrupar, pulse sobre el grupo IssuesForReport (la segunda fila).
Dado el tamao de los registros, queremos que se muestren de uno en
uno. Los usuarios utilizarn los botones de la barra de desplazamiento
para mBverse entre los problemas asignados a un empleado. Para mostrar
un registro por grupo, debemos asignar el valor 1 a la propiedad Tamao
de pgina de datos.

7. Establezca el valor 1 para la propiedad Tamao de pgina de datos.


8. Cierre el cuadro de dilogo Ordenar y agrupar.

Cmo funcionan las pginas de acceso a datos?


Es habitual que los diseadores de sitios Web quieran proporcionar en
sus pginas acceso a los datos de una base de datos. Desgraciadamente, la tecnologa Web disponible no hace de ello una tarea fcil. Las
pginas de acceso a datos, aunque carecen de muchas de las capacidades de los informes y formularios de Access, son un avance en esta direccin. Pero, jcmo funcionan estas pginas Web especiales? Si las
inas de acceso a datos son simples archivos HTML, cmo se esece la conexin con los datos?
abre el cdigo HTML de una pgina de acceso a datos, se enconrar con varias etiquetas HTML especiales -las etiquetas <META>
y <OBJECT>, por e.jemplo- que han sido incluidas por Access para
ctar la pgina con la base de datos, establecer el formato y aadir
capacidades. Al igual que otras extensiones (plug-ins) Web, los
objetos a los que hacen referencia estas etiquetas son bibliotecas softare especiales que han de estar instaladas y registradas en el explodor Web, y que dicho explorador se encarga de invocar cada vez que
encuentra con las etiquetas en cuestin. El objeto primario dentro
e una pgina de acceso a datos es el Microsoji OfSice Data Source
ntrol ( M S O D S C ) que acta de enlace entre Internet Explorer y el
canismo de base de datos subyacente.
esgraciadamente, los objetos en los que se apoyan las pginas de acso a datos requieren una licencia de Office 2000 y slo funcionan
ternet Explorer 5.0 o posterior -los usuarios Web que no tenstalado Office 2000 no podrn visualizar los datos de sus pgir esta razn, adems del resto de sus limitaciones, es posible
ue las pginas de acceso a datos no sean su mejor opcin a la hora de
oner datos en la Web. En la seccin Otras formas de utilizar Access
la Web, ms adelante en este captulo, puede encontrar un resumen
sobre otras posibilidades para incluir datos de Access en la Web.

Pruebe la pgina agrupada

Veamos cmo funciona la pgina Web Seguimiento de problemas

1. Pulse el botn Vista de pgina en la barra de herramientas.

Vista de pgina

Access visualiza la pgina, donde aparecen los empleados que tienen


problemas asignados, cada uno con un botn de expansin que permite a
los usuarios consultar dichos problemas.

2. Pulse el botn de expansin que aparece a la izquierda de Carlos Fernndez.


Access muestra el registro del primer problema asignado a este empleado. Como puede comprobar en la barra de desplazamiento - d o n d e se lee
IssuesForReport 1 de 2- Carlos Fernndez tiene asignados dos problemas en este momento.

Status

Pr.3ue~o

~iiority

/ ~ t a

DetsEnteied

EnteiedB).

b!ks

Feinlndez

Consejo Puede haoerse dado cuenta de que no puede modificar los datos
de esta pgina -las pginas de acceso a datos no permiten modificar los datos de las pginas agrupadas. Si desea crear una pgina donde sea posible
modificar los datos debe construirla a partir de una nica tabla (o una consulta de una sola tabla), asegurndose de que no hay niveles de agrupamiento (aparte del nivel de agrupamiento por defecto), y que el valor de la propiedad Tamao de pgina de datos es 1, de forma que en la pgina se
muestren los registros de uno en uno. Si lo hace as, los usuarios podrn hacer cambios en la pgiria que se grabarn en la base de datos -igual que si
se estuviese utilizando un formulario en Access.

Aada un hipervnculo a otra pgina de acceso a datos

La pgina Problemas proporciona a los usuarios de la Web una forma conveniente de concultar los problemas del grupo. Pero suponga que le intereha pcrmitir que los usuarios de la Web modifiquen los datos -para reaxigii:is los
problemas a otros empleados, por ejemplo. Los archivos de prcticas inclu-

yen una pgina de acceso a datos diseada para permitir a los usuarios la reasignacin de problemas. El ltimo cambio que haremos en la pgina Problemas ser aadir un hipervnculo que lleve desde sta a la pgina Reasigna.
Ventana
Base de datos

1. Pulse el botn Ventana Base de datos en la barra de herramientas.


2. Pulse el acceso directo Pginas, y a continuacin pulse dos veces sobre
la pgina Reasigna.
Access localiza el archivo Reasigna.htm en su disco fijo y lo abre en la
Vista de pgina.

Nota Dado que las pginas de acceso a datos se almacenan en archivos separados de la base de datos, Access necesita encontrar estos archivos de base
de datos en su disco fijo cada vez que abre una pgina. Si instal los archivos de prcticas en una carpeta distinta de c:\Archivos de prcticas de Access, Access le preguntar si desea localizar Reasigna.htm. Pulse Buscar,
busque la carpeta con los archivos de prcticas en su computadora, y pulse
Aceptar.

Una vez que ha comprobado que la pgina destino del vnculo est disponible, volver a la pgina Problemas para insertar en ella el hipervnculo.

Vista Diseo

Hipervnculo

3. Cierre la pgina Reasigna.


4. Pase a la pgina Problemas.
5. Pulse el botn Vista Diseo en la barra de herramientas.
Aadir un hipervnculo en la parte inferior de la pgina Web.

6. Desplcese hasta el final de la ventana Pgina de acceso a datos.


7. En la caja de herramientas, pulse la herramienta Hipervnculo.
8. Pulse al final de la pgina (en la zona vaca debajo de la seccin de desplazamiento) para crear as un nuevo hipervnculo.
Access muestra el cuadro de dilogo Insertar hipervnculo.

9. Debajo de Vincular a, pulse sobre Pgina de esta base de datos.


Access muestra las dos pginas de acceso a datos que estn asociadas con
la base de datos Seguimiento de problemas, junto con las rutas de sus archivos entre parntesis.

10. Debajo de Seleccione una pgina de esta base de datos, pulse sobre Reasigna.

11. En el cuadro Texto, escriba Reasignacin de problemas, y pulse


Aceptar.
Access crea un hipervnculo a la pgina de acceso a datos. Ms adelante
en este captulo probar este vnculo en Internet Explorer.

12. Cierre la pgina de acceso a datos Problemas, pulsando S cuando Access


le prc;gunte si quiere guardar los cambios.

Insercin de secuencias de comandos en las pginas de acceso a datos


Como ha podido comprobar, resulta sencillo crear potentes pginas de acceso a datos -y las caractersticas con las que ha experimentado hasta ahora
no son ms que el principio. Las pginas de acceso a datos pueden contener
muchos tipos de controles, incluyendo imgenes, grupos de opciones y casillas de verificacin. Adems del agrupamiento y la exploracin de registros,
se pueden incluir herramientas de anlisis de datos muy sofisticadas como
los componentes Spreadsheet, Chart y PivotTable de Office. Y ninguna de
estas facilidades requiere programacin.
Para mejorar las pginas de acceso a datos -para, por ejemplo, proporcionar
un comportamiento especfico a un formulario de lectura de datos- no se
puede utilizar el cdigo Visual Basic que ya conoce. Las pginas de acceso a
datos estn diseadas para ejecutarse en su explorador Web, e Internet Explorer no utiliza el mismo lenguaje, ni siquiera el mismo modelo, que Access.

- Escribir una

Reasigne un problema
Localice el problema que desea reasignar. a continuacidn seleccione el
nombre de un empleado en la parte inferior de la pagina, para que asi le
sea reasignado el problema automAticamente.
tssuen
Title

/?roblema can el nombre del producto

Reas~gnarproblema a

pe-_-_.

(~ngeia

secuencia de
comandos en el
cdigo HTML de
esta pgina Web

- .. .que reasignsrd

el problema en
c~lrsoa otro
empleado

En esta seccin, encontrar una primera toma de contacto con la programacin de pginas Web (scripting). Escribir una secuencia de comandos sencilla que se encargar del funcionamiento de la pgina de acceso a datos Reasignacin de problemas -cuando los usuarios seleccionen el nombre de un
empleado en el control de lista desplegable, Internet Explorer ejecutar la secuencia de comandos, reasignando el problema en curso a otro empleado.
Para llegar a ser un experto en la programacin Web necesitar leer algn
otro libro -y practicar bastante. Sin embargo, si decide continuar aprendiendo sobre este tipo de programacin, descubrir que muchos de los conceptos sobre Visual Basic que ha aprendido en este libro siguen siendo aplicables. La razn es que uno de los dos lenguajes que puede utilizar para
escribir secuencias de comandos es Visual Basic, Scripting Edition, o
VBScript (el otro es JavaScript). Los modelos de eventos y objetos de
Internet Explorer son bastante diferentes de los que se utilizan en Access,
pero funcionan de la misma manera; y, como podr comprobar, se puede utilizar ActiveX Data Objects (ADO) casi de la misma manera que en Access.

Aada cdigo VBScript a la pgina de acceso a datos Reasigna

El control de lista desplegable para el que queremos escribir una secuencia


de comandos se llama NewAssignee. En Internet Explorer, los cuadros de lista desplegable tienen asociado un evento llamado onchange que tiene lugar
cada vez que el usuario selecciona un nuevo valor en la lista - s e es el evento al que responder su secuencia de comandos. Su cdigo VBScript utilizar una combinacin de ADO y el modelo de objetos de Internet Explorer, que
ejecutar una consulta UPDATE para modificar los datos de la tabla Issues.

1. En la ventana Base de datos, seleccione la pgina Reasigna, y a continuacin pulse sobre Diseo.

Q,

La pgina Reasigna est casi completa, a excepcin de la secuencia de


comandos que usted ha de escribir. Para poder hacerlo, necesitar sumergirse en el cdigo HTML que est por detrs de la pgina Reasignu.
Dado que los archivos HTML son archivos de texto, podra abrir este archivo en cualquier editor de texto. Sin embargo, Office 2000 incluye el
Editor de secuencias de comandos de Microsoft, el cual, al igual que Visual Basic, incluye muchas herramientas adicionales que facilitan la escritura de secuencias de comandos para las pginas Web.

2. Con el botn derecho del ratn, pulse en cualquier lugar de la pgina, y a


continuacin seleccione Editor de secuencias de comandos en el men de
acceso directo.
Se abre el Editor de secuencias de comandos en el que se muestra el archivo fuente en HTML de la pgina Reasigna. La barra de ttulo del Edi-

tor de secuencias de comandos refleja el hecho de que, en realidad, se trata de un subconjunto del Entorno de programacin de Microsoft, un editor de cdigo que comparten muchos de los lenguajes de programacin
de Microsoft. El editor contiene varias herramientas familiares, incluyendo un Explorador de proyectos y una ventana de propiedades, adems
de otros nuevos, como la ventana Esquema de secuencias de comandos.
La ventana Cdigo muestra el cdigo HTML de la
pgina de acceso a datos Reasigna

La ventana
Esquema de
secuencia de
comandos muestra
todos los objetos
de la pgina para
los que se pueden
escribir secuencias
de comandos

No se preocupe si no entiende o no sabe cmo modificar el cdigo


HTML; para realizar los siguientes pasos no es necesario crear ninguna
etiqueta o cdigo HTML. Adems, el cdigo HTML de una pgina de acceso a datos es complejo, debido a toda la informacin extra que Access
incluye para conseguir que funcionen los objetos y controles especiales.

3. Para que haya ms espacio donde editar, cierre las ventanas Explorador
de proyectos y Propiedades (pulse en la X que aparece en su esquina).
La ventana Esquema de secuencias de comandos muestra todos los objetos de la pgina Reasigna. Expandiendo la lista asociada con cada objeto, aparece una lista con los eventos asociados a dicho objeto, de forma
que es posible insertar automticamente una secuencia de comandos vaca que responda a ese evento.

4. En la ventana Esquema de secuencias de comandos, pulse el signo (+)


que aparece junto a NewAssignee.
Aparecen los eventos disponibles para este cuadro de lista desplegable.

5. Pulse dos veces sobre el evento onchange.


El Editor de secuencias de comandos incluye en el archivo la etiqueta
HTML <SCRIPT>, estableciendo sus atributos de forma que el cdigo,
que est a punto de introducir, se ejecute cuando cambie el valor del cuadro de lista.

6. Escriba el siguiente cdigo VBSript.


' Ejecuta una consulta de actualizaci6n que reasigna el
' problema actual.
qry = "UPDATE Issues SET AssignedTo = " & NewAssignee.value
qry = qry & " WHERE IssueID = " & 1ssueID.value

MSODSC.Connection.Execute qry
MsgBox "Problema reasignado.",

, "Reasignacin de

problemas"

' Vuelve a consultar el conjunto de registros y limpia la


' lista desplegable.

MSODSC.DataPages(O).Requery
NewAssignee.value = Null

El archivo HTML debera tener un aspecto similar a ste:

= "UPDATE I S S U ~ SSET PsSlgnedTO = " 6 Neulssignee.velue


= q i y L " WnERE IssueID = " L 1ssueID.value
SODSC.COnnectiOn.ExeCUte qcy
sgBov "PL-oblema r e a s i g n a d o . " , , "Reasignacin de problemas"

ry
CY

Como puede comprobar, VBScript para Internet Explorer no es muy diferente de Visual Basic para Access. As es como funciona la secuencia de comandos:

i Las

dos primeras lneas construyen una consulta SQL encargada de actualizar la tabla Issues. Almacenan la cadena con la consulta en la variable qry. La primera lnea combina el valor almacenado en el cuadro
NewAssignee con la primera parte de la sentencia SQL. Una diferencia
que encontrar, al utilizar controles en las secuencias de comandos, es
que debe especificar la propiedad Value para poder acceder al dato asociado con un control. (En Visual Basic no es necesario acceder a esta propiedad, porque es la propiedad por defecto.)

La segunda Inea aade la clusula WHERE a la sentencia SQL, especificando el registro que se desea modificar. Hace referencia al cuadro de
texto I.~suelDque aparece en la pgina, y que es donde se encuentra el
identificador numrico del problema en curso, el que se desea reasignar.
Una vez ejecutadas estas dos sentencias, la variable qry contendr una cadena como sta:
UPDATE Issues SET AssignedTo = 3 WHERE IssueID = 1

i La tercera lnea ejecuta la consulta que reasigna el problema. Hace refe-

rencia al objeto MSODSC, un objeto que encontraremos en todas las pginas de acceso a datos.
Dado que este objeto es el enlace entre los datos de Internet Explorer y
los de Access, se puede utilizar para acceder al conjunto de registros asociado con la pgina. En este cdigo acaba de utilizar la propiedad Connection del objeto MSODSC, una propiedad que puede recordar de la
programacin ADO; devuelve la conexin actual que est utilizando la
pgina de acceso a datos.
i Para

ejecutar la consulta, la lnea utiliza el mtodo Execute del objeto


Connection, indicando que es la variable qry quien contiene la consulta a
ejecutar. La Inea se puede leer como: Usando la misma conexin que
est utilizando el objeto MSODSC de la pgina de acceso a datos, ejecuta la consulta almacenada en la variable qry.

i La cuarta lnea muestra un

cuadro de mensaje indicando que la reasignacin se ha realizado con xito. Esta lnea es exactamente igual a la que se
escribira en Visual Basic para Access -aunque ser Internet Explorer
quien visualice este mensaje.

i La quinta lnea vuelve

a utilizar el objeto MSODSC, en esta ocasin haciendo referencia a su coleccin DataPages. En concreto, se refiere al
elemento O de la coleccin, que, para una pgina con un solo conjunto de
datos, es el nico elemento de la coleccin. La lnea utiliza el mtodo Rcquery del objeto DataPage para volver a consultar los datos de la pgina. La razn para hacerlo es que la pgina Web no se actualiza autoiiiticamente para mostrar los nuevos datos -el cdigo debe encargarse de
volver a consultar los datos explcitamente.

i La ltima lnea utiliza la propiedad

Value del cuadro NewAssignee, asignndole el valor Null y haciendo as que aparezca vaco.

7. Cierre la ventana del Entorno de programacin de Microsoft, pulsando S


cuando el editor le pregunte si desea guardar los cambios.

8. Cierre la pgina Reasigna.


Pruebe sus pginas en Internet Explorer

Sus pginas ya estn listas para rodar. Sin embargo, antes de darlo por concluido, debera probarlas en Internet Explorer -despus de todo, ese es el
entorno para el que estn pensadas. Desde la ventana Base de datos, es posible abrir una pgina de acceso a datos directamente en Internet Explorer mediante la orden Vista previa de la pgina Web.

1. Con el botn derecho del ratn, pulse sobre la pgina Problemas y, a continuacin, seleccione Vista previa de la pgina Web en el men de acceso directo.
Internet Explorer mostrar la pgina Problemas. Puede que perciba un
cierto retardo mientras el objeto MSODSC se liga con los datos de Access subyacentes. Si lo desea, puede expandir el grupo de un empleado e
inspeccionar sus problemas.

2. En la parte inferior de la pgina, pulse sobre Reasignacin de problemas.


El hipervnculo se encarga de abrir la pgina Reasignacin de problemas.
Internet Explorer lee la secuencia de comandos que usted escribi, y la
asocia con el evento onclick de la lista desplegable.

3. En el cuadro desplegable Reasignar problema a, seleccione Carmen Gmez.


Se ejecuta la secuencia de comandos. Construye la cadena con la consulta a partir del problema actual y el nuevo empleado que usted ha seleccionado, ejecuta la consulta mediante la conexin de base de datos de la
pgina y, a continuacin, muestra el cuadro de mensaje.

Reasigne un problema
Localice el problema que desea reasignar. a continuaci6n seleccione el
nombre de un empleado en la parte inferior de la pgina, para que as
le sea reasignado el problema automticamente

Cuando -9
Reasignar problema a:

1
. ..lnternet
Explorer ejecuta
la secuencia de
comandos,
modificando los
datos en la base
de datos de
Access a la que
est ligada la
pgina

4. Pulse Aceptar.
El cdigo reconsulta los datos de la pgina.

5. Cierre Internet Explorer.


Aunque breve, esta introduccin a las secuencias de comandos para Web
puede ayudarle a apreciar la relacin que existe entre la programacin en Access y la programacin Web. Sobre todo, sabe que si su pgina de acceso a
datos nohace todo lo que usted desea, an le queda la opcin de escribir secuencias de comandos que lo consigan.

Otras formas de utilizar Access en la Web


Adems de los hipervnculos y las pginas de acceso a datos, Access
incluye otras muchas caractersticas relacionadas con la Web. No hemos tratado dichas caractersticas en este libro, bien porque no involucran ningn tipo de programacin en Visual Basic, o bien porque no
es probable que aparezcan en las aplicaciones de Access. Sin embargo, es posible que le interese explorar estas facilidades a travs de la
ayuda interactiva.

(Continuacin)

alternativa consiste en crear hipervnculos a listas o tablas HTML de


forma que su aplicacin muestre siempre los datos ms actualizados
obtenidos de la Web. Para la importacin o la vinculacin de datos, se
selecciona la orden Obtener datos externos (men Archivo). A continuacin, dentro del cuadro de dilogo Importar o Vincular tablas, se
selecciona Documentos HTML en el cuadro Tipo de archivo.

Poner datos en una Web. Si pone los datos de sus bases de datos disponibles en un sitio Web en lugar de imprimirlos, puede ahorrar mucho papel! La orden Exportar (men Archivo) permite exportar tablas,
consultas, formularios o informes en un formato apto para la Web. En
el cuadro de dilogo Exportar ha de seleccionar uno de los tres formatos Web disponibles en el cuadro Guardar como tipo. El formato Documentos HTML, que funciona con cualquier Web, guarda los datos
actuales como una tabla esttica. Los formatos Pginas Microsoft Active Server.y Microsoft IIS 1-2, que funcionan con los servidores que
ejecuten el Internet Information Server (11s)de Microsoft, guardan los
datos como tablas dinmicas que se actualizan automticamente cuando los usuarios abren las pginas. Por ltimo, para exportar un informe,
se puede seleccionar el formato Snapshot, que guarda una imagen del
informe que los usuarios pueden visualizar e imprimir desde su propio
explorador Web mediante el control ActiveX Snapshot.
Ninguna de estas facilidades requiere programacin en Visual Basic
das estn disponibles a travs de rdenes estndar de Access. Para
zar estas tareas en Visual Basic se utiliza el mtodo TransferDatadel objeto DoCmd Por otra parte, si se exportan documentos de
Access a formato HTML o formato de pginas Microsoft Active Server, luego se puede utilizar el Editor de secuencias de comandos o
FrontPage 2000 para modificarlos y aadirles secuencias de comandos.

Programacin con controles ActiveX. En Office 2000 se incluyen


dos controles ActiveX que los programadores pueden utilizar para acceder a un sitio Web. Uno es el control WebBrowser, que permite visualizar pginas HTML en los formularios, de forma que es posible '
incluir en las aplicaciones nuestro propio explorador Web personalizado. El otro es el Internet Transfer Control, que nos ayuda a mover
archivos desde y hacia un servidor Web, mediante los protocolos FTP
y HTTP. Para utilizar estos controles, es necesario insertarlos en un
(contina)

(Continuacin)
formulario mediante la orden Control ActiveX (men
blecer sus propiedades y utilizar su modelo de objeto
procedimientos en Visual Basic asociados con los eventos que nos interese tratar.
Uso de FrontPage con Access. A los que utilizan FrontPage para disear sus pginas Web, les alegrar saber que esta aplicacin les puede ayudar a establecer una conexin con los datos de sus bases de datos en Access. Una vez importada una base de datos en una Web de
FrontPage, el Asistente para resultados de base de datos permite crear
pginas donde se visualicen los datos o disear formularios Web que
inserten datos en la base de datos de Access.
Para obtener ms informacin sobre estas y otras facilidades relacionadas con la Web, consulte la ayuda interactiva.

Salga de Access
i En el men Archivo, pulse Salir.

Resumen del captulo


Para

Haga esto

Insertar un hipervnculo
en un formulario

Pulse el botn Insertar hipervnculo y,


a continuacin, especifique la direccin del
hipervnculo y el texto que desea mostrar
(o cree un control de tipo etiqueta, botn de
comando o imagen y establezca su propiedad
HyperlinkAddress).

Almacenar hipervnculos
en una tabla

Aada a la tabla un campo de tipo


Hipervnculo y utilcelo para insertar los
hipervnculos en l. Para mostrar estos
hipervnculos en un formulario, cree un
cuadro de texto que est ligado al campo
Hipervnculo.

Para

Haga esto

Seguir un hipervnculo
mediante Visual Basic

Para simular la pulsacin de un hipervnculo


asociado con un control de tipo etiqueta, botn
de comando o imagen, utilice el mtodo
Follow sobre el objeto Hyperlink
(control.Hyperlink.Follow). Para simular la
pulsacin de un hipervnculo almacenado en
un campo, utilice el mtodo FollowHyperlink,
especificando la direccin a la que desea
saltar.

Modificar un hipervnculo Cambie las propiedades HyperlinkAddress y


mediante Visual Basic
Hyperlinksubaddress del hipervnculo del
control. Si se trata de un hipervnculo
almacenado en un campo, establezca el valor
del campo con una cadena que sea el resultado
de concatenar el texto que desea mostrar en el
hipervnculo, su direccin y subdireccin,
separados por el carcter #.
Crear una pgina de
acceso a datos donde se
muestren datos de una
tabla o una consulta

En la ventana Base de datos, seleccione la


tabla o la consulta y, a continuacin,
seleccione la orden Pgina (men Insertar).
Para aadir todos los campos
automticamente, seleccione Autopgina:
en columnas.

Agrupar los datos en


una pgina de acceso
a datos

En la vista Diseo, pulse con el botn derecho


sobre el control que desee agrupar y
seleccione Aumentar nivel. Pulse el botn
Ordenar y agrupar para modificar la
configuracin de los grupos definidos en
la pgina.

Visualizar y modificar
el cdigo HTML de una
pgina de acceso a datos

Con el botn derecho del ratn, pulse en


cualquier sitio de la pgina de acceso a datos
y seleccione Editor de secuencias de
comandos en el men de acceso directo.

Para obtener informacin


interactiva sobre

Pulse el botn Ayuda y luego pida ayuda sobre

Ayuda

Trabajo con hipervnculos crear formularios con hipervnculos


Diseo de pginas de
acceso a datos

pginas

Movimiento de datos
desde o nacia la Intemet
o uiia Web

publicar pginas

u s o de controles ActiveX

controles ActiveX (o para obtener ayuda sobre


las propiedades de un control ActiveX, pulse
la tecla FI estando en la hoja de propiedades
del control)

POR DNDE SEGUIR?


Enhorabuena - e n estos captulos ha cubierto una parte muy importante de
todo lo relacionado con Microsoft Access y Microsoft Visual Basic. El desarrollo de aplicaciones en Microsoft Access es un tema amplsimo, y a medida que vaya trabajando con Access, descubrir nuevas fronteras que explorar. Estos son algunos de los puntos de partida para seguir aprendiendo.
Microsoft Office 2000 Developer Esta versin de Office nos permite distribuir nuestras aplicaciones a los usuarios que no tengan Access ni Office
-e incluye informacin adicional sobre la programacin para Office, Internet Explorer, Visual Basic, los objetos de datos ActiveX (ADO) y los objetos de acceso a datos (DAO).
Recursos en la Web El sitio Web de Microsoft ofrece muchos otros recursos relacionados con Office y Access, incluyendo informacin de ltima
hora, documentacin interactiva, aplicaciones de ejemplo y programas. Para
visitar el sitio Web de Office, seleccione la orden Office en el Web (men
Ayuda). O, para obtener ms informacin sobre la programacin en Visual
Basic para Access, visite el Office Devc)loper Forum en

Sus propias aplicaciones Las necesidades de sus bases de datos sern distintas de las de los dems -por este motivo, es probable que aprenda ms
creando sus propias aplicaciones de Access que leyendo cualquier libro. As
pues manos a la obra! Igual que hizo en los primeros captulos de este libro,
comience automatizando las tareas de los formularios de alguna base de datos existente. Una vez que se acostumbre a escribir y depurar cdigo Visual
Basic, intente crear una aplicacin personalizada por su cuenta. Despus, a
medida que vaya descubriendo tareas complicadas que desee incluir en sus
aplicaciones, adntrese en nuevas reas de los modelos de objetos de Access,
ADO o DAO.

Caracteres especiales
& (ampersand)
carcter de acelerador de teclado, 35, 268
carcter de concatenacin de cadenas, 63,213
' (apstrofe), 46
" (comillar), 53
[ ] (corchetes), 103
o (distinto), 83
: (dos puntos), 190
! (exclamacin)
icono de cuadros de mensaje, 107
separador de palabras clave, 74, 185, 212, 245
... (Generar), botn, 50
? (interrogacin)
en la ventana Inmediato, 72, 130
icono en cuadros de mensaje, 110
( ) (parntesi~),137, 321
... (puntos suspensivos), 271
= (signo igual), 45, 137, 360
+ (signo ms), xxv
- (subrayado)
carcter de continuacin de lnea, 137, 339
en nombres de procedimientos, 44
AbrirSitioAyuda, funcin, 398
AbrirSitioRelacionado, funcin, 398
accesos directos, 399
Access. Viuse Microsoft Access
Accin, propiedad, 282, 283
acDataErrAdded, constante, 185
acDataErrContinue, constante, 179
acDataErrDisplay, constante, 179, 185
aceleradores de teclado, 35, 268
Aceptar-Click, procedimiento, 403
acFilterByForm, constante, 70
acForm, constante, 2 13
acNewRec, constante, 33
acShowAlIRecordr, constante, 83
Activado, propiedad, 21 1, 2 14-215
Activate, evento, 89-90
Activecontrol, propiedad, 32 1
actualizacin de formularios, 254-255
acViewNorma1, constante, 229-230
acViewPreview, constante, 229-230

addNew, mtodo, 184


administracin de actividades, bases de datos de, 5
administracin de contactos, bases de datos, 5, 379-383.
Vase tambin Contactos, base de datos
Administracin de llamadas, bases de datos de, 5
Administrador de tablas vinculadas, 302
ADO (objetos de datos ActiveX), biblioteca
en pginas de acceso a datos, 41 6
introduccin, 315? 329-330
manejo de errores, 338
Recordset, objetos, 333
ADODB (base de datos de objetos de datos ActiveX),
315, 329. Vase tambin ADO (objetos de datos
ActiveX), biblioteca
.adp (Proyecto de datos de Access), archivos, 330
AfterDelConfirm, evento, 89
AfterInsert, evento, 89
AfterUpdate, evento
Contactos, formulario, 5 1, 78, 97
DilogolrARegistro, formulario, 2 14
introduccin, 50, 89, 94
Agregar inspeccin, orden, 158
Agregar mdulo, botn, 124
AgregarRegistro-Click, procedimiento, 30-34, 37-39
agrupacin de datos
en informes, 15, 348
en pginas de acceso a datos, 409-413
Al abrir, propiedad, 252
Al activar el registro, propiedad, 50, 242
Al entrar, propiedad, 9 1
Al filtrar, propiedad, 70
Al imprimir, propiedad, 350
Al no estar en la lista, propiedad, 182
Al ocurrir un error, propiedad, 172
Al salir, propiedad, 92
almacenamiento
de cdigo Visual Basic, 23, 39
de datos, 47
de formularios, 23, 39
de mdulos, 125
A L T - ~ ~ combinaciones,
C~~I,
xxv, 98-99
AllowAdditions. propiedad, 239
AllowDelctions. propiedad, 239, 249
AllowEdits, propiedad, 42, 45, 239, 249
'1' h 1 1 1 I I
amarillo, resalte de instrucciones, 148

ampersand (&)
carcter de concatenacin de cadenas, 63, 213
carcter para acelerador de teclado, 35, 268
anclaje de mens y ventanas, 155,272
apertura
de formularios, 23,220-221,240,252-253, 270,279
al inicio, 293
de informes, 229
de mdulos, 131, 146, 151,312
de procedimientos de evento, 29-30
omisin de las opciones de inicio, 297
aplicaciones
accesos directos, 299
agregacin de objetos a, 14-16
barras de ttulo, 288, 294
cierre, 293
creacin, 200
de base de datos, 7-8
divisin, 298-302
formularios de inicio, 288-289
iconos, 295
pantalla de inicio, 297-298
para grupos de trabajo, 310
y unidades de red, 299
Aplicar filtro, botn, 67
apstrofe ('), 33
Application, objeto, 319, 368
Appl yFilter, evento, 89
Archivos de prcticas de Access, carpeta, xix
archivos de prcticas
carpeta predeterminada, xix
desinstalacin, xxii
instalacin, xviii-xix
lista de archivos en el CD, xx-xxii
soporte tcnico, xxii
archivos
de Access (.adp y .mdb), 330
de prcticas (vase archivos de prcticas)
archivos de texto delimitado por comas, 11-12
hipervnculos a, 396-397
importacin, 11- 12
argumentos, 33, 126- 127
As, palabra clave, 129
asignacin de valores
a campos, 94-95
a controles independientes, 64, 253, 292, 360
a propiedades, 45, 73-74, 92, 223-225
a variables, 110
Asistente para ayuda, xxiv
Asistente para bases de datos
bibliotecas de objetos, 329
creacin de bases de datos, 5-6
introduccin, 3-4

objetos creados por, 9, 101


Asistente para botones de comando
cdigo creado con, 34
creacin de botones, 19-23,47-48,216-217,239-241
asistentes
Administrador de tablas vinculadas, 302
introduccin, 3-4
para base de datos
bibliotecas de objetos, 329
creacin de bases de datos, 5-7
introduccin, 3-4
objetos creados por, 7-8, 101
para botones de comando
cdigo creado por, 34
creacin de botones, 19-23,47-49, 216-217,
239-241
para cuadros combinados, 58-60
para cuadros de lista, 205-207
para grupos de opciones, 76-78
para importacin de texto, 12-13
para informes, 15-16, 202, 237, 346
para instalacin, 301
para pginas, 406
para seguridad por usuarios, 296
para subformularios, 237
Aumentar nivel, orden, 409
AutoCenter, propiedad, 2 19, 292
Autocomprimible, propiedad, 353-354
Automatizacin, 365-367
Ayuda de Microsoft Access, botn, xxiii
Ayudante de Office, xxiii
BackColor, propiedad, 92, 351
barra de estado, 295
Barra de herramientas, propiedad, 277
Barra de mens, propiedad, 272-273
barra de navegacin, 410. Vase tambin selector de
registros
Barras de desplazamiento, propiedad, 219, 292
barras de herramientas. Vase tambin botones
Depuracin, 146
introduccin, 262-263
ocultamiento, 296
personalizadas, 275-284, 294
Barras de mens contextuales, propiedad, 274
barras de mens. Vase mens
barras de rdenes. Vase mens; barras de herramientas
barras de ttulo, 288, 294
base de datos de servidor, 299
base de datos, tipo de variable, 184
Base de datos, ventana, 9, 294

bases de datos
Contactos (vase Contactos, base de dato&)
creacin, 5-7
de servidor frente a cliente, 299
de slo lectura, 187
importacin de datos, 11-12,422
introduccin de datos, 10, 19, 94-95
proteccin, 296
Seguimiento de problemas (vase Issues, base de
datos)
Suscripciones (vase Suscripciones, base de datos)
uso de cdigo DAO, 185
visualizacin de objetos, 9-10, 313-319
y unidades de red, 299
Beep, instruccin, 73
BeforeDelConfirm, evento, 89
BeforeInsert, evento, 89
BeforeUpdate, evento, 89, 94, 102, 106-107
BeginTrans, mtodo, 334
bibliotecas de objetos
bsqueda, 3 19
D A 0 frete a ADO, 329-330
introduccin, 3 15
modelos de objetos, 313
t
referencias, 371-372
y barras de rdenes, 283-284
Bolean, valore?, 132
Bookmark, propiedad, 21 3
BorderStyle, propiedad, 219, 292
Borrar todos los puntos de interrupcin, 170
Botn de comando, herramienta, 42.
botones. Vase turnbin botones de rdenes
Agregar mdulo, 124
Aplicar filtro, 67
Asistentes para controles, 20
Ayuda de Microsoft Access, xxiii
Botn de orden, 42
Cdigo, 131
Color de fondo o de relleno, 61
Continuar, 154
Cuadro combinado, 59
Cuadro de herramientas, 20
Cuadro de lista, 205
Cuadro de texto, 357
Etiqueta, 29 1
Filtro por formulario, 67
Filtro por seleccin, 67, 81
... (Generar), 50
Grupo de opciones, 75-76
Guardar, 39
Insertar hipervnculo, 390
Negrita, 61
Nueva, 5

Ordenar y agrupar, 410


Paso a paso para salir, 153
Paso a paso por instrucciones, 148, 153
Paso a paso por procedimientos, 156
personalizados, 277-279,282-283
Propiedades, 43
Quitar filtro, 83
Relaciones, 201
Restablecer, 170
Ventana Base de datos, 9
Ventana Inmediato, 148
Ventana Locales, 155
Ver Microsoft Access, 35
Ver procedimiento, 32
Vista de pgina, 412
Vista Diseo, 19
Vista Formulario, 22
Vista preliminar, 354
Botones de desplazamiento, propiedad, 219,292
botones de rdenes
aceleradores de teclado, 35
alternativas, 262
inclusin en formularios, 18-23,42-45
ttulos frente a nombres, 21
bucles
Do Until, instruccin, 375
For Each, instruccin, 324
Buscar, orden, 58
bsqueda
de datos, 22, 58
en bibliotecas de objetos, 319
bsqueda
de texto en la biblioteca de objetos, 3 19
de registros, 22, 58
cadenas
asignacin de valores, 110
comparacin, 121
concatenacin, 63
definicin, 53
vacas, 137
CambiarColorEtiqueta, procedimiento, 323-325
cambio entre Access y Visual Basic, 30, 35, 38
campos
concatenacion, 137
relleno de valores, 94-97, 159
visualizacin de valores, 166-167
Cancelar, propiedad, 21 8
caractersticas nuevas de Access 2000, xviii
Case, in\truccin, 160
CD incluido. Va.te archivos de prcticas
CD, Vase archivos de prcticas
.

cierre
de aplicaciones, 293
de cuadros de dilogo, 213, 216-218, 230
de formularios, 89, 216-218, 246
Ciudad-KeyDown, procedimiento, 99
Click, evento, 89
Close, evento, 89
Close, mtodo, 213, 230, 246
CloseCurrentDatabase, mtodo, 293
Cdigo, botn, 131
Cdigo, ventana, 30, 32, 69, 146-147, 230
CdPostal-AfterUpdate, procedimiento, 160-162,
164- 170
colecciones
Controls, 3 18
Databases, 329-330
DataPages, 4 19
Forms, 73,374
introduccin, 3 13-314
ItemsSelected, 327-328
Microsoft Outlook, 381
Microsoft Word, 374
referencias, 320-323
Workspaces, 330
Color de fondo o de relleno, botn, 61
color de fondo, 61, 90-94, 349,408
colores
alternado., en informes, 349-350
de fondo, 61, 90-94, 408
de primer plano, 323-325
en la ventana Cdigo, 47, 148, 161
columnas, tamao de, 206
comas entre argumentos, 33
combinacin de cadenas, 63
comentarios, 46
comillas ("), 53
CommandBar, objeto, 284
CommandBarControl, objeto, 284
CommitTrans, mtodo, 335
comparacin de cadenas, 121
Compare, opcin, 121
compilacin, 164-166, 2 1 6
comprobacin ortogrfica de cdigo Visual Basic, 121
concatenacin de cadenas, 63, 135
condicional
formato, 347
instrucciones, 70, 79 (vase tambin bucles)
Confirm, funcin, 3 16
Confirmacin, funcin, 128-130, 132, 182, 184
Connection, objeto, 330
Connection, propiedad, 334, 339, 419
Const, instruccin, 122, 179
constantes. Vanse tambin las constantes concretas
+

declaracin, 121, 122-123, 179


definicin, 33
incorporadas, visualizacin, 3 19
para la funcin MsgBox, 110
visualizacin en el Examinador de objetos, 316-317
Consultas por ejemplo (QBE), rejilla de, 63
consultas
de accin, 337
en cuadros combinados, 62-63
de tablas mltiples, 237
en cuadros de lista, 209
en formularios e informes, 237
Contactos por ciudades, informe, 15-17
Contactos, base de datos
Confirmacin, funcin, 128-130, 132, 182, 184
Contactos por ciudades, informe, 15-17
Contactos, formulario (vase Contactos, formulario)
Contactos, tabla, 12- 13, 101-112
creacin de informes, 15-16
creacin, 5-7
introduccin de datos, 9- 10, 19
MostrarMensaje, procedimiento, 124-126, 179, 190
objetos creados por el Asistente para bases de
datos, 8-9
Tipos de contacto, formulario, 10
Tipos de contacto, tabla, 181, 182
visualizacin de objetos, 9- 10
Contactos, formulario
como formulario de slo lectura, 40-41
controles
Agregar nuevo registro, botn, 19-21, 35-38
Buscar registro, cuadro combinado, 58-66,90-94
Editar registro, botn, 42-46, 54
Guardar registro, botn, 47-49, 53
Nuevo registro, botn, 19
Opciones de filtro, grupo de opciones, 76-80
filtrado, 67
inclusin de botones de orden, 18-22,42-45
mdulo, 131
procedimientos
AgregarRegistro-Click, 30-34, 37-38
Ciudad-KeyDown, 99
CdPostal-AfterUpdate 160-163, 164-170
DireccinCompletu, funcin, 136-139
Form-AfterUpdate, 53
Form-ApplyFilter, 82-83
Form-BejbreUpdate, 106-107, 109-111,
132-133, 151-157
Form-Current, 5 1-52, 65-66
FormError, 170, 178-179
FormFilter, 70
Form-KeyDown, 100, 187-192
IdTipoContacto-NotlnList,182-185

Contactos, formulario, procedimientos (cont.)


Mod~ficarRegistro-Click,44-47
Nombre-After Update, 96
NombreCompleto, funcin, 134- 136
Opcione\Fzltro-AfterUpdate,78-80
visualizacin, 8, 13-14
Contactos, tabla, 12-13, 102-112
contextuales, mens, 274, 295
continuacin de lnea, carcter de, 137, 339
Continuar, botn, 154
control de activos, bases de datos de, 5
control de inventario, bases de datos de, 5
controles
ajuste de propiedades, 92, 323-325
ajuste de valores, 64-66, 94-95, 253, 360, 419
botones de rdenes (vase botones de rdenes)
cuadros combinados (vase cuadros combinados)
cuadros de lista (vase cuadros de lista)
cuadros de texto, 357
de alineacin, 49
dependientes frente a independientes, 64, 77
etiquetas, 357
eventos, 88-89
Expandir, 409-41 0
1
grupos de opciones, 75-80, 229
Internet Transfer, 422
marcos de objetos, 368
para etiquetas, 225-227
paso de uno a otro, 90
WebBrowser, 422
Controls, coleccin, 3 18
conversin de macros a Visual Basic, 23-24
copia
de cdigo entre procedimientos, 51-52, 230
de conjuntos de registros, 212
de mens y rdenes, 267, 271
desde el Examinador de objetos, 319
corchetes ([ ]), 103
Count, propiedad, 321, 332
Create WordMemo, funcin, 370-37 1, 337
CStr, funcin, 378
CTRL-tecla,combinaciones, xxv, 98-99
Cuadro combinado, herramienta, 59
Cuadro de herramientas, botn, 20
Cuadro de lista, botn, 205
cuadro de seleccin de formulario, 41
Cuadro de texto, botn, 357
cuadros combinados. Vase tambin cuadros de lista
actualizacin, 257
ajuste de valor, 64-66
errores, 181
formato, 60, 90-94
inclusin en informes, 59-60

ordenacin de la lista, 62-63


propiedades, 62
cuadros de dilogo. Vase tambin formularios
apertura, 220-221
cierre, 213, 216-218, 230
creacin, 204-205
introduccin, 202-203
modales, 220, 222
ocultamiento, 224
propiedades de apariencia, 219
cuadros de lista. Vase tambin cuadros combinados
actualizacin, 257
creacin, 205-210
DblClick, evento, 215-216
seleccin mltiple, 325-328
cuadros de mensaje, 52, 107, 109-111, 158. Vase
tambzn cuadros de dilogo
cuadros de texto, 357
Current, evento, 50-5 1, 89, 242
CurrentProject, objeto, 334, 339
CurrentView, propiedad, 245
D A 0 (Objetos de acceso a datos), b~blioteca
en el Examinador de objetos, 315
introduccin, 184, 328-330
referencias, 185
variables tipo Recordset, 184, 212
Datahases, coleccin, 330
DataPages, coleccin, 419
Date, funcin, 228
Dateserial, funcin, 252
datos
actualizacin, 254-255
agrupacin, 15, 348,409-413
almacenamiento, 47
bsqueda, 22,58
comparticin con otras aplicaciones, 367, 368
filtrado, 22, 67-84
importacin, 11,422
introduccin, 10- 11, 19, 88-89,94-95
ordenacin, 15, 121,232-233
tipos, 101
validacin, 101-102, 182
dBASE, importacin de archivos de, 11
DBEngine, objeto, 330
DblClick, evento, 21 6
DDE (Intercambio dinmico de datos), 368
Deactivate, evento, 89
Debug, objeto, 158
DefaultValue, propiedad, 94, 253
Delete, evento, 89
Depuracin, barra de herramientas, 146

depuracin. Vase errores; Inmediato, ventana


Accin, 282,-283
Activado, 211, 214
Al abrir, 252
Al activar el registro, 50, 242
Al entrar, 9 1
Al filtrar, 69
Al imprimir, 350
Al no estar en la lista, 182
Al ocurrir un error, 175
Al salir, 92
<
Barra de mens, 272-273
Botones de desplazamiento, 219, 292
Dexription, 190
Direccin de hipervnculo, 391
Emergente, 220, 239
EOF, 375
Filter, 72, 233, 243
FilterOn, 72, 233
ForeColor, 324
Form, 332
Index, 335
introduccin en el cdigo, 38
Limitar a la lista, 181
Mscara de entrada, 101
Microsoft Word, 374, 378
Modal, 220
MoveLayout, 362
NextRecord, 362
Number, 190
OrderBy, 362
OrderByOn, 233
PrintSection, 362
RecordCount, 37 1
RecordsetClone, 2 1 2
Seleccin mltiple, 325-326
Selectores de registro, 21 9, 292
Subdireccin de hipervnculo, 396
Description, propiedad, 190
desinstalacin de los archivos de prcticas, xxii
desplazamiento de cdigo, 167
Detail-Format, procedimiento, 352, 354
Detail-Print, procedimiento, 350, 354, 359
DilogoEtiqueta.~,formulario, 225-230
DilogoIrARegistro, formulario
apertura, 220-22 1
Cancelar, botn, 216-218
creacin, 204-205
cuadro de lista, 205-210,215,216
propiedades, 21 8-220
prueba, 221 -223
Ver registro, botn, 21 0-215
Dim, instruccin, 110, 139-140

dimensionamiento de controles, 49, 206-207


Direccin de hipervnculo, propiedad, 391
DireccinCompleta, funcin, 136- 139
Dirty, evento, 89, 94
divisin de aplicaciones, 298-302
Divisor de bases de datos, 300-302
Do Until, instruccin, 375
DoCmd, objeto, 33, 213, 227, 246, 281
dos puntos (:), 190
DoubleClick, evento, 89
edicin
de datos, 47
de datos en pginas de acceso a datos, 413
de procedimientos de evento, 36-38
EditHyperlink-Click, procedimiento, 401
EditLink, formulario, 400-404
ejecucin del cdigo lnea a lnea, 148- 151
ejecucin paso a paso, 148-154
Elegir generador, cuadro de dilogo, 44
eliminacin de los archivos de prcticas, xxii
Else, instruccin, 80
ElseIf, instruccin, 83
Emergente, propiedad, 220, 239
emergentes, formularios, 220, 238-247
End If, instruccin, 80
End Select sin Select Casen, error, 169
End Sub, instruccin, 34
Enter; evento, 89-90
Entorno de programacin de Microsoft, 417
entrada automtica desde lista de palabras clave, 37
Entrada de datos, propiedad, 249
EOF, propiedad, 375
Err, objeto, 190
Error, evento, 175, 180
errores
anticipacin, 192- 193
ayuda interactiva, 166
en cuadros combinados, 181
ignorados, 194
lgicos, 163
manejo, 34, 187-194, 338
mensajes
End Select sin Select Case, 165
personalizados, 178-179
Se esperaba: expresin, 161
Variable no definida, 164
nmeros, 175-178
tipos, 163-164
ESC, tecla, 2 18
espacios
delante de argumentos, 33
'

espacios (cont.)
en nombres de controles y ttulos, 2 1, 43
en nombres de propiedades, 42
Esquema de secuencias de comandos, ventana, 417
EstaAblerto, funcin, 243, 244-246
Establecer la instruccin actual, orden, 159
etiquetas
en el cbdigo, 190
en formularios, 291
en informes, 357
postales, 224-231
EtlquetasPequeas, informe, 224
eventos
de control, 88-89
Enter, 89-90
Exit, 89-90, 92-93
GotFocus, 89-90
LOS~FOCUS,
89-90
NotInList, 181
de filtrado
ApplyFilter, 68, 89
Filter, 68-69, 89
definicin, 22
de formulario, 49, 88-89
\
Activate, 89-90
Close, 89
Current, 242
Deactivate, 89-90
Error, 174, 180
Load, 89
Open, 89
Unload, 89
de informe
Format, 349, 352
NoData, 348
Open, 348
Page, 348
Print, 349, 352, 359-360
de ratn
Click, 30, 89
DblClick, 89, 216
MouseDown, 89
MouseUp, 89
de regktro
AfterDelConfirm, 89
AterInsert, 89
AfterUpdate, 50, 51, 78, 89,94, 96
BeforeDelConfirm, 89
Beforelnsert, 89
BeforeUpdate, 89, 94, 102, 106-107
Current, 50-5 1, 89-90
Delete, 89
Dirty, 89, 94

de teclado
KeyDown, 89, 98-99
KeyPress, 89, 98
KeyUp, 89,98
onchange, 4 18
propiedades, 50
Examinador de objetos, 3 14-319
Excel. Vase Microsoft Excel
Execute, mtodo, 337, 339, 419
Exit, evento, 89-90, 92-93
Expand, control, 409-410
Explicit, opcin, 121
Exportar, orden, 422
expresiones de irispeccin, 158
expresiones, visualizacin de valores, 72
F1, tecla, 53
False, valor, 45
fecha, funciones de, 252
Filter, evento, 68-69, 89
Filter, propiedad, 71-72, 233,243
FilterOn, propiedad, 71-72,233
filtrado
avanzado, 67
con botn de orden, 2 1
en formularios e informes, 233, 240
por formulario, 67
por seleccin, 67
Filtro por formulario, botn, 68
Filtro por seleccin, botn, 67, 81
FlndFirst, mtodo, 2 13
flecha amarilla en el margen, 148
foco, 36
Follow, mtodo, 397
FollowHyperllnk, mtodo, 397-398
For Each, instruccin, 323-324
ForeColor, propiedad, 323-324
Form, objeto, 374
Form, propiedad, 321
Form-AfterUpdate, procedimiento
Contactos, formulario, 52
IntroducirPago, formulario, 254-255
FormApplyFilter, procedimiento, 82-83
FormBeforeUpdate, procedimiento
Contactos, formulano, 106-107, 109-110,
132-133, 151-157
IntroducirPago, formulario, 250
Form-Clo\e, procedimiento, 246
Form-C'urrcn/. procedimiento
Cont(~ctos,
formulario, 50-5 1, 65-66
Su>(r~ptorcs,lorinularitr, 243
k'orm-brror, procedimiento, 176, 178-179
o.

Form-Filter, procedimiento, 69-70


Form-KeyDown, procedimiento, 100, 187-188
Fom-Open, procedimiento, 252
Format, evento, 349, 352
F o r m ~coleccin,
,
73, 374
formularios. Vanse tambin los formularios
concretos; cuadros de dilogo
abiertos, comprobacin, 244-246
actualizacin, 254-255
almacenamiento, 23, 40
apertura, 23, 220-221, 240, 252, 270, 279
al inicio, 293
cierre, 89, 213, 216-218, 246
creados por el Asistente para bases de datos, 8-9
de inicio, 288-294, 310
de slo lectura, 40-41
desde consultas a mltiples tablas, 237
diagramas y grficos, 367-368
emergentes, 220,238-247
eventos, 49-52, 88-89
filtrado de datos, 240
inclusin de controles
botones de orden, 18-24,42-45
cuadros combinados, 59-60
cuadros de lista, 205-208
etiquetas, 29 1
grupos de opciones, 76-78
hipervnculos, 390-393
\
independientes, 204
modificacin de los registros que aparecen, 232-233
panel de control
cierre, 293
inclusin de objetos en, 16-17, 290-291
introduccin, 7
paso de uno a otro, 90
propiedades, 2 19,292
seleccin, 4 1
subformularios, 237
vista Diseo, comprobacin, 245
visualizacin de propiedades, 41
visualizacin en el Examinador de objetos, 3 15-316
FrontPage, 423
funciones
AbrirSitioAyuda, 398
AbrirSitioRelacionado, 399
Conjirm, 3 16
Confirmacin, 128-129, 132, 182, 184
creacin, 127, 134-135
CreateWordMemo, 370-37 1, 377-378
CStr, 378
Date, 228
DateSerzal, 252
de fecha, 228,252
S

DireccinCompleta, 136-138
EstaAbierto, 243, 244-246
HyperlinkPart, 399
IsNull, 97, 107
Month, 252
MsgBox, 109-110
NombreCompleto, 134-136
Nz, 244
prueba, 130
referencia, 136, 138, 139
SysCmd, 245
VerHistoriaPagos, 28 1-283
y propiedad Accin, 283
Year, 252
Function, instruccin, 118

gastos, bases de datos de, 5


Generador de consultas, ventana, 62
Generar (...), botn, 50
Generar evento, orden, 30, 50
globales
constantes, 122
mens, 275
visualizacin en el Examinador de objetos, 315317
GotFocus, evento, 89-90
GoToRecord, mtodo, 33
grficos, 367-368
GroupHeaderO-Print, procedimiento, 359
Grupo de opciones, herramienta, 76
grupos de opciones
creacin, 76-78
uso de valores, 78-80,229
grupos de trabajo, aplicaciones para, 310
Guardar, botn, 39
hipervnculos
a archivos u objetos, 396-397
en cdigo Visual Basic, 395-404
en pginas de acceso a datos, 413-415
en tablas, 39 1-392
inclusin en formularios, 390-393
introduccin, 387
modificacin, 400-404
HistorzaPagos, formulario, 238-247, 255-257
hojas de clculo, importacin de, 11
hojas de propiedades, visualizacin, 34,42, 62
Hourglass, mtodo, 332
HTML, documentos, 397,422
Hyperlink, objeto, 397
HyperlinkPart, funcin, 399

'

icono de lpiz, 54
iconos de aplicacin, 295
IdTipoContacto-NotlnList, procedimiento, 183- 185
If ...Then, instruccin, 70, 79
IIS (Internet Information Server), 422
imagen de mapa de bits como pantalla de inicio, 297-298
importacin de datos, 11-12,422
impresin, 23, 229
ImprimirEtiquetas-Click,procedimiento, 227-230
In, palabra clave, 324
independientes
controles, 64,77, 356
formularios, 204
Index, propiedad, 335
Informacin de pantalla, propiedad, 279
Informacin sobre datos, 167
informes. Vanse tambin los informes concretos
agrupacin de datos, 15, 348
apertura, 229
clculo de totales, 355-360
cambio de los registros que aparecen, 232-233
color de fondo alternativo, 349-351
controles independientes, 356
creacin, 15-16
creados por el Asistente para bases de datos, 8-9
desde consultas de tablas mltiples, 237
diagramas y grficos, 367-368
etiquetas, 357
eventos, 349
filtrado de datos, 223
impresin, 229, 362
inclusin en los formularios de panel de control, 16
nmero de pginas, 347
ocultamiento de campos, 352-354
ordenacin de datos, 15,233
propiedades, 349-355
Snapshot, formato, 422
vista previa, 16-17, 230, 346-348
visualizacin en el Examinador de objetos, 315-316
inicio
formularios de, 288-294, 3 11
opciones de, omisin, 291
pantalla de inicio, 298
Inicio, cuadro de dilogo, 275, 294-296
Inmediato, ventana
prueba de procedimientos, 125, 130, 138-139, 325
prueba de sintaxis, 321
visualizacin de valores o mensajes del cdigo, 158
visualizacin y ajuste de propiedades, 72-75
Insertar hipervnculo, botn, 390
Insertar registro, orden, 19
Inspeccin rpida, orden, 158
,
Inspeccin, ventana, 158

instalacin de los archivos de prcticas, xviii-xix


Instalacin, programas de, 301
interactivo, sistema de ayuda, xxii-xxiv, 53, 166,
318-319
Intercambio dinmico de datos (DDE), 368
Intemet Information Server (IIS), 422
Intemet Transfer, control, 422
Intemet. Vase pginas de acceso a datos; hipervnculos
interrogacin (i)
en la ventana Inmediato, 72, 130
icono de cuadros de mensaje, 110
interrupcin de procedimientos, 154, 167, 188
intranets, 385, 409
introduccin de pedidos, bases de datos, 5
IntroducirPago, formulasio, 248-257
I.sNull, funcin, 97, 107
Issues, base de datos
EditLink, formulario, 400-404
introduccin, 3 11
Issues, formulario (vase Issues, formulario)
Issues, informe (vase Issues, informe)
IssuesForReport, consulta, 406
Reasigna, pgina, 414-420
Reassigner, formulario (vase Reassigner, formulario)
Seguimiento de problemas, pgina, 406-415
Issues. formulario
CreateWordMemo, funcin, 370-371, 377
Editar hipervnculo, botn, 401
hipervnculos, 390-393
introduccin, 3 11
OperzOutlookContact, procedimiento, 380-383
Issues, informe
clculo de totales, 355-360
color de fondo alternativo, 349-350
ocultamiento de campos, 352-354
vista previa, 346-348, 351, 354-355, 360-361
ItemData, mtodo, 328, 335
ItemsSelected, coleccin, 327-328
JavaScript, 416
Jet, motor de base de datos, 329
KeyDown, evento, 89,98-100
KeyPress, evento, 89, 98
KeyUp, evento, 89, 98
Lenguaje estructurado de consulta (SQL), 339. 341
libro mayor, bases de datos de, 5
Limitar a la lista, propiedad, 181
1

$t

ListaO-AfierUpdate, procedimiento, 214


ListaO-DblClick, procedimiento, 2 15-216
Load, evento, 89
Locales, ventana, 155-156
Loop, instruccin, 375
LostFocus, evento, 89-90

macros, 23-24
marcos de objetos, 368
Mscara de entrada, propiedad, 101
MAYUS-tecla,
combinaciones, 98-99
.mdb, archivos, 330
Me
en ventana Locales, 156
palabra clave, 45
mens
acceso directo, 274
aceleradores de teclado, 268
anclaje, 272
como hipervnculos, 395-399
globales, 275
iconos, 27 1
inclusin en barra personalizada, 263-265
incorporacin de rdenes propias, 270-272
introduccin, 262
lneas de separacin de rdenes, 269
ocultamiento, 295
prevencin de cambios, 294
restablecimiento de predeterminados, 269
mtodos
AddNew, 184
BeginTrans, 334
Close, 213,230,293
CloseCurrentDatabase, 293
CornrnitTrans, 335
definicin, 32
Execute, 337, 339,419
FindFirst, 2 12
Follow, 398
FollowHyperlink, 398-399
GoToRecord, 33
Hourglass, 332
introduccin en el cdigo, 38
ItemData, 328, 335
Microsoft Outlook, 381 -382
Microsoft Word, 374, 378
MoveNext, 375
Open, 333-334
OpenCurrentDatabase, 384
OpenForrn, 28 1,402
OpenRecordset, 184
OpenReport, 227,229

Print, 158
Quit, 293
Refresh, 254, 257
Requery, 254,257
RollbackTrans, 335, 338
Seek, 331, 335
separacin con objetos, 32
SetFocus, 37, 39
TransferDatabase, 422
Update, 185, 33 1, 336
visualizacin en el Examinador de objetos, 315-316
Microsoft Access
Base de datos, ventana, 9-10, 294
bibliotecas de objetos, 315, 329-330
datos de otras aplicaciones, 11-12, 376, 379,421
Generador de consultas, ventana, 62
macros, 23-24
nuevas caractersticas, xviii
paso a Visual Basic, 30, 37-38
recursos en Intemet, xxiv
sistema de ayuda interactiva, xxii-xxiv
soporte tcnico, xxvi
terminacin, 293
versin de tiempo de ejecucin, 301
y Excel, 367, 383-384
Microsoft Data Engine (MSDE), 330
Microsoft Excel
creacin de documentos con Access, 367
importacin de archivos, 11
informacin devuelta a Access, 376-377
uso de objetos de Access en, 383-384
Microsoft FrontPage, 423
Microsof t Graph, 368
Microsoft Intemet Information Server (IIS), 422
Microsoft Office 2000 Developer, 30 1,425
Microsoft Office 9.0 Object Library, 284
Microsoft Office Data Source Control (MSODSC),
412,419
Microsoft Outlook, 367, 377, 379-383
Microsoft Press, xxii, xxvi
Microsoft Script Editor, 4 16-417
Microsoft SQL Server, 330
Microsoft Visual Basic
almacenamiento de cdigo, 23, 39
Automatizacin, 238-241
ayuda sobre sintaxis, 52, 53
bibliotecas de objetos (vase bibliotecas de objetos)
botones para ejecutar procedimientos, 281-283
bucles, 324, 375
Cdigo, ventana, 30, 32, 69, 147, 230
colecciones, 3 13-314
comentarios, 46
compilacin, 164-166, 2 16

Microsoft Visual Basic (cont.)


comprobacin ortogrfica, 121
constantes (vase constantes)
copia de cdigo, 51-52
depuracin, 72
ejecucin paso a paso, 148-154
etiquetas, 190
Examinador de objetos, 314-319
frente a macros, 23-24
hipervnculos, 395-404
Inmediato, ventana, 72-75
Inspeccin, ventana, 158
instrucciones condicionales, 70, 79
Locales, ventana, 155-156
manejo de errores, 34
mdulos, 30
objetos (vase objetos)
palabras clave (viase palabras clave)
Proyecto, ventana, 30, 331
proyectos, 30
puntos de interrupcin, 147, 152
Scripting Edition, 416-421
sistema de ayuda interactiva, xxiv, 53, 166, 31 8-319
texto en verde, 47
visualizacin de cdigo, 30-33
vuelta a Access, 35
y barras de rdenes, 283-284
Microsoft Word
biblioteca de objetos, 37 1
colecciones, objetos, mtodos y propiedades, 374,378
creacin de documentos con Access, 367,
370-375, 377-378 .
funciones, 377
hipervnculos a, 396-397
informacin devuelta a Access, 376-379
marcadores, 369, 374, 397
plantillas, 369
Modal, propiedad, 220
modelos de objeto. Vase bibliotecas de objetos
ModificarRegistro-Click, procedimiento, 44-47
mdulos
apertura, 131-132, 146, 151-152, 312 ,
denominacin, 125
de clases, 31
de formulario, 31, 119, 140-141
deinforme, 31, 140-141
estndar, 31, 119, 140-141
introduccin, 30-3 1, 119, 140-141
visualizacin en el Examinador de objetos, 315-316
Month, funcin, 252
MostrarMensaje, procedimiento, 124- 126, 179, 190
MouseDown, evento, 89
MouseUp, evento, 89

MoveLayout, propiedad, 362


MoveNext, mtodo, 375
MSDE (Microsoft Data Engine), 330
MsgBox, funcin, 109-110
MsgBox, instruccin, 52, 107, 125
MSODSC (Microsoft Office Data Source Control),
412,419
navegacin por los registros, 22
Negrita, botn, 61
Next, instruccin, 324
NextRecord, propiedad, 362
no igual (o),
83
No, valor, 45
NoData, evento, 348
Nombre-AfterUpdate, procedimiento, 96-97
NombreCompleto, funcin, 134-136
nombres
de controles, 21, 64
de mdulos, 125
de procedimientos de eventos, 44
de vanables, 110
frente a ttulos, 21
funcin que los devuelve completos, 134- 136
y divisin de bases de datos, 302
No se ha definido la variable, error, 164
NotInList, evento, 181
Nueva, botn, 5
nuevas caractersticas de Access 2000, xviii
Nuevo registro, botn, 11, 19
Null, valor, 82. Vase tambin IsNull, funcin; Nz,
funcin
Number, propiedad, 190
Nz, funcin, 244
Objeto, cuadro, 230
Objetos de acceso a datos (DAO), biblioteca
en el Examinador de objetos, 315
introduccin, 184, 328-330
referencias, 185
variable? tipo Recordset, 184, 212
objetos de Access, biblioteca, 3 14-3 15
objetos de datos de ActiveX (ADO), biblioteca
en pginas de acceso a datos, 416
introduccin, 3 15, 328-330
manejo de errores, 338
Recordset, objetos, 333
objetos
Appl~xztion,3 19, 368
CommundBar, 284
CommnndBurControl, 284
I ,.
,

':

objetos (cont.)
Connection, 330
CurrentProject. 334-339
DBEngine, 330
Debug, 158
definicin, 33
DoCrnd, 33,213,227,246,281
Err, 190
Form, 374
hiperenlaces a, 396
Hyperlink, 397
inclusin en aplicaciones, 14-16
Microsoft Outlook, 381
Microsoft Word, 374
MSODSC (Microsoft Office Data Source
Control), 412, 419
Recordser, 184,212, 333-334
referencias, 33, 320-323
visualizacin, 9, 3 13-319
Obtener datos externos, orden, 422
ocultamiento
de campos en informes, 352-354
de cuadros de dilogo, 224
de mens y barras de herramientas, 296
OLE (Vinculacin e incrustacin de objetos), 368
On Error GoTo, instruccin, 190, 193, 338
onchange, evento, 418
Open, evento, 89, 348
Open, mtodo, 333-334
OpenCurrentDatabase, mtodo, 384
OpenForm, mtodo, 381,402
OpenRecordset, mtodo, 184
OpenReport, mtodo, 227, 229-230
Option, instruccin, 121
ordenacin de datos
cadenas, 121
en cuadros combinados, 63
en cuadros de lista, 209-210
en informes, 15,233
Ordenar y agrupar, botn, 410
OrderBy, propiedad, 233
OrderByOn, propiedad, 233
Origen de la fila, propiedad, 62
Origen del control, propiedad, 135-136
Origen del registro, propiedad, 204
Outlook. V&se Microsoft Outlook
Page, evento, 348
pginas de acceso a datos
agrupacin de datos, 409-413
almacenamiento, 409
barra de navegacin, 410

cdigo HTML en, 4 12


comparticin, 409
creacin, 406-407
en Intemet Explorer, 420-421
formato, 408-409
hipervnculos, 4 13-415
introduccin de datos, 41 3
introduccin, 387-388
Objetos de datos ActiveX (ADO), 416
requisitos de cliente, 412
temas, 408
texto en, 408
VBScript, 416-421
Pginas de servidor activo, 422
pginas, nmero de, 347, 378
Pagos, tabla, 20 1-202
palabras clave. Vanse las palabras clave concretas
ayuda interactiva, xxiv, 53
definicin, 32
relleno automtico desde lista, 37-38
Panel de control principal, formulario, 290-294
panel de control, formularios de. Vase tambin
inicio, formularios de
creados por el Asistente para base de datos, 9
en la base de datos de suscripciones, 290-294
inclusin de objetos en, 16
introduccin, 6-7
pantalla de inicio, 298
parntesis, 137, 321
Paso a paso para salir, botn, 153
Paso a paso por initrucciones, botn, 148-149, 153
Paso a paso por procedimientos, 156
personalizados
barras de herramientas, 275-284, 294
barras de ttulo, 288, 294
iconos de la aplicacin, 295
mensajes de error, 178-179
mens, 263-275, 294, 395-399
Personalizar Barras de herramientas, orden, 263
Personalizar, cuadro de dilogo, 264-272, 277
Predeterminado, propiedad, 2 1 1
Print, evento, 349, 352, 359
Print, mtodo, 158
PrintSection, propiedad, 362
Private Sub, instruccin, 34
Private, palabra clave, 34
Problemas, base de datos. Vase Issues, base de datos
Problemas, formulario. Vase Issues, formulario
Problemas, informe. Vase Issues, informe
Procedimiento, cuadro, 69
procedimientos de eventos
comentarios, 46
creacin, 44

procedimientos de eventos (cont.)


definicin, 22-23
directrices para su uso, 140-141
edicin, 36-38
nombres, 44
visualizacin, 30-34
procedimientos. Vase tambin procedimientos de
evento; Sub, procedimientos
argumentos, 126
creacin, 123
de evento frente a generales, 118-1 19, 140- 141
definicin, 3 1
generales, 1 18-119
parada, 153-154, 168, 188
Private Sub y End Sub, instrucciones, 34
pblicos frente a privados, 140-141
Programacin de recursos, bases de datos de, 5
Propiedades de barra de herramientas, cuadro de dilogo, 265
propiedades
Activecontrol, 321
AfterUpdate, 5 1, 95, 214
ajuste de valores, 45, 73-74, 92, 323-325
AllowAdditions, 239
AllowDeletions, 239, 249
AllowEdits, 42, 45, 239, 249
AutoCenter, 219, 292
Autocomprimible, 353-354
BackColor, 92, 351
Barra de herramientas, 276-277
Barras de desplazamiento, 219,292
Barras de mens contextuales, 274
Bookmark, 213
BorderStyle, 219, 292
Cancelar, 2 18
Connection, 334, 339,419
Count, 32 1,332
CurrentView, 245
DefaultValue, 94, 253
Entrada de datos, 249
Informacin de pantalla, 279
Origen de la fila, 62
Origen del control, 135-136
Origen del registro, 204
Predeterminado, 21 1
RecordsetType, 188
Regla de validacin, 101, 103
Requerido, 102- 103
Tamao de pgina de datos, 41 1,413
Texto de validacin, 104
Tipo, 274
Ttulo, 35, 408
Valor, 4 19

Visible, 224, 352-355


Vistas permitidas, 292
visualizacin en el Examinador de ob.jetos, 3 16-317
Propiedades, botn, 43
Propiedades, orden, 35
proteccin por contrasea, 296
Proyecto, ventana, 30-3 1, 33 1
Proyectos de datos de Access (.adp), archivos, 330
proyectos, 30
prueba de procedimientos, 125, 130, 138- 139,325
Public, instruccin, 140, 3 13
Public, palabra clave, 123, 128, 136, 141
punto (.)
entre objetos y funciones, 138
entre objetos y mtodos, 33, 37
entre objetos y propiedades, 212
punto rojo en el margen, 147
puntos de interrupcin, 147, 152
puntos suspensivos (...), 271
QBE (Consultas por ejemplo), rejilla, 63
Quit, mtodo, 293
Quitar filtro, botn, 83
Reasigna, pgina, 41 3-421
ReassignAZl-Click, procedimiento, 338-340
Reassigner, formulario
apertura, 326
IssueList, cuadro de lista, 327-328
Reasignar seleccionados, botn, 329, 331-336
Reasignar todos, botn, 329, 337-340
ReassignSelected-Click, procedimiento, 331-336
RecordCount, propiedad, 37 1
Recordset, objeto, 184, 212, 333-334
RecordsetClone, propiedad, 212
RecordsetType, propiedad, 188
recursos en Intemet
ayuda interactiva de Microsoft, xxvi
Microsoft Press, xxii, xxvi-xxvii
para desarrolladores de Access, xxiv, 425
referencias, 33, 185, 320-323
Referencias, orden, 185, 284, 315, 329, 371-372
Refresh, mtodo, 254, 257
registros
bsqueda, 22,58
en informes, 232-233
inclusin, 10, 19
paso de uno a otro, 22, 90
Regla de validaci6n, propiedad, 101-102. 103
Relacioncs. hot6n. 201
.
.
Requerido, propiedad, 102-103

Requery, mtodo, 255,257


Restablecer, orden, 154
Resume Next, instruccin, 194
Resume, instruccin, 190, 193
retorno de carro, carcter, 138
RollbackTrans, mtodo, 335, 338

salto de lnea, carcter, 137


sangrado de lneas, 97
seccin de declaraciones, 12 1, 139- 140
secuencias de comandos, 4 15-42 1
Seek, mtodo, 33 1, 335
Se esperaba: expresin, error, 161
Seguimiento de problemas, pgina, 406-415
seguridad, 296
Seleccin mltiple, propiedad, 326
seleccin
de cdigo, 167
de formularios y propiedader de formulario, 41
Select Case, instruccin, 160, 228
selector de registro, 54
Selectores de registro, propiedad, 219, 292
servidor, base de datos de, 299
Set, instruccin, 184
SetFocus, mtodo, 38, 39
S, valor, 45
signo de exclamacin (i)
icono de cuadros de mensaje, 107
separador de palabras clave, 74, 185, 212, 245
signo igual (=), 45, 137,360
signo ms (+), xxiv
sincronizacin
de controles independientes con datos de formulario, 64-66
de formularios emergentes y datos de formulario, 242
sintaxis, ayuda sobre, 52, 53
sintaxis, errores de, 163
sistema de ayuda, xxiii-xxiv, 52, 166, 318-319
Snapshot, formato, 422
solapa, controles de, 225-226
slo lectura
bases de datos, 187-188
formularios, 40-41
soporte interactivo de Microsoft, xxvi
soporte tcnico
para Access, xxvi
para el libro y los archivos de prcticas, xxii, xxvi
SQL (Lenguaje estructurado de consulta), 339, 341
SQL Server, 330
Static, palabra clave, 140
Sub, procedimientos, 1 18, 123- 125
Subdireccin de hipervnculo, propiedad, 396

subformularios, 237
subrayada, letra. Vase aceleradores de teclado
subrayado (-)
carcter de continuacin de lnea, 137, 339
en nombres de procedimientos, 44
Suscriptores, base de datos de
DilogoEtiquetas, formulario, 225-230
DilogoIrARegistro, formulario, 204-223
divisin, 300-302
EtiquetasPequeas, informe, 224
HistoriaPagos, formulario, 238-247, 255-257
IntroducirPago, formulario, 248-257
Pagos, tabla, 201-202
Panel de control principal, formulario, 290-294
VerHistoriaPagos, funcin, 281-283
visualizacin de tablas, 201 :202
Suscriptores, formulario
barras de herramientas personalizadas, 275-284
bsqueda y modificacin de registros, 210-213
Form-Close, procedimiento, 246
Form-Current, procedimiento, 243
Historial de pagos, botn, 239-241, 255
HistoriaPagos, formulario, 255-256
introduccin, 202
Introducir pago, botn, 248-250
Ir a registro, botn, 220-221
mens personalizados, 263-275
Suscriptores, tabla, 201-202
Switchboard Items, tabla, 9
SysCmd, funcin, 245
tablas. Vanse tambin las tablas concretas
creadas por el Asistente para base de datos, 8
hipervnculos en, 391-392
importacin de datos, 12-13
referencias a, 333
relaciones, 201-202
tabulacin, caracteres de, 98
Tamao de pgina de datos, propiedad, 41 1,413
teclado, eventos de, 89, 98-99
temas, 408
texto azul subrayado, 388
texto blanco sobre rojo, 147
Texto de validacin, propiedad, 104
texto en cursiva, xxv
texto en rojo, 161
texto en verde, 47
tiempo de ejecucin
errores de, 163
versin de, 301
Tiempo y facturacin, bases de datos de, 5
Tipo, propiedad, 274

Tipos de contacto, formulario, 11


Tipos de contacto, tabla, 181, 182
Ttulo, propiedad, 35,408
ttiilos frente a nombres, 21
totales, clculo de, 355-360
transacciones, 334
TransferDatabase, mtodo, 422
True, valor, 45
WpeOf, palabra clave, 324

unidades de red, 299


unin de cadenas, 63
Unload, evento, 89
uno a muchos, relacin, 201
Update, mtodo, 185, 331, 336

i
b
I

'

"

validacin, datos de, 101-112, 182


Valor, propiedad, 4 19
valores
asignacin
a campos, 94-95
a controles independientes, 64, 253, 360, 419
a propiedades, 45, 73-74, 92, 323-325
a variables, 110
visualizacin, 7 1-72
variables
asignacin de valores, 110
comprobacin ortogrfica, 121
Database, 184
de objeto, 184, 324
declaracin, 110, 121, 139-140
denominacin, 110
estticas, 140
pblicas frente a privadas, 140
Recordset, 184
referencias a formularios, 245
visualizacin de valores, 156, 167
VBA (Viiual Basic para Aplicaciones), vase
Microsoft Visual Basic
vbBlue, constante, 325
vbcancel, conitante, 111
vbExclamation, constante, 107
vbNewLine, constante, 138

vbOkCancel, constante, 110


vbQuestion, constante, 110
VBScript, 416-421
Ventana Base de datos, botn, 9
Ventana Inmediato, botn, 148
Ventana Locales, botn, 155
ventanas
Base de datos, 9, 294
Cdigo, 30, 32, 69, 147, 230
Esquema de la secuencia de comandos, 417
flotantes frente a ancladas, 155
generador de consultas, 62
Inmediato (vase inmediato, ventana)
Inspeccin, 158
Locales, 155-156
paso de una a otra, 90
proyecto, 30-3 1, 331
Ver Microsoft Access, botn, 35
Ver mdulo completo, 32
Ver procedimiento, 32-33
VerHistoriaPagos, funcin, 281-283
VerRegistro-Click, procedimiento, 21 1-214, 215
Vinculacin e incrustacin de objetos (OLE), 368
Visible, propiedad, 224, 352-353
Vista de pgina, botn, 412
Vista Diseo, botn, 19
Vista Diseo, comprobacin, 245
vista Formulario y edicin de mdulos, 39
Vista Formulario, botn, 22
Vista preliminar, botn, 354-355
vista previa de informes, 16-17, 230, 346-347
Vista previa de la pgina Web, orden, 420
Vistas permitidas, propiedad, 292
Visual Basic. Vase Microsoft Visual Basic
Web, pginas, 422. Vase tambin pginas de acceso a
datos
WebBrowser, control, 422
With, instruccin, 373
Word. Vase Microsoft Word
Workspaces, coleccin, 330
Year, funcin, 252