MANUALES
TRUCOS ACCESS
Documentar sus programas Access
Access proporciona un entorno
visual de desarrollo con el que se pueden generar potentes aplicaciones. El
problema surge cuando el desarrollo realizado adquiere un volumen considerable.
¿Cómo controlar y gestionar la cantidad de formularios, informes, macros, etc
que se han ido generando? Una opción muy interesante y poco conocida de Access
es el documentador. En el menú Herramientas, opción Analizar, se pueden acceder
al documentador que permite obtener información completa y organizada de los
objetos que constituyen la basa de datos, de manera que se genera un inventario
de todos y cada uno de los componentes y sus propiedades.
Seguridad
mediante activación y desactivación de controles
Access proporciona un control de
seguridad para grupos de usuarios que permite limitar la funcionalidad de cada
usuario individual. Cuando un usuario intenta realizar alguna acción no
autorizada Access visualiza un mensaje de aviso. Otra manera más elegante de
gestionar la seguridad puede ser simplemente no activar los controles a los que
un usuario no tiene acceso. Además, la asignación de permisos de Access se
realiza por tabla, formulario, consulta, mientras que la rutina que le
proponemos establece los permisos para controles individuales.
Para poder generar este tipo de
control de seguridad sobre una base de datos debemos seguir los siguientes
pasos:
1º. Crear una tabla en la que
figuren los usuarios y los grupos de usuarios como, por ejemplo, los campos
usuarios y grupo.
2º. Generar un formulario sobre
dicha tabla llamado, por ejemplo, usuarios.
3º. Crear una macro autoexe que
habra el formulario en modo oculto con la condición [usuario]=CurrentUser() para
que el registro actual del formulario sea el del usuario activo.
Supongamos que tenemos un
formulario llamado form1 con botones de imprimir, insertar y editar registros
llamados, respectivamente, boton1, boton2 y boton3 y queremos que un grupo de
usuarios llamado grupo1 sólo tenga acceso al botón de imprimir. Para desactivar
los botones de insertar y editar debemos usar la propiedad OnOpen del formulario
y añadiendo el siguiente código:
if condition: [Forms].[usuarios].[grupo]="grupo1"
setvalue: [Forms].[form1].[boton1].[Enabled] Yes [Forms].[form1].[boton2].[Enabled]
No [Forms].[form1].[boton3].[Enabled] No
Incrementar y
decrementar fechas pulsando + y -
Una característica interesante para
añadir a los programas Access es permitir que el usuario pueda incrementar y
decrementar fechas pulsando las teclas + y - . Para proporcionar esta
característica se debe añadir el siguiente código al evento KeyDown de los
campos de tipo fecha que existan en el formulario:
Select Case KeyCode Case 107, 187
Screen.ActiveControl =
Screen.ActiveControl + 1
SendKeys "{Esc}"
Case 109, 189
Screen.ActiveControl =
Screen.ActiveControl - 1
SendKeys "{Esc}"
End Select
Mensajes personalizados
en la barra de estado
El siguiente código permite
visualizar mensajes de su elección en la barra de estado de Access cuando el
ratón se mueve sobre un objeto de un formulario (texto, botones, etc.). Las dos
subrutinas deben estar en un módulo de manera que sean accesibles globalmente:
Global StatusCalled Global
CurrentStatusMsg Sub StatusBarMsg (StatusMsg)
If StatusMsg <> CurrentStatusMsg
Then
Dim ss As Variant
ss =
SysCmd(SYSCMD_SETSTATUS,StatusMsg)
StatusCalled = True
CurrentStatusMsg = StatusMsg
End If
End Sub Sub ClearStatusBarMsg ()
If StatusCalled Then
Dim ss As Variant ss =
SysCmd(SYSCMD_CLEARSTATUS) StatusCalled = False CurrentStatusMsg = " "
End If
End Sub
El siguiente código se debe añadir
al evento mouse move del control sobre el que deseemos visualizar un mensaje en
la barra de estado:
Sub CmdButton_MouseMove (Button As
Integer, Shift As integer, x As Single, Y As Single)
StatusBarMsg "Su mensaje
personalizado"
End Sub
El siguiente código se debe añadir
al fondo del formulario para que se borre el mensaje cuando el ratón se mueva
fuera del objeto:
Sub Detail0_MouseMove (Button As
Integer, Shift As Integer, X As Single, Y As Single)
ClearStatusBarMsg
End Sub
Informes a medida
Entre los controles que
proporciona Access para la impresión de informes hay tres propiedades lógicas
que permiten un sencillo y potente manejo sobre el resultado que deseemos
obtener:
MoveLayout especifica si
Microsoft Access debe moverse a la siguiente posición de impresión de la página.
NextRecord especifica si una
sección debería avanzar al siguiente registro.
PrintSection especifica si
una sección debería ser impresa en la página.
Por defecto todas están
establecidas a verdadero (True), pero en combinación pueden producir efectos
como el que a continuación se describe, insertar una línea en blanco cada diez
registros:
En el procedimiento
declaraciones del informe hay que introducir el siguiente código:
Option Explicit Dim
fBlankNext As Integer Dim intline As Integer
En el evento OnFormat del
encabezado de página introducir:
intline = 0 fBlankNext =
False blank
En el evento OnPrint de la
sección de detalle introducir:
If PrintCount = 1 Then
intline = intline + 1 If fBlankNext Then
Me.PrintSection = False
Me.NextRecord = False fBlankNext = False
Else
Me.PrintSection = True
Me.NextRecord = True fBlankNext = (intLine Mod 10 = 0)
End If
Funciones en
Access que devuelven más de un valor (I)
Las funciones en Access sólo
pueden tener un valor de retorno, no obstante existen varias maneras de obtener
varios valores de una misma función.
La primera forma se pude
definir en el argot informático como multi-retorno a pedales pero no por ello es
menos efectiva que otras más sofisticadas.
Consiste en ir pidiendo los
valores en sucesivas llamadas a la misma función utilizando un parámetro para
seleccionar el retorno pedido. Tiene el inconveniente de que los valores
devueltos (retornados) siempre deben ser del mismo tipo:
Function MultiRetorno(Valor
As Integer) As String
Select Case Valor Case 1
MultiRetorno = "Primer
retorno"
Case2
MultiRetorno = "Segundo
retorno"
Case Else
MultiRetorno = "Error"
End Select
End Function
Funciones en
Access que devuelven más de un valor (II)
Como continuación al anterior
truco, presentamos una manera más refinada de obtener varios valores de retorno
de una función en Access. La alternativa es pasar a la función tantos argumentos
como valores queremos que retorne y hacer que la función los modifuque. En este
caso, se tiene la ventaja de poder retornar valores de distintos tipos:
Function MultiRetorno(R1 as
integer, R2 as string)
R1 = 1 R2 = "Segundo valor de
retorno"
End Function
Funciones en
Access que devuelven más de un valor (III)
Para finalizar esta serie de
trucos presentamos las forma más elegante (y sofisticada) de obtener varios
valores de retorno de una misma función en Access. El lenguaje VBA de Access
permite que una función devuelva una estructura de valores. en el siguiente
ejemplo se muestra cómo definir una estructura y utilizarla:
Public Type Multivalor
R1 As Integer R2 As String
End type
Una vez definido el nuevo
tipo, se puede utilizar como valor de retorno de una función:
Function MultiRetorno() As
MultiValor
MultiRetorno.R1 = 950
MultiRetorno.R2 = "Segundo valor devuelto"
End Function
Con el uso de estructuras
queda definitivamente resuelto el problema de las funciones que devuelven más de
un valor.
Funcionalidad de la
propiedad Tag en Access
La propiedad Tag (información
adicional) de los controles de formularios e informes está pensada para ser
manejada directamente por los programadores, es decir, Access no lo maneja en
modo alguno. No obstante, un uso adecuado de dicha propiedad puede facilitar
muchos aspectos de la programación. En el siguiente ejemplo se muestra el manejo
de dicha propiedad. supongamos un formulario que dispone de dos grupos de
controles de manera que cuando un grupo está activo el otro no puede ser visible
y viceversa. una manera de realizarlo sería introducir en el evento OnOpen el
siguiente código:
If Opcion=1 Then
Me!Control1.visible = True
Me!Control2.visible = True Me!Control3.visible = False Me!Control4.visible =
False
Else
Me!Control1.visible = False
Me!Control2.visible = False Me!Control3.visible = True Me!Control4.visible =
True
End If
Este código funcionaría a la
perfección, pero si se modifica el formulario y se introducen más controles se
deberá cambiar dicho código. Sin embargo, si se introduce en la propiedad tag de
cada control bien Opcion1 o bien Opcion2, dependiendo de a que conjunto de
controles pertenezca, el código resultante será el siguiente, y nótese que no
habría que modificarlo:
Dim Frm as Form Frm = Me If
Opcion=1 Then
For I=0 mto Frm.count -1
If Frm(I).tag = "Opcion1"
Then
Frm(I).visible = True
If Frm(I).tag = "Opcion2"
Then
Frm(I).visible = False
Next I
Else
For I=0 to Frm.count -1
If Frm(I).tag = "Opcion1"
Then
Frm(I).visible = False
If Frm(I).tag = "Opcion2"
Then
Frm(I).visible = True
Next I
End If
Indicador de progreso en Access
Una manera de acceder a un
indicador de progreso desde Access es hacer una llamada a sysCmd, no obstante,
se puede crear uno usando dos etiquetas de manera sencilla y con la ventaja de
mentener un mayor control sobre él. Veámos cómo:
1º. Crear una etiqueta
transparente con estilo hundido. La llamaremos Fondo. 2º. Crear otra etiqueta de
idéntica altura que la anterior, con anchura cero y con bordes transparentes.
Situarla justo alineada con la primera y enviarla al fondo. La llamaremos
Indicador. 3º. Situar el siguiente código en un módulo del formulario e ir
llamándolo pasando como parámetros el progreso actual y el progreso total:
Sub Actualiza (Actual, Total)
Dim Porcentaje as Single
Porcentaje = Actual / Total Me!Fondo.Caption = Int(Porcentaje * 100) & "%"
Me!Indicador.Width=CLng(Me!Fondo.Width * Porcentaje) Select Case Porcentaje Case
Is < .15
Me!Indicador.BackColor = 255
Case Is < .50
Me!Indicador.BackColor =
65535
Case Else
Me!Indicador.BackColor =
65280
End Select Me.Repaint
End Sub
Acelerar las consultas
Cuando sea posible, restrinja
sus consultas a campos indexados. El dispositivo Rushmore de Access los maneja
50 ó 60 veces más rápido que los campos sin indexar. Además, cuando realiza una
comparación con el operador Como, no utilice una expresión que empiece por *,
porque Rushmore optimizará Como G*., pero no Como *G.P. Y recuerde que aunque
Access soporta hasta 32 índices por tabla, los índices que añaden o editan datos
en un campo pueden relentizar las operaciones.
Crear accesos directos
Abra Access
Cargue su base de datos
Encoja la ventana de Access
haciendo clic en el botón Maximizar/Restaurar de la esquina superior derecha.
Haga clic en la ficha
Informes del Explorador de la Base de Datos
Seleccione un informe y
arrástrelo desde el Explorador de la Base de Datos a su Escritorio
Numerar nuevos campos
consecutivamente
Si planea hacer una réplica de su
base de datos, necesitará usar un campo contador como clave primaria de la
tabla. He aquí cómo crear un campo que numere consecutivamente cada nuevo
registro que añada a la tabla.
En la ventana de Diseño de Tabla
seleccione Autonumérico de la lista desplegable Tipo de dato.
Bajo Propiedades del campo,
seleccione Entero largo de la lista desplegable Tamaño del campo.
Teclee Incrementalmente en la línea
Nuevos valores.
Proporcione un nombre, como ID de
empleado, para la línea Título y teclee Sí (sin duplicados) en la línea
Indexado.
Sincronizar réplicas de una
base de datos
Usar Access para crear y
sincronizar réplicas de una base de datos es tan fácil como utilizar el maletín
de Windows 95. Pero al contrario que el maletín, Access proporciona potentes
herramientas (así como detallada documentación en línea) para resolver
conflictos entre diferentes versiones de una base de datos Access. He aquí cómo
hacerlo.
Si la base de datos tiene una
contraseña, desactívela seleccionando Seguridad del menú Herramientas, y active
Anular contraseña de la base de datos. A continuación, teclee la Contraseña
actual en el diálogo Anular la contraseña establecida para la base datos y haga
clic en Aceptar.
Del menú principal Herramientas,
seleccione Réplica y después Crear réplica. Esto convierte su base de datos
existente en Maestra de Diseño, lo que significa que es la única copia cuya
estructura puede usted cambiar. Puede hacer tantas réplicas como necesite y
sincronizarlas utilizando la opción Sincronizar del menú Replicado.
Editar el estampado de la hora
Después de crear un informe con el
Asistente para informes, vaya a la ventana de Diseño del informe, haga clic con
el botón derecho en la sentencia "=ahora()" en el pie de la página; éste es el
comando que estampa la hora en su informe. Entonces, en la hoja de propiedades
del pie de la página, teclee su hora personalizada y texto en la línea contraria
Formato y cierre la hoja de propiedades.
Abrir formularios con macros
Este método abreviado consiste en
crear una macro que abre un formulario, informe, consulta, tabla, etc.
En la ventana de la base datos,
haga clic en la ficha de Macro y seleccione Nuevo.
En el menú Ventana, escoja Mosaico.
Haga clic en la ficha Informes de
la ventana de la base de datos y arrastre el informe que quiere que la macro
abra hasta una fila de la columna Acción de la ventana Macro.
Cierre la ventana, haga clic en Sí
para guardar la macro, y dele un nombre.
Añadir un botón de automarcado
Si alguna vez ha necesitado llamar
a sus clientes mientras está usando sus registros en la base de datos, he aquí
cómo:
Desde la ventana Diseño del
formulario, haga clic sobre el icono del asistente de botones de comando en la
caja de herramientas.
Seleccione Otros en la ventana
CategoríasAutomarcador en la ventana Acciones.
Haga clic en Siguiente
Elija una imagen o texto para el
botón y haga clic en Finalizar.
Cambie al modo Formulario y pruebe
el bot¢n.
Ponga el cursor en su campo de
número de teléfono del formulario.
Haga clic en el botón que acaba de
crear y, cuando el diálogo de Marcado telefónico automático aparezca, elija
Aceptar.
Cuando suene el teléfono,
descuelgue y haga clic en el botón de hablar en la ventana de diálogo de Marcado
telefónico automático.
Crear un cuadro
combinado con una lista desplegable
Primero, haga clic con el botón
derecho en el cuadro combinado mientras el formulario está abierto en la ventana
Diseñar. Seleccione Propiedades para abrir la hoja de propiedades de la caja y
haga clic en la fila correspondiente al evento a Al recibir enfoque. Seleccione
Procedimiento de evento de la lista desplegable, después haga clic en el botón
Generar a la derecha de la fila llamada Al recibir enfoque. En la línea en
blanco entre la línea superior e inferior, teclee el comando SendKeys "{F4}".
Crear un
formulario principal unido a un subformulario
¿Necesita ver sus datos a vista de
pájaro? He aquí cómo crear un formulario resumen que proporcione la imagen
principal, así como un subformulario con detalles que pudiera necesitar ver.
Relacione las tablas del formulario
principal y del subformulario, escogiendo Relaciones del menú principal de
Herramientas.
Seleccione Mostrar tabla.
Añada las tablas del formulario y
subformulario al espacio de trabajo Relaciones, seleccionándolas de la lista
Mostrar tabla.
Haga clic en Añadir.
Arrastre el campo primario en
negrita de la tabla del formulario principal al campo del mismo nombre en la
tabla del subformulario.
Haga clic en Crear en el diálogo
Relaciones.
Cierre la ventana y salve la nueva
relación.
Ejecute el asistente de
formularios.
En la primera pantalla escoja las
tablas del formulario y subformulario especificando qué campos se deben mostrar
en los dos formularios.
Haga clic en Siguiente y el
asistente le preguntará cómo quiere ver los datos. Asegúrese de seleccionar el
botón de radio Formulario con subformulario(s).
Escoja un formato para los datos y
un estilo general y escoja un nombre para sus nuevos formularios.
Imprimir el registro actual
Imprimir el registro actual
no debería ser tan pesado. Y no lo será una vez que añada este botón a sus
formularios. Ya no tendrá que merodear con el ratón por los menús Editar y
Archivo o por la opción Registros seleccionados en el cuadro de diálogo
Imprimir.
Abra el formulario y escoja
Diseño del formulario del menú Ver. Asegúrese de presionar el botón de control
de asistentes en la caja de herramientas.
Haga clic sobre el botón
comando en la caja de herramientas.
Cuando haga clic en el lugar
en el que quiere el nuevo botón, el asistente del botón de comando empezará a
correr. En la lista Categorías del cuadro de diálogo del asistente, haga clic
sobre Operaciones con registros.
En la lista Acción, haga clic
sobre Imprimir registro.
Pulse el botón Siguiente y
añada texto o una imagen al botón.
Haga clic sobre finalizar y
después escoja Formulario del menú Ver.
Pruebe su nuevo botón.
Prevenir duplicados
Aunque Access le diga, al
introducir datos en un campo clave principal en un nuevo registro, que ya existe
en el campo clave principal de otro registro (como por ejemplo, ID de cliente)
avisa del error después de que ya se ha producido. Nuestra macro le informa de
la duplicidad al principio, de forma que no pierda tiempo introduciendo el nuevo
registro.
Haga clic en la ficha macro
de la ventana de la Base de datos.
Escoja Nuevo.
Haga clic en los botones
Nombres de macro y Condiciones en la barra de herramientas principal para
mostrar estas columnas en la ventana macro.
Proporcione un nombre en la
columna Nombre de la macro.
En la columna Condición,
teclee lo siguiente:
DLookup("[CustomerID]",
"[Customer2]", "[CustomerID] = Form.[CustomerID]")Is Not Null
En la columna Acción de la
macro, seleccione la ventana Acción, haga clic sobre la flecha y escoja
CuadroMsj de la lista desplegable.
En la fila Mensaje, escriba
el mensaje de error de ID de cliente duplicado, y autorice el mensaje.
En la fila 2 de la columna
Acción de la macro, seleccione CancelarEvento.
Salga de la ventana macro y
haga clic en la ficha Formularios en la ventana de la Base de datos.
Abra el formulario que quiera
modificar en el modo Diseñar. Haga clic con el botón derecho en el cuadro de
texto del campo de la clave principal y seleccione Propiedades del menú
desplegable.
Haga clic en la fila de la
derecha de Antes de actualizar y seleccione su macro de la lista desplegable
resultante.
Trasládese al formulario y
pruebe su nueva macro.
Encriptar su base de datos
Primero, cierre todas las
bases de datos, y desde el menú Herramientas, escoja Seguridad.A continuación
Codificar/Descodificar base de datos. Especifique una base de datos para
encriptar y proporcione un nombre distinto del original para la versión
codificada.
Solucionar problemas con Access
Revise la base de datos
Soluciones que viene con Access. Ésta base de datos proporciona instrucciones
paso a paso para resolver multitud de problemas comunes.
Navegar a través de los
informes de Access
Access puede crear largos y
sofisticados informes completados con resúmenes y cálculos. Si lo convierte en
HTML, el asistente rompe estos grandes bloques de datos en múltiples documentos
HTML que sean más fáciles de ver.
Desafortunadamente se
perderán las uniones entre documentos si utiliza plantillas creadas por usted
(este problema no ocurre con las plantillas por defecto de Access). Para
resolver el problema añada estas líneas a su plantilla, debajo de la etiqueta :
<A HREF="<!AccessTemplate_FirstPage>">First</A><br>
<A HREF="<!AccessTemplate_PreviousPage>">Previous</A>
<A HREF="<!AccessTemplate_NextPage>">Next</A>
<A HREF="<!AccessTemplate_LastPage>">Last</A>
Personaliza tu Acces 97
Si tienes hecha una
aplicación que empleas asiduamente, lo más habitual es haber creado un acceso
directo que apunte al nombre.mdb (o nombre.mde) de nuestra aplicación,
simplemente para ahorrarnos abrirla dentro del mismo access. Mediante las
propiedades de inicio de la base de datos, se puede cambiar tanto el título como
el icono de la aplicación, obteniendo así una cierta similitud con cualquier
otro programa realizado con lenguajes de programación más sofisticados, como
sería Visual Basic, Visual C++ o cualquier otro compilador de Windows que se nos
ocurra. Asímismo, nos independizamos un poco de lo que sería el Access en sí
para conseguir un resultado mucho más profesional.
No obstante, aún queda un
pequeño detalle que nos delata: no es otro que la pantalla de inicio que muestra
el Access cuando arranca (esa en la que pone Microsoft Access 97). Si queremos
que Microsoft Access muestre un cuadro que nosotros hayamos diseñado, con el
logo de nuestra empresa o el nombre de nuestra aplicación, por ejemplo,
simplemente tenemos que crear un BMP con el mismo nombre que el nombre.mdb y
ubicarlo en el mismo directorio.
Por otro lado en el acceso
directo al (nombre.mdb), tenemos que especificar como directorio, el mismo en el
que se encuentre nuestra aplicación. Así, cuando se inicie ese MDB, aparecerá
nuestra imagen y, de esta forma, habremos conseguido un resultado mucho más
personal y que, aparentemente, no se diferencia de cualquier programa comercial.
Título centrado en Access
En más de una ocasión habrás
querido centrar un título de un informe de Access. Esto se puede realizar
seleccionando el control y posicionándolo en el centro del documento, pero este
método requiere bastantes pruebas y mucha paciencia.
Otra opción es la de utilizar
la herramienta de alineación para conseguir nuestro objetivo, pero
lamentablemente este centra el título dentro del control, no entre los márgenes
derecho e izquierdo de lapágina que vamos a imprimir posteriormente.
Este truco se basa en hacer
el control del mismo ancho que el propio informe. Para conseguirlo debemos
situar la esquina superior izquierda del mencionado control en el márgen
izquierdo de la página y ampliar el tamaño del control hasta el extremo
contrario de la misma. Entonces, escribimos nuestro título y lo centramos con
las herramientas convencionales de alineación.
|