Sei sulla pagina 1di 37

TRUCOS ACCESS

trucos access: Evitar pasar al siguiente registro de un formulario al pulsar


el tabulador en el ultimo campo editable

En la propiedad Ciclo del formulario, Access coloca por defecto el valor


Todos los registros. Esto habria que cambiarlo al valor Registro activo, con
lo cual el usuario no pasara de registro a no ser que pulse el boton
correspondiente de la barra de estado.

trucos access: Evitar los mensajes de confirmacion en las consultas de


actualizacion

Al ejecutar la consulta aparece por defecto un mensaje para confirmar la


actualizacion de datos, pero se puede obviar eligiendo
Herramientas/Opciones, y dentro de la ficha Modificar/Buscar, desmarcar
la casilla Consultas de accion que hay dentro del apartado Confirmar.
El resultado es que todos los precios de la tabla original se veran
modificados de un plumazo.
Sin embargo, cuando se ejecuta la consulta desde un formulario, queda
mas profesional si no se muestran esos mensajes. Para ello, se puede
aadir la siguiente linea de codigo justo antes de las que se hayan
generado para el boton:
Dcmd.SetWarnings False
De esta forma, la consulta se ejecuta sin pedir confirmaciones. No
obstante, es recomendable volver a activar las confirmaciones despues de
la ejecucion de esas consultas mediante esta otra linea de codigo:
Dcmd.SetWarnings True

trucos access: Evitar datos duplicados en el mismo campo

Aunque Access diga, al introducir datos en un campo clave principal en un


nuevo registro, que ya existe en el campo clave principal de otro registro,
avisa del error despues de que ya se ha producido, obligando a introducir
todos los campos del registro duplicado hasta el final. Sin embargo, existe
un procedimiento mediante el cual Access puede avisar de la duplicidad
nada mas introducir el dato.
Lo primero es asegurarse de que el campo a comprobar esta indexado y es
clave principal. Supongamos una base de datos de pacientes que ingresan
en un hospital y el objetivo es detectar que no se repita el dato introducido
en el campo NumHistoria.

Abrir el formulario en vista Diseo, elegir Ver/Codigo e incluir en el


apartado General/Declaraciones (General a la izquierda y Declaraciones a
la derecha) el siguiente codigo:
Dim BaseDatos as DataBase
Dim Pacientes as Recordset
Con ello se define que van a utilizarse dos objetos DAO o de acceso a
datos: una base de datos y un recordset y asegurando que seran visibles
en todos los procedimientos del formulario.
En el evento Al cargar del formulario incluir estas lineas de codigo:
Set BaseDatos = CurrentDB()
Set Pacientes =
BaseDatos.OpenRecordset("PacientesIngresados",dbOpenTable)
La primera linea asigna la base de datos actual a la variable BaseDatos, la
segunda asigna a la variable Pacientes los registros existentes en la tabla
Pacientes Ingresados de la base de datos BaseDatos, y la abre de tipo
tabla, es decir, se va a poder leer de ella por indice, que sera el que se
indica con la siguiente instruccion que debe ir a continuacion de las dos
anteriores:
Pacientes.Index = "PrimaryKey"
En el evento Antes de actualizar de la variable NumHistoria incluir:
Sub NumHistoria_BeforeUpdate (Cancel as integer)
Pacientes.Seek "=", NumHistoria
If Not Pacientes.NoMatch then
Msgbox "Num. de historia ya existente.",48
Cancel = True
Exit Sub
End If
End Sub
La instruccion que contiene Seek (que es un metodo que solo se puede
utilizar con los Recordset abiertos con dbOpenTable), lo que hace es
intentar encontrar en la tabla Pacientes alguno con el numero de historia
igual a la variable NumHistoria, y va a buscar en numeros de historia
porque al cargar el formulario ya sabe que el indice iba a ser la clave
principal, que hemos supuesto que va por Numero de Historia.

trucos access: Evitar que se ejecuten las opciones de inicio

Cuando existe una macro llamada Autoexec, Access la ejecuta


automaticamente al abrirse el archivo de la base de datos. En todas las
versiones de Access se puede evitar su ejecucion pulsando la tecla
MAYUSCULAS durante el proceso de apertura del archivo (se exceptua el
procedimiento especial que se comenta en el truco n 12).
Desde Access 97 se puede hacer uso en la linea de comandos de Access de
un nuevo parametro llamado /NOSTARTUP que tambien impide la
ejecucion de la macro Autoexec, asi como de todas aquellas opciones de
inicio que se hayan especificado al elegir Herramientas/Inicio. Por
ejemplo, para abrir una base de datos con este parametro, la linea de
comando de Access quedaria asi:
msaccess.exe /nostartup "c:\bases\basedato.mdb"

trucos access: Evitar la aparicion del menu contextual

Crear una nueva barra de herramientas personalizada y despues elegir


Herramientas/Inicio consignar en el apartado Barra de menu contextual la
recien creada. Asi, al pulsar el boton derecho del raton, se desplegara la
barra de herramientas que se haya establecido.

trucos access: Evitar error por falsa linea de comandos

Access en todas sus versiones, incluida la 2000, muestra un error de linea


de comandos erronea cuando se hace un doble clic para abrir un archivo
MDB que se encuentra en un directorio que contiene espacios en su
nombre y tambien cuando el nombre del archivo contiene espacios. La
unica forma de evitarlo es eliminar esos espacios. Como consejo, lo mejor
es evitar el uso de nombres largos para carpetas y archivos de bases de
datos, ya que el ejecutable msaccess.exe no permite nombres largos de
archivos en su linea de comandos. Por ejemplo, la siguiente linea no
funcionara:
msaccess.exe basedatos.mdb
Sin embargo, si funcionara esta otra:
msaccess.exe baseda~1.mdb

trucos access: Abrir un formulario en el mismo registro que mostraba


cuando se cerro la ultima vez teniendo en cuenta al usuario y al PC que
utilizo

Como ampliacion de lo anterior, aqui se trata el mismo asunto pero

teniendo en cuenta el nombre del usuario y de su PC, lo cual puede ser util
en entornos corporativos. Todo el procedimiento es practicamente similar.
Se aaden ciertas lineas al codigo de los eventos y lo realmente nuevo es
la adicion de un modulo para definir la funcion que recoge el nombre del
PC. Se ha incluido en un modulo y no en el codigo del formulario porque de
esta forma podra ser utilizado desde cualquier formulario y no solo desde
uno. Tambien la tabla auxiliar tendra ahora mas campos.
Los pasos a seguir son:
Crear una tabla auxiliar (que aqui vamos a llamar Acceso) para almacenar
el ultimo registro visualizado en el formulario. Contendra dos campos, uno
(que llamaremos CampoClave para guardar el nombre del campo clave
principal de la tabla asociada al formulario y otro para guardar el valor de
dicha clave:
CAMPOS TIPO
CampoClave Texto (Clave principal)
Usuario Texto (Clave principal)
Ordenador Texto (Clave principal)
Valor Texto
El campo CampoClave se ha descrito como de tipo texto pero puede ser
tambien de tipo numerico o autonumerico. Ello dependera del tipo de
campo que sea el campo clave principal de la tabla asociada al formulario.
En este ejemplo suponemos que ese campo es de tipo texto y que su
nombre es ClaveFormul. En cada formulario deberemos tomar nota del
nombre de ese campo y de su tipo.
Aadir el siguiente codigo al evento Al descargar del formulario deseado:
Private Sub Form_Unload(Cancel As Integer)
Dim Valor As String
If IsNull(Me![ClaveFormul]) Then
' Cambiar [ClaveFormul] por el nombre del campo clave principal
Valor = "acNewRec"
Else
Valor = Me![ClaveFormul]
' Cambiar [ClaveFormul] por el nombre del campo clave principal
End If
Set rst = db.OpenRecordset(Sql, dbOpenDynaset)
If rst.RecordCount = 0 Then

rst.AddNew
rst![Usuario] = Application.CurrentUser
rst![Ordenador] = NombrePC
rst![CampoClave] = Me.Name
rst![Valor] = Valor
rst.Update
Else
rst.Edit
rst![Valor] = Valor
rst.Update
End If
rst.Close
End Sub
Aadir el siguiente codigo al evento Al cargar del formulario, el cual
efectua una busqueda en la tabla Acceso del campo clave del registro
abierto, toma el valor de la clave y se coloca en el:
Private Sub Form_Load()
Set db = CurrentDb
Sql = "SELECT * FROM Acceso WHERE "
Sql = Sql & "Usuario = '" & Application.CurrentUser
Sql = Sql & "' AND Ordenador = '" & NombrePC
Sql = Sql & "' AND CampoClave = '" & Me.Name & "'"
Set rst = db.OpenRecordset(Sql, dbOpenSnapshot)
If rst.RecordCount > 0 Then
If Not IsNull(rst![Valor]) Then
If rst!Valor <> "acNewRec" Then
Set rstFrm = Me.RecordsetClone
' Si el campo clave principal ("ClaveFormul" en este ejemplo) es de tipo
texto,
' la instruccion a incluir seria esta:

rstFrm.FindFirst "[ClaveFormul] = '" & rst![Valor] & "'"


' Cambiar [ClaveFormul] por el nombre del campo clave principal
' Si el campo clave principal ("ClaveFormul" en este ejemplo) es de tipo
' numerico, la instruccion seria:
' rstFrm.FindFirst "[ClaveFormul] = " & rst![Valor]
' Cambiar [ClaveFormul] por el nombre del campo clave principal
If Not rstFrm.NoMatch Then
Me.Bookmark = rstFrm.Bookmark
End If
rstFrm.Close
Else
DoCmd.GoToRecord , , acNewRec
End If
End If
End If
rst.Close
End Sub
No hay que olvidar que no solo hay que incluir el codigo, sino asegurarnos
que en la hoja de propiedades del formulario quedan marcados ambos
eventos: Al cargar y Al descargar con [Procedimiento de evento].
Estando abierto el formulario en modo de diseo, pulsar el boton Codigo y
aadir en la seccion Declaraciones el siguiente codigo:
Option Compare Database
Option Explicit
Dim db As Database
Dim rst As Recordset
Dim rstFrm As Recordset
Dim Sql As String

Crear un modulo con un nombre cualquiera, que llevara este codigo:

Option Compare Database


Option Explicit
Declare Function GetComputerName Lib "kernel32" Alias
"GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Function NombrePC() As String
Dim Buffer As String
Dim Size As Long
Dim X As Long
Buffer = Space(255)
Size = 255
'Asigna Nombre Maquina
X = GetComputerName(Buffer, Size)
NombrePC = Left$(Buffer, Size)
End Function

trucos access: Abrir un formulario en el mismo registro que mostraba


cuando se cerro la ultima vez

No existe una opcion por defecto, pero se puede aadir un pequeo codigo
para que se guarde el ultimo registro visualizado y Access vuelva a el al ser
abierto el mismo formulario.
Los pasos a seguir son:
1) Crear una tabla auxiliar (que aqui vamos a llamar Acceso) para
almacenar el ultimo registro visualizado en el formulario. Contendra dos
campos, uno (que llamaremos CampoClave para guardar el nombre del
campo clave principal de la tabla asociada al formulario y otro para
guardar el valor de dicha clave:
CAMPOS TIPO
CampoClave Texto (Clave principal)
Valor Texto
El campo CampoClave se ha descrito como de tipo texto pero puede ser
tambien de tipo numerico o autonumerico. Ello dependera del tipo de
campo que sea el campo clave principal de la tabla asociada al formulario.
En este ejemplo suponemos que ese campo es de tipo texto y que su
nombre es ClaveFormul. En cada formulario deberemos tomar nota del
nombre de ese campo y de su tipo.

2) Aadir el siguiente codigo al evento Al descargar del formulario


deseado:
Private Sub Form_Unload(Cancel As Integer)
Dim Valor As String
If IsNull(Me![ClaveFormul]) Then
' Cambiar [ClaveFormul] por el nombre del campo clave principal
Valor = "acNewRec"
Else
Valor = Me![ClaveFormul]
' Cambiar [ClaveFormul] por el nombre del campo clave principal
End If
Set rst = db.OpenRecordset(Sql, dbOpenDynaset)
If rst.RecordCount = 0 Then
rst.AddNew
rst![CampoClave] = Me.Name
rst![Valor] = Valor
rst.Update
Else
rst.Edit
rst![Valor] = Valor
rst.Update
End If
rst.Close
End Sub
3) Aadir el siguiente codigo al evento Al cargar del formulario, el cual
efectua una busqueda en la tabla Acceso del campo clave del registro
abierto, toma el valor de la clave y se coloca en el:
Private Sub Form_Load()
Set db = CurrentDb
Sql = "SELECT * FROM Acceso WHERE CampoClave = '" & Me.Name & "'"

Set rst = db.OpenRecordset(Sql, dbOpenSnapshot)


If rst.RecordCount > 0 Then
If Not IsNull(rst![Valor]) Then
If rst!Valor <> "acNewRec" Then
Set rstFrm = Me.RecordsetClone
' Si el campo clave principal ("ClaveFormul" en este ejemplo) es de tipo
texto,
' la instruccion a incluir seria esta:
rstFrm.FindFirst "[ClaveFormul] = '" & rst![Valor] & "'"
' Cambiar [ClaveFormul] por el nombre del campo clave principal
' Si el campo clave principal ("ClaveFormul" en este ejemplo) es de tipo
' numerico, la instruccion seria:
' rstFrm.FindFirst "[ClaveFormul] = " & rst![Valor]
' Cambiar [ClaveFormul] por el nombre del campo clave principal
If Not rstFrm.NoMatch Then
Me.Bookmark = rstFrm.Bookmark
End If
rstFrm.Close
Else
DoCmd.GoToRecord , , acNewRec
End If
End If
End If
rst.Close
End Sub
No hay que olvidar que no solo hay que incluir el codigo, sino asegurarnos
que en la hoja de propiedades del formulario quedan marcados ambos
eventos: Al cargar y Al descargar con [Procedimiento de evento].
4) Estando abierto el formulario en modo de diseo, pulsar el boton
Codigo y aadir en la seccion Declaraciones el siguiente codigo:

Option Compare Database


Option Explicit
Dim db As Database
Dim rst As Recordset
Dim rstFrm As Recordset
Dim Sql As String
Las dos primeras lineas ya estaran escritas al acceder a esa seccion. Lo
mismo ocurre con las lineas primera y ultima del codigo de los eventos.
Simplemente hay que procurar no repetirlas.
En el numero siguiente se explica como ampliar este truco para que
reconozca al usuario y a su PC.

trucos access: Abrir una tabla en modo de solo lectura

Puede ocurrir que desde un formulario venga bien en un determinado


momento abrir una de las tablas para examinar su contenido. Si se da ese
caso, lo mejor es abrirla en modo de solo lectura a fin de evitar
modificaciones indeseadas. Supongamos que se desea presentar la tabla al
pulsar sobre un boton. Para ello, se crea el boton con la herramienta al
efecto y, justo en el momento de aparecer la primera pantalla del
asistente, cancelar el proceso. De esta forma, el boton queda creado
aunque sin codigo asociado. Acceder, por tanto, a las propiedades del
boton y, dentro del evento Al hacer clic, insertar esta linea de codigo:
DoCmd.OpenTable "Nombre_tabla", , acReadOnly
donde Nombre_tabla representa el nombre de la tabla que se desea abrir.

trucos access: Abrir un formulario automaticamente en el primer registro


vacio despues del ultimo

En el evento Al cargar incluir este codigo:


DoCmd.GoToRecord , , acNewRec

trucos access: Abrir una base de datos distinta desde un boton de un


formulario

En el formulario abierto en modo de diseo, pulsar el boton que crea


botones de la barra de herramientas. Si se inicia el asistente, pulsar
Cancelar. Quedara a la vista en el formulario un boton con un nombre de la
forma Comando0 (si es el primer boton creado en el formulario).
Acceder a sus propiedades haciendo doble clic sobre el y, dentro de la ficha
Eventos, pulsar sobre el evento Al hacer clic, eligiendo del menu
desplegable Procedimiento de evento.
Pulsar sobre el diminuto boton de los 3 puntos que hay a su derecha e
incluir las siguientes lineas antes de la instruccion "End Sub":
Dim stAppName As String
stAppName = "msaccess.exe x:\ruta\Base.mdb"
Call Shell(stAppName, 1)
DoCmd.Quit
Ahora solo basta reemplazar la cadena de caracteres entrecomillada en la
2 linea para que apunte al directorio y archivo MDB deseados. Las
comillas hay que mantenerlas.
Hay que hacer notar que la ruta de acceso al archivo MDB ha de
especificarse con su nombre corto de MS-DOS; de lo contrario, no se
abrira.

trucos access: Forzar a que se guarden los datos introducidos en un


formulario en el caso de pulsar un boton definido por el usuario en el
mismo formulario

Al rellenar un dato en un formulario y dejar el cursor en el campo que se


acaba de modificar para pulsar un boton para imprimir o para cerrar (o lo
para lo que sea), los cambios hechos se pierden. Se soluciona pasando el

cursor a otro campo pero interesa que sea automatico. Para ello, hay que
incluir el siguiente codigo en el evento Al hacer clic de cada boton:
DoCmd.RunCommand acCmdSaveRecord
Esto solo funciona en Access 97 o posterior. En Access 7.0 la sintaxis seria:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
acMenuVer70

trucos access: Forzar la aparicion de los datos de un registro existente al


introducir uno de los datos

Supongamos que al introducir un DNI queremos que aparezcan los demas


datos de una persona, si es que existe en la base de datos y, si no, poder
introducir sus datos. Para ello hay que crear 2 tablas y despues
relacionarlas entre si. Una de ellas contendra solo el campo del DNI y la
otra contendra todos los datos (incluido el DNI tambien).
Para introducir datos hay que crear un formulario con origen en la primera
tabla (la mas pequea) que incluya el campo del DNI referente a esa
primera tabla y ademas un subformulario con origen en la segunda tabla
que presentara el resto de los datos excepto el del DNI, que se debe
establecer como No visible en sus propiedades.

trucos access: Forzar a que el valor introducido en un campo del formulario


se quede como predeterminado para subsiguientes registros

Estando en modo de diseo del formulario, pulsar el boton de Codigo (o


elegir Ver/Codigo). Si no se ha introducido nunca codigo, aparecera solo
una o dos lineas con algo asi:
Option Compare Database
Teclear en la linea siguiente:
Dim CampoTrabajo As String
Con ello se define un campo de trabajo para todo el formulario llamado
CampoTrabajo y de tipo caracter; tambien se podria utilizar Integer, Long,
Real, etc. ya que debe ser igual a como este definido en la tabla de la base
de datos.
Luego ir a la ventana de propiedades del Formulario, buscar el evento
Despues de actualizar, elegir Procedimiento de evento, pulsar despues
sobre el boton de los tres puntos, con lo cual se abre de nuevo la ventana
de codigo, en este caso con tres lineas como las siguientes:
Private Sub Form_AfterUpdate()

End Sub
Entre ellas se tecleara:
CampoTrabajo = [Campo]
suponiendo que el campo que se desea que salga predeterminado sea
Campo. Buscar despues la propiedad Antes de insertar, seleccionar
Procedimiento de evento, pulsar el boton de los tres puntos y aparecera:
Private Sub Form_BeforeInsert(Cancel As Integer)
End Sub
Teclear entre ellas:
[Campo] = CampoTrabajo
Si este campo no es el primero del registro, cuando se introduzca el primer
caracter en el siguiente registro aparecera el valor en el campo deseado.
Nota:
Puede aparecer un problema al operar con el primer registro de la tabla,
para lo cual hay dos posibilidades:
1) Permitir a [campo] longitud cero en sus propiedades dentro de la tabla.
2) En el codigo del evento Antes de insertar, en lugar de poner
[campo]=CampoTrabajo
poner:
If Len(CampoTrabajo) >0 Then
[campo] = CampoTrabajo
End If

trucos access: Forzar a que un formulario se abra mostrando el ultimo


registro introducido

Al abrir un formulario, siempre se abre por defecto mostrando el primer


registro introducido. Para forzar que se abrir con el ultimo, acceder a sus
propiedades y en la seccion Al cargar, elegir Procedimiento de evento,
luego pulsar sobre el boton de los puntos suspensivos e insertar el
siguiente codigo:
DoCmd.GoToRecord , , acLast

trucos access: Aadir todos los campos a la vez de una tabla a la


cuadricula de una consulta

Cuando se va a crear una consulta, siempre aparece un cuadro que incluye


los campos de las tablas elegidas. Si se pretenden coger todos los campos,
el metodo mas eficaz es hacer doble clic sobre el titulo de la tabla y
quedaran seleccionados todos los campos que tenga. Luego basta un solo
arrastre para que todos los campos se integren en la cuadricula de la
consulta.

trucos access: Aadir un boton de automarcado

Si alguna vez se necesita llamar a alguien por telefono mientras se esta


una base de datos, he aqui como. Desde el modo Diseo del formulario,
hacer clic sobre el icono del asistente de botones de comando en la caja de
herramientas. Seleccionar Otros en la ventana Categorias y Automarcador
en la ventana Acciones. Hacer clic en Siguiente, elegir una imagen o texto
para el boton y hacer clic en finalizar, despues cambiar al modo Formulario
y probar el boton. Poner el cursor en el campo de numero de telefono del
formulario, hacer clic en el boton recien creado, y cuando el dialogo de
Marcado telefonico automatico aparezca, elegir Aceptar.
Cuando suene el telefono, descolgar y hacer clic en el boton de hablar en la
ventana de dialogo de Marcado telefonico automatico.

trucos access: Aadir un nuevo elemento a un cuadro combinado cuyo


origen de la fila es una tabla no actualizable

Muchas veces se crean tablas para las que no nos molestamos en hacer
formularios de mantenimiento, como pueden ser tablas de paises o de
codigos postales. Sin embargo, utilizamos estas tablas en cuadros
combinados, con lo que existe la posibilidad de que el usuario quiera
aadir un nuevo elemento a la lista. Mediante el siguiente procedimiento
se aade un nuevo pais a la tabla de paises sin necesidad de abrir un
formulario de altas. En la propiedad Al no estar en la lista del cuadro
combinado insertar el siguiente codigo:
Sub id_pais_notinlist(newdata as string,response as integer)
dim mensaje as string,titulo as string,respuesta as integer
dim db as database,r as recordset,codigo as byte
mensaje = "El elemento no se encuentra en la lista. Desea aadirlo?"
titulo = "Nuevo Pais"
respuesta = msgbox(mensaje,36,titulo)
if respuesta = 6 then 'Si se desea dar de alta el nuevo elemento
set db = currentdb()

set r = db.openrecordset(Tpais)
codigo = ult_idpais() + 1 'Funcion que obtiene el ultimo codigo de pais de
la tabla
r.addnew
r![id_pais] = codigo
r![nombre] = newdata
r.update
r.close
origen = "Select id_pais,nombre From Tpais" 'Se actualiza el origen de la
fila
me![id_pais].rowsource = origen
me![id_pais].requery
me![id_pais] = codigo 'Se asigna el nuevo codigo
else
me![id_pais] = null
docmd.gotocontrol "id_pais"
end if
response = data_errcontinue
End Sub

La funcion ult_idpais() podria ser de la siguiente forma:


Private Function ult_idpais() As Byte
Dim db As Database
Dim ssTmp As Recordset
Dim sSQL As String
Dim yCodigo As Byte
sSQL = "SELECT Max(id_pais) AS UltCodigo FROM Tpais"
Set db = currentdb()
Set ssTmp = db.OpenRecordset(sSQL, dbOpenSnapshot, dbForwardOnly)

yCodigo = ssTmp!UltCodigo
ssTmp.Close
Set ssTmp = Nothing
Set db = Nothing
Return yCodigo
End Function

trucos access: Cambiar el valor inicial de un contador

* Crear una tabla que contenga el campo autonumerico pero no introducir


ningun numero.
* Crear una segunda tabla, con un campo de tipo numerico y tipo Entero
Largo y que tenga el mismo nombre que el de tipo contador de la primera
tabla.
* Introducir un registro en la segunda tabla que sea un numero menor del
que se desea que sea el inicial.
* Crear un consulta para agregar datos a una tabla, a fin de agregar el dato
de la segunda tabla a la primera.
* Ejecutar la consulta y ya se tendra un contador desde el valor deseado.

trucos access: Cambiar la plantilla de formularios por defecto

Si se suele utilizar siempre un formato diferente al que Access proporciona


para los formularios, se puede configurar para que aparezca siempre una
plantilla personalizada. Para ello, una vez creado el formato de formulario,
guardarlo con cualquier nombre dentro de una base de datos cualquiera y
elegir Herramientas/Opciones. Dentro de la ficha Formularios/Informes
introducir el nombre dado a la plantilla para reemplazar a la que viene por
defecto y aceptar los cambios. Las siguientes veces, Access se iniciara con
la nueva plantilla para formularios.

trucos access: Cambiar el formato de una tabla

Abrir una tabla en modo normal y elegir Ver/Barras de


herramientas/Formato (hoja de datos). En la nueva barra apareceran
botones para cambiar el tipo de letra y su tamao, asignar color para el
fondo de la tabla, para los caracteres y para las lineas, asi como elegir el
formato para las lineas de la estructura, pudiendo hacer que desaparezcan

las lineas de la cuadricula o solo hacer desaparecer las lineas horizontales,


etc.

trucos access: Crear un formulario principal unido a un subformulario

Aqui se muestra la manera de crear un formulario resumen que


proporcione la imagen principal, asi como un subformulario con detalles:
* Relacionar las tablas del formulario principal y del subformulario,
escogiendo Relaciones del menu principal de Herramientas; entonces
seleccionar Mostrar tabla.
* Aadir las tablas del formulario y subformulario al espacio de trabajo
Relaciones, seleccionandolas de la lista Mostrar tabla; despues hacer clic
en Aadir.
* Arrastrar el campo primario en negrita de la tabla del formulario
principal al campo del mismo nombre en la tabla del subformulario.
* Hacer clic en Crear en el dialogo Relaciones, cerrar la ventana y guardar
la nueva relacion.
* Ejecutar el asistente de formularios. En la primera pantalla escoger las
tablas del formulario y subformulario especificando que campos se deben
mostrar en los dos formularios.
* Hacer clic en Siguiente, y el asistente le preguntara como quiere ver los
datos.
* Asegurarse de seleccionar el boton de radio Formulario con
subformulario.
* Elegir un formato para los datos y un estilo general.
* Elegir un nombre para los nuevos formularios.

trucos access: Crear una suma continua en un formulario

Para crear una suma continua en un formulario, la tabla sobre la que esta
basada debe contener al menos un campo autonumerico (en las versiones
1.x o 2.0, un campo contador). Si la tabla no contiene ese campo, se puede
abrir la tabla en modo diseo y crear el campo.
El siguiente ejemplo utiliza una tabla que contiene tres campos: Contador
(Campo Autonumerico), Cantidad (Campo numerico) y Total (Campo
Numerico). La tabla se llama Prueba.
Crear un formulario nuevo basado en la tabla Prueba.
Formulario: Formulario1

-----------------------OrigendelRegistro: Prueba
Cuadro de Texto: Contador
Origen del Control: Contador
Cuadro de Texto: Cantidad
Origen del Control: Cantidad
Cuadro de Texto: Total
Origen del control: =Dsum("[Cantidad]";"Prueba";"[Contador]<=Forms!
[Formulario1]![Contador]")

La funcion Dsum calcula la suma del campo Cantidad en todos los registros
que tengan el contador menor o igual que el registro activo. Esta es la
razon por la que se necesita un campo autonumerico.

trucos access: Crear accesos directos de objetos de la base de datos

Desde la ventana de la Base de datos, seleccionar una tabla, consulta,


formulario o informe y arrastrarlo al escritorio de Windows o a una carpeta
del Explorador si estuviera abierto, o bien a una ventana de iconos. Se
creara un acceso directo a ese objeto de la base de datos y se podra
ejecutar directamente.

trucos access: Calcular una edad en aos

Supongamos que existe una tabla con los campos FechaNacimiento y


FechaHoy, ambos de tipo Fecha. El campo FechaHoy puede automatizarse
asignando como valor predeterminado el valor Fecha(), con lo cual siempre
aparecera en el formulario la fecha actual del sistema.
En el formulario se crea un cuadro de texto nuevo para que muestre la
edad. Para ello, acceder a sus propiedades y, dentro de la ficha Todas,
consignar los siguientes datos en las propiedades que se indican:
Origen del control: =([FechaHoy]-[FechaNacimiento])/365,24-0,5
Formato: Fijo
Lugares decimales: 0

trucos access: Calcular la letra del NIF a partir de un DNI

Esta funcion recibira una cadena con un valor y la devolvera aadiendo al


final la letra correspondiente. Si la cadena recibida tiene signos de
puntuacion, los quitara; realmente solo deja los numeros. Para ello, crear
un modulo nuevo incluyendo todo el codigo siguiente tal cual:
Function LetraNif(strA As String) As String
Dim cCADENA As String
Dim cNUMEROS As String
Dim strT As String, strB As String
Dim a#, NIF#, b#, c#
Dim i As Integer
LetraNif = ""
cNUMEROS = "0123456789"
cCADENA = "TRWAGMYFPDXBNJZSQVHLCKE"
strT = Trim$(strA)
If Len(strT) = 0 Then Exit Function
strB = ""
'---Dejar solo los numeros...
For i = 1 To Len(strA)
If InStr(1, cNUMEROS, Mid$(strA, i, 1)) Then
strB = strB + Mid$(strA, i, 1)
End If
Next
strA = strB
a# = 0
NIF# = Val(strA)
Do
b# = Int(NIF# / 24)
c# = NIF# - (24 * b#)

a# = a# + c#
NIF# = b#
Loop While b# <> 0
b# = Int(a# / 23)
c# = a# - (23 * b#)
LetraNif = Mid$(cCADENA, c# + 1, 1)
End Function

Una vez introducido el codigo, la funcion puede ser llamada desde


cualquier otro procedimiento. Para comprobar que funciona se puede
elegir la opcion Ver/Ventana de depuracion (en la version 2000 hay que
elegir Ver/Ventana Inmediato), en la que se pueden introducir comandos
para ser ejecutados de modo inmediato haciendo uso de la funcion recien
creada. En la parte inferior de dicha ventana ejecutar la siguiente orden:
Print LetraNIF ("1623532")
Pulsando INTRO aparecera la letra P, que es la correspondiente a ese DNI.
Se puede en esta misma ventana probar con cualquier otro DNI.
En cualquier procedimiento se puede ya incorporar una sentencia tal como
esta:
Letra = LetraNIF (VariableDNI)
VariableDNI es el nombre de una variable, campo de una tabla o cuadro de
texto, que tenga un DNI para el que se desee calcular la letra.
Letra es el nombre una variable o un campo de una tabla o un cuadro de
texto de un formulario o informe en el que deseas incluir la letra calculada.
LetraNIF es el nombre dado a la funcion que calcula el NIF.
Al cerrar el modulo, contestar afirmativamente a la pregunta de guardar
cambios y asignar un nombre cualquiera para el.
Ahora vamos a incluir la funcion en un formulario. Supongamos que en un
formulario hay un cuadro de texto llamado DNI cuyo Origen del control
puede ser un campo de una tabla, o no. Si se desea que una vez
introducido por el usuario un DNI en dicho campo se le aada la letra
calculada, se podria incluir en el evento Despues de actualizar del cuadro
de texto DNI un procedimiento de evento, que debe quedar asi:
Private Sub DNI_AfterUpdate ()
DNI = DNI & "-" & LetraNIF (DNI)
End Sub

Tambien se podria querer tener la letra en un cuadro de texto separado


llamado Letra, y en ese caso hay que sustituir la sentencia por:
Letra = LetraNIF (DNI)
pero siempre dentro del evento Despues de actualizar del cuadro de texto
en el que se introduce el DNI.

trucos access: Controlar el ciclo de la tecla TAB en formularios

Por defecto, la tecla TAB va pasando de campo en campo y cuando llega al


ultimo, pasa al primer campo del registro siguiente. Esto se puede cambiar
mediante la propiedad Ciclo, que por defecto se establece con el valor
Todos los registros, pero admite otros dos valores: Registro activo (se
queda en el mismo registro sin pasar al siguiente, con lo cual el cursor
pasa de nuevo al primer campo) y Pagina activa (se queda en la misma
pagina del mismo registro).

trucos access: Controlar que formulario se abre por defecto al abrir una
base de datos

En las versiones Access 7.0 y Access 97 se puede hacer de 2 formas,


mientras que en Access 2.0 y anteriores de una.
Versiones 2.0 y anteriores: Al abrir una base de datos se ejecuta
automaticamente la macro Autoexec, si es que existe. En la macro se
puede especificar el formulario que se presenta al abrir la Base de Datos.
Versiones 7.0 y posteriores: Ademas de seguir funcionando la macro
Autoexec, en el menu Herramientas, existe la opcion Inicio, que abre un
cuadro de dialogo en el que se definen una serie de valores iniciales, entre
ellos el formulario que se presenta inicialmente, asi como poder dar un
nombre descriptivo a la base de datos para que tenga la apariencia de ser
un ejecutable independiente.

trucos access: Desactivar lineas de macro

Si se desea desactivar una linea de ejecucion de una macro, basta con


especificar la palabra False en la columna Condicion. Esto puede ser
interesante para propositos de pruebas y de depuracion de errores, ya que
se pueden desactivar lineas sin necesidad de eliminarlas.
Si existiera ya una condicion previa, se puede introducir False and al
principio, con lo cual todo el resto queda anulado.

Tablas

trucos access: Desactivar el raton

Algunas veces se puede desear que el usuario no pueda utilizar el raton al


estar dentro de un formulario; para ello se puede utilizar esta funcion, la
cual se basa en la utilizacion de las llamadas librerias dinamicas (DLL)
desde los procedimientos de VBA. Windows tiene cientos de librerias de
este tipo, al conjunto de todas ellas se les conoce como API (Application
Programming Interface). Estas funciones nos permitiran manipular las
ventanas de Windows entre otras muchas mas cosas. Seguir estos pasos:
* Colocar la siguiente declaracion de funcion en la seccion Declaraciones
de un modulo:
Declare Function Show Cursor Lib "User32" ( ByVal FSHOW As Integer ) As
Integer
* Crear un boton de comando que al ser pulsado (evento Al hacer clic)
ejecute la funcion Sub Comando_Click().
Dim RetVal
RetVal = ShowCursor ( 0 )
Msgbox " Ha desaparecido el raton "
RetVal = ShowCursor ( 1 )
End Sub

trucos access: Imprimir las relaciones entre tablas

En las primeras versiones de Access no habia mas remedio que capturar la


pantalla con un programa grafico o haciendo uso de la tecla ImprPant.
Desde la version 97 y a la vista de la ventana de relaciones, se puede elegir
Archivo/Imprimir relaciones, lo cual generara un informe
automaticamente con el contenido de la ventana que incluso de puede
guardar.

trucos access: Imprimir el registro actual

* Imprimir el registro actual no deberia ser tan pesado. Y no lo sera una

vez que se aada este boton a los formularios. Ya no habra que merodear
con el raton por los menus Editar y Archivo o por la opcion Registros
seleccionados en el cuadro de dialogo Imprimir.
* Abrir el formulario en modo de diseo.
* Asegurarse de pulsar el boton de control de asistentes en la caja de
herramientas.
* Hacer clic sobre el boton comando en la caja de herramientas.
* Al pulsar en el lugar en el que quiere el nuevo boton, el asistente del
boton de comando empezara a ejecutarse.
* En la lista Categorias del cuadro de dialogo del asistente, hacer clic sobre
Operaciones con registros, y despues en la lista Accion.
* Hacer clic sobre Imprimir registro.
* Pulsar el boton Siguiente y aada texto o una imagen al boton.
* Hacer clic sobre Finalizar y despues elegir Formulario del menu Ver y
probar su nuevo boton

trucos access: Numeracion automatica dependiente de un cambio de ao

En muchos libros de registro de entrada de empresas, departamentos y


organismos publicos se lleva una numeracion consecutiva que comienza
con el n 1 cada ao. Si en Access se crea un campo autonumerico para
este cometido, al pasar a un nuevo ao, el contador del autonumerico
seguira adelante indefinidamente. Si lo que se desea conseguir es que el
contador vuelva al valor 1 de modo automatico, hay que seguir el
procedimiento que aqui se explica.
Supongamos una tabla llamada Expedientes en la que, entre otros, existen
los campos Aoactual, que controla el ao en que estamos, y Numexp, que
controla el campo contador del que hablamos. Como estos campos se van a
calcular automaticamente, en el formulario de entrada de datos no seran
punto de tabulacion. Por esta razon vamos a tener en cuenta el primer
campo que reciba el enfoque del cursor para introducir un dato. En las
propiedades de este campo, ir al evento Al recibir el enfoque para incluir
unas lineas de codigo como las siguientes:
[Aoactual] = Year(Date)
If [Numexp] = Null OR [Numexp] = 0 Then
[Numexp] = DCount(\"[Numexp]\", \"Expedientes\", \"[Aoactual] =\"
& [Aoactual]) + 1
End If
If [Numexp] = 0 Then
[Numexp] = DCount("[Numexp]", "Expedientes") + 1

End If

Lo unico que hay que hacer es reemplazar los nombres de los campos (que
figuran entre corchetes) y el nombre de la tabla por los que correspondan.

trucos access: Numeracion correlativa automatica sin campo autonumerico

Supongamos una tabla llamada Clientes con varios campos, de los cuales
uno es numerico entero largo llamado NumCliente, estableciendo que el
campo sea indexado sin duplicados o bien clave principal.
En el evento Al activar registro del formulario de entrada de datos para esa
tabla, insertar el siguiente codigo:
On Error GoTo err_Form_Current

If [NumCliente] < 1 Then


[NumCliente] = DMax("NumCliente", "Clientes") + 1
End If

exit_Form_Current:
Exit Sub

err_Form_Current:
If Err = 94 Then 'Uso no valido de Null
Resume Next
Else
MsgBox Error$
Resume exit_Form_Current
End If

En la propiedad Punto de tabulacion del campo NumCliente, dentro de


formulario, establecer su valor a No, ya que sera un campo que no hay que
rellenar manualmente.

Ha sido absolutamente necesario incluir las lineas que hacen referencia al


error n 94 (uso no valido de Null) debido a que la primera vez que se
accede al formulario para introducir datos, se producira dicho error al no
existir registros. Con esas lineas de codigo se evita que aparezca dicho
error, ya que la linea On error goto... envia el flujo de la ejecucion a la
parte del codigo donde se detecta y se envia de nuevo el flujo de ejecucion
a la linea siguiente, excepto en el caso de producirse un error diferente, en
cuyo caso se mostraria el error producido gracias a las lineas que siguen a
Else.

trucos access: Presentar el registro correspondiente al teclear un dato


univoco en un formulario

Partimos de la base de que se dispone de un formulario para incluir los


datos de los clientes y que en el se introduce un dato univoco; por ejemplo,
un DNI.
* Crear otro formulario no basado en ninguna tabla o consulta. Al pulsar el
boton Nuevo formulario elegir la opcion de Modo de ver diseo.
* Incluir en dicho formulario un cuadro de texto con su etiqueta para
incluir el DNI; llamemos, por ejemplo, a esta caja de texto DNITxt.
* Incluir en este formulario un subformulario (de la barra de herramientas
elegir el boton etiquetado Subformulario/SubInforme.
* Poner las siguientes propiedades en el control asi creado:
Objeto origen: Nombre del formulario utilizado como principal.
Vincular campos secundarios: El nombre del campo que contiene el DNI en
la tabla en la que se basa el anterior formulario.
Vincular campos principales: El nombre del cuadro de texto del formulario
actual, en este caso DNITxt.
* Poner el formulario en modalidad formulario para ver si se ve todo y
redimensionar el subformulario en caso necesario.

trucos access: Presentar cuadros de mensaje

La funcion MsgBox muestra un mensaje en un cuadro de dialogo, espera a


que el usuario pulse un boton del cuadro y devuelve un valor, el cual se
correspondera con el boton pulsado.
En la ayuda de Access se pueden estudiar todos los parametros posibles de
esta funcion. Aqui vamos a mostrar solo 2 aspectos: como aadir mas de
una linea y que tipo de botones pulsables hay disponibles.
Para hacer aparecer un cuadro de mensaje de una sola linea, el codigo

necesario seria como el siguiente:


variable = MsgBox("Mensaje", vbOKOnly, "Titulo")
La variable que hay a la izquierda del signo de igualdad puede ser
cualquiera. El mensaje mostrado seria lo que va entrecomillado como
primer parametro, luego viene la definicion del tipo de botones a mostrar
en el cuadro (en este caso solo se mostraria un boton Aceptar) y despues,
tambien entrecomillado, el titulo del cuadro.
Para un cuadro de mas de una linea hay que emplear la palabra clave
vbCrLf dentro del mensaje que separe mediante signos & las diferentes
lineas. Un ejemplo basico seria:
variable = MsgBox("1 linea " & vbCrLf & "2 linea", vbOKOnly, "Titulo")
En sustitucion de vbCrLf se pueden utilizar Chr(13), que denota el caracter
ASCII 13, que es el retorno de carro, y tambien Chr(10), que corresponde
al caracter de avance de linea. Los tres tienen la misma funcionalidad.
En cuanto a los botones a mostrar en el cuadro de mensaje, en el ejemplo
anterior se ha especificado vbOKOnly pero la lista completa es la siguiente:
VbOKOnly Muestra solamente el boton Aceptar
VbOKCancel Muestra los botones Aceptar y Cancelar
VbAbortRetryIgnore Muestra los botones Anular, Reintentar e Ignorar
VbYesNoCancel Muestra los botones Si, No y Cancelar
VbYesNo Muestra los botones Si y No
VbRetryCancel Muestra los botones Reintentar y Cancelar

Los valores devueltos por estos botones, al ser pulsados, son los
siguientes:
Constante Valor Descripcion
vbOK 1 Aceptar
vbCancel 2 Cancelar
vbAbort 3 Anular
vbRetry 4 Reintentar
vbIgnore 5 Ignorar
vbYes 6 Si
vbNo 7 No

El valor devuelto se podria tratar despues en otra linea de codigo para un


condicional, por ejemplo.
La funcion MsgBox es mas amplia de lo aqui expuesto. Incluso puede
mostrar un tipo de icono segun el tipo de mensaje, asi como especificar
archivos de ayuda especificos del cuadro. Para obtener informacion sobre
esos aspectos, abrir la ayuda de Access, la cual no es muy buena para
principiantes, pero una vez explicado como funciona MsgBox aqui, no
habra mayor problema para entenderlo al completo.

trucos access: Proteger una base de datos para que funcione 7 dias
distintos a partir de su instalacion

* Crear una tabla dias con dos campos: [numdia] de tipo numerico cuyo
valor inicial es 0 y [fecha] de tipo fecha/hora.
* Hacer que el formulario principal del programa se ejecute al inicio
automaticamente y, en su evento Al cargar, insertar este codigo:
Dim db As Database, r As Recordset, sql As String
Dim mensaje As String, titulo As String
sql = "Select * From dias"
Set db = CurrentDb()
Set r = db.OpenRecordset(sql)
If r.RecordCount = 0 Then ' Si la primera vez no existe el registro se
inserta
r.AddNew
r![numdia] = 1
r![FECHA] = Date
r.Update
Else
If r![numdia] >= 7 Then 'Se comprueba si se ha utilizado 7 dias la base de
datos
mensaje = "Se han superado los 7 dias de la demo"
titulo = "Demo"
MsgBox mensaje, 48, titulo

DoCmd.Quit 'Cerrar Access


Else
If r![FECHA] <> Date Then 'Se comprueba si hoy ya se ha utilizado la base
de datos
r.Edit
r![numdia] = r![numdia] + 1
r![FECHA] = Date
r.Update
End If
End If
End If
a) Proteger mediante contrasea una base de datos:
Proteger la base de datos con una contrasea, desde la version 7.0,
viene como una opcion de menu. Concretamente, en el menu
Herramientas, opcion Seguridad, la primera subopcion que se ofrece
es Establecer contrasea para la base de datos. Si se activa dicha
opcion, aparecera un cuadro de dialogo en el que se puede definir la
contrasea; una vez pulsado el boton Aceptar, cada vez que
cualquier usuario de Access, intente abrir la base de datos, se le
solicitara la contrasea y no podra entrar en ella si no introduce el
valor correcto. Pero, una vez dentro, puede hacer cualquier
barbaridad.
b) Proteger una base de datos por control de usuarios:
Hay otra opcion algo mas compleja. Access incorpora unos ficheros
(desde la version 7.0 con extension .MDW y en la version 2.0 con
extension .MDA) en los que guarda los valores de seguridad. Se
accede a dichos ficheros utilizando el ejecutable WRKGADM.EXE que
suele encontrarse en el directorio de Access. El nombre que suele
aparecer para el ejecutable es Administrador para trabajo en grupo.
Access trae por defecto un fichero SYSTEM.MDW, normalmente en el
mismo directorio, el cual contiene dos Grupos de usuarios:
Administradores y Usuarios y un unico usuario llamado
Administrador. Si se ejecuta Access, se entra en cualquier base de
datos y se selecciona del menu Herramientas la opcion
Seguridad/Cuentas de usuario y de grupo, se puede comprobar en el
cuadro de dialogo que se visualiza que en el cuadro combinado
Usuario/Nombre aparece el usuario Administrador y en el cuadro de
lista Grupos disponibles, los dos grupos indicados anteriormente.
Todo lo anterior existia, aunque no se intuyera. Cuando se inicia
Access, el programa se conecta al fichero SYSTEM.MDW, del
directorio Access, y por lo tanto, por defecto se entra en las bases de
datos como Administrador, y por ello se puede hacer de todo con
ellas.

Lo que hay que hacer para asegurar una base de datos es crear un
nuevo fichero para trabajo en grupo, es decir un nuevo xxxx.MDW.
Para ello ejecutar WRKGADM.EXE y ahi se vera que, sin saberlo, se
esta conectado a SYSTEM.MDW (es el archivo que aparece en la linea
Archivo de informacion), el cuadro de dialogo tiene un boton para
crear un nuevo archivo (seguir sus instrucciones, leyendo todo y
anotando cuidadosamente todo lo que diga que hay que anotar).
Cuidado a la hora de grabar pues propone reemplazar SYSTEM.MDW
y eso no debe hacerse. Pongamos por caso que se crea un archivo
llamado PRUEBSEG.MDW (mejor ubicarlo en el mismo directorio en
el que se encuentra la base de datos que se pretende asegurar). Por
defecto, al crearlo, Access queda conectado a dicho grupo de
seguridad. Se puede comprobar saliendo y volviendo a entrar. La
linea Archivo de informacion contiene ahora el nombre del nuevo
fichero .MDW. Salir de nuevo. Ahora se puede conectar (antes de
ejecutar el propio Access) a uno u otro grupo de trabajo.
Al entrar en Access habiendo conectado previamente al nuevo
grupo, no aparecen las ultimas bases de datos abiertas, sino que el
lugar aparece vacio; esto es porque en el archivo MDW, ademas de
grupos de usuarios y usuarios, guarda tambien esta informacion.
Ahora vamos a empezar a hacer una base de datos segura:
* Asegurarse de estar conectado al grupo PRUEBSEG.MDW
* Abrir Access y, sin abrir ninguna base de datos, elegir del menu
Herramientas la opcion Cuentas de usuario y de grupo. Aparece un
cuadro de dialogo mas confuso de lo que a primera vista parece.
* Observar que esta abierta la pestaa Usuarios y que en el cuadro
combinado Nombre, solo aparece el usuario Administrador.
* Pulsar el boton Nuevo para crear un nuevo usuario; se solicitara
Nombre para el mismo e Id.personal; el segundo no es importante y
se puede poner el mismo nombre en los dos sitios para no provocar
mas confusion.
* Pulsar Aceptar. Verificar que el nuevo usuario aparece en el cuadro
combinado y que, por defecto lo ha incluido en el Grupo "Usuarios" y
comprobar si en el cuadro de lista de abajo a la derecha aparece
dicho grupo y sealar en el cuadro de lista de la izquierda el valor
Administradores.
* Pulsar el boton Agregar>>. Ahora el nuevo usuario (imaginemos
que se le ha llamado PruebasAdmin), tambien pertenece al grupo
Administradores. Cualquier usuario que se cree puede pertenecer a
mas de un grupo de usuarios.
* Pulsar la pestaa Cambiar contrasea de conexion. Aparece un
cuadro de dialogo para cambiar la contrasea del usuario actual.
Observar que indica que el usuario actual es el Administrador (no
PruebasAdmin). Dejar en blanco el valor Contrasea anterior y
teclear el mismo valor en Contrasea nueva y Confirmacion. Pulsar
Aceptar. Lo que se acaba de hacer es poner una contrasea al
Administrador de Access y, a partir de este momento, cuando se
ejecute Access conectado al grupo de usuarios PRUEBSEG.MDW,

siempre pedira usuario y contrasea.


* Al intentar entrar, Access pedira usuario y contrasea. Lo que lo
que antes aparecia como Administrador ahora aparece como Admin
en nombre de usuario aunque en realidad se esta refiriendo al
mismo usuario. Entrar y salir de Access.
* Como en un paso de los anteriores, crear un usuario llamado
PruebasAdmin, e intentar entrar con el en Access. Observar que aun
no tiene contrasea, por lo que, para entrar con el, curiosamente se
tiene el campo Contrasea vacio. Una vez dentro, se puede poner a
dicho usuario una contrasea. Ni siquiera el administrador tiene
capacidad para asignar ni ver contraseas ajenas. Lo que se puede
hacer es borrar las contraseas (que siempre es util para el usuario
inutil, al que se le olvida la contrasea). Salir de nuevo de Access.
* Ejecutar WRKGADM.EXE para cambiar de grupo y conectarse al
grupo de toda la vida: SYSTEM.MDW y, una vez hecho, entrar de
nuevo en Access, notando que ahora todo vuelve a la normalidad: se
veran las llamadas antiguas a las bases de datos, no se pide
contrasea, etc.
Resumen de lo realizado hasta ahora:
* Hemos creado un Grupo de trabajo nuevo al que hemos llamado
PRUEBSEG.MDW.
* En el hemos creado un usuario nuevo: PruebasAdmin, al que
hemos incorporado en el grupo de Administradores, aunque tambien
pertenece al grupo Usuarios.
Para asegurar una base de datos:
1) Conectarse al grupo de trabajo seguro (en este caso
PRUEBSEG.MDW).
2) Abrir Access y entrar con el usuario seguro: PruebasAdmin.
3) Crear una base de datos vacia, que llamaremos
BaseDatosSegura.MDB
4) Importar a la misma todas las tablas, consultas, formularios,
informes, macros y modulos desde la base de datos que se pretende
hacer segura (en Access 7.0 y 97, elegir Archivo/Obtener datos
externos/Importar). Se acaba de crear una base de datos cuyo
propietario es PruebasAdmin del grupo de trabajo PRUEBSEG.MDW.
5) Con la base de datos nueva abierta, elegir
Herramientas/Seguridad/Cuentas de usuario y de grupo...
6) Al usuario Administrador quitarlo del grupo Administradores.
7) Aseguremonos de que el usuario PruebasAdmin pertenece a
Administradores y a Usuarios.
8) Elegir Herramientas/Seguridad/Permisos de usuario y de grupo...

9) Elegir lista de usuarios, seleccionar el usuario PruebasAdmin, en


el combo Tipo de objeto seleccionar Base de datos (hay que tener
cuidado, ya que esta oculta antes del valor que toma por defecto:
Tabla). Hay que marcar todas las casillas de verificacion.
10) Elegir en Tipo de objeto el valor Tabla, seleccionando de la lista
Nombre de objeto todas las tablas e incluyendo el valor
Tablas/consultas nuevas, marcar todas las casillas de verificacion
(lo mas facil es quitar la marca en la casilla Administrar y volversela
a poner).
11) Elegir todos y cada uno de los tipos de objeto y hacer lo mismo
para cada uno de ellos. En este momento el usuario PruebasAdmin
es dueo y seor de todo.
12) Elegir lista de usuarios, seleccionar el usuario Administrador, en
el combo Tipo de objeto seleccionar Base de datos. Desmarcar las
casillas de verificacion Abrir o Ejecutar, Abrir en modo exclusivo y
Administrar.
13) Elegir lista de grupos, seleccionar el grupo Administradores, y
hacer lo mismo del punto anterior: elegir Base de datos, desmarcar
las casillas de verificacion, etc. Esto no se menciona en ninguna
ayuda oficial de las versiones 2.0, 7.0 ni 97.
14) Seleccionar ahora el grupo Usuarios, y hacer lo mismo.
La base de datos ahora es segura y se puede comprobar siguiendo
los siguientes pasos:
1) Cerrar Access.
2) Conectar al grupo de trabajo SYSTEM.MDW.
3) Entrar en Access (por defecto se entra como Administrador).
4) Intentemos abrir nuestra base de datos segura. Nos dara un
mensaje mas o menos asi: No tiene los permisos necesarios para
acceder al objeto, etc.
5) Intentemos crear en este SYSTEM.MDW un usuario PruebasAdmin
igual al que tenemos creado en PRUEBSEG.MDW. Recordemos que
para poder entrar con este usuario hay que poner una contrasea al
usuario Administrador de este grupo de trabajo.
6) Entrar en Access con este usuario; tampoco deja entrar.
7) Conectar a PRUEBSEG.MDW y entrar como Administrador;
intentar abrir la base de datos segura y... tampoco.
Solo se puede acceder a ella con el usuario PruebasAdmin estando
conectados a PRUEBSEG.MDW y solo el que conozca la contrasea de
dicho usuario podra entrar en la misma.
Ahora podemos empezar a crear nuevos grupos de usuarios y
nuevos usuarios y empezar a otorgar permisos al uso de tablas y

consultas, y formularios... o utilizar la base de datos segura, en un


entorno de Visual Basic; los usuarios no podran acceder a ella de
ninguna otra manera.
Para hacerla aun mas segura se puede codificar.

trucos access: Sincronizar dos cuadros combinados en un formulario

Se pretende describir como sincronizar dos cuadros combinados en un


formulario, de forma que la seleccion que se hacer en el primer cuadro
combinado limite la lista que aparezca en el segundo cuadro combinado.
El siguiente ejemplo usa la base de datos de ejemplo Neptuno.mdb,
proporcionada con Access. El primer cuadro combinado muestra las
categorias de productos, y el segundo cuadro combinado muestra los
productos disponibles para la categoria seleccionada en el primer cuadro
combinado:
a) Abrir la base de datos de ejemplo Neptuno.mdb.
b) Crear la siguiente consulta nueva basada en la tabla Productos, y
guardar la consulta como Consulta Lista Categorias.
Consulta : Consulta Lista Categorias
Tabla : Productos
Tipo : Consulta de Seleccion
Campo: ID de Producto
Orden: Ascendente
Mostrar: Si
Campo: Nombre de producto
Tabla: Productos
Mostrar: Si
Campo: ID de categoria
Mostrar: No
Criterios: Formularios![Categorias y Productos]![Categorias]
c) Crear un nuevo formulario no basado en ninguna tabla o consulta con
los siguientes cuadros combinados, y guardar el formulario como
Categorias y Productos:
- Cuadro Combinado 1
Nombre : Categorias

Tipo de origen de la fila: Tabla / Consulta


Origen de la fila : Categorias
Numero de columnas : 2
Anchura de columnas : 0;1
Columna dependiente : 1
Despues de actualizar : Refrescar

- Cuadro Combinado 2
Nombre : Productos
Tipo de origen de la fila: Tabla / Consulta
Origen de la fila : Categorias y Productos
Numero de columnas : 2
Anchura de columnas : 0;1
Columna dependiente : 1
Nota: La propiedad Columna dependiente del primer cuadro combinado no
debe definirse al campo llamado en la fila Criterios de la consulta de arriba;
de otra forma, el segundo cuadro combinado mostrara solo el primer
registro.

d) Crear la siguiente macro y guardarla como 'Refrescar':


Nombre de Macro: Refrescar
Accion: NuevaConsulta
Argumentos de la accion
Nombre del control: Productos

e) Ver el formulario Categorias y Productos en vista Formulario. Cuando se


seleccionar una categoria en el primer cuadro combinado, el segundo
cuadro combinado se actualiza solo a la lista de productos disponibles para
la categoria seleccionada.
En el ejemplo anterior, el segundo cuadro combinado se rellena con el
resultado de la consulta 'Consulta Lista Categorias'. Esta consulta
encuentra todos los productos que tienen un ID de Categoria igual al de la
categoria seleccionada en el primer cuadro combinado.

Para cualquier categoria seleccionada en el primer cuadro combinado, el


evento Despues de Actualizar ejecuta la macro Refrescar, que fuerza al
segundo cuadro combinado a ejecutar la consulta Consulta Lista Categorias
de nuevo. Esto refresca la lista de productos disponibles en el segundo
cuadro combinado. Sin esta macro, podria forzar al segundo cuadro
combinado a refrescarse por si mismo pulsando la tecla F9.

trucos access: Sincronizar replicas de una base de datos

Usar Access para crear y sincronizar replicas de una base de datos es tan
facil como utilizar el Maletin de Windows 95. Pero al contrario que el
maletin, Access proporciona potentes herramientas (asi como detallada
documentacion en linea) para resolver conflictos entre diferentes
versiones de una base de datos Access. He aqui como hacerlo. Si la base de
datos tiene una contrasea, desactivarla seleccionando
Herramientas/Seguridad y activando Anular contrasea de la base de
datos. A continuacion, teclear la contrasea actual en el dialogo Anular la
contrasea establecida para la base datos y hacer clic en Aceptar. Del
menu principal Herramientas, seleccionar Replica, y despues Crear replica.
Esto convierte la base de datos existente en Maestra de Diseo, lo que
significa que es la unica copia cuya estructura se puede cambiar. Puede
hacer tantas replicas como necesite y sincronizarlas utilizando la opcion
Sincronizar del menu Replicado.

trucos access: Teclas de atajo en botones de formularios

Para conseguir unos botones mas profesionales y que sean activos con una
combinacion de teclas en vez de pulsarlo con el raton, hay que poner en el
titulo del boton un caracter & antes de la letra que se desea que aparezca
subrayada y que sea la letra indice. Por ejemplo, &Boton aparecera como
Boton y en la presentacion del formulario sera accesible con la
combinacion ALT-B (por ser B la letra elegida para el atajo de teclado).

trucos access: Teclas y secuencias de teclas de atajo

Insertar la fecha actual CONTROL - ; (signo punto y coma)


Insertar la hora actual CONTROL - : (signo 2 puntos)
Aadir un nuevo registro CONTROL - + (signo suma)
Borrar un registro CONTROL - -- (signo resta o guion)
Copiar el valor del campo a rellenar con el valor del registro anterior
CONTROL - ' (signo apostrofe)

Usar un valor por defecto para un campo CONTROL-ALT-ESPACIO


Grabar todos los cambios MAYUSCULAS-INTRO
Activar la barra de menues F10
Seleccionar la siguiente barra de herramientas CONTROL-TAB
Seleccionar la anterior barra de herramientas CONTROL-MAYUSCULAS-TAB
Seleccionar el boton siguiente cuando la barra de herramientas esta activa
TAB
Seleccionar el boton anterior cuando la barra de herramientas esta activa
MAYUSCULAS-TAB
Desplegar un cuadro combinado F4 o ALT-FLECHA ABAJO
Actualizar el contenido de un cuadro de lista o cuadro combinado F9
Ciclo entre ventanas abiertas CONTROL-F6
Restaurar la ventana seleccionada cuando todas estan minimizadas INTRO
Mostrar el menu de control ALT-ESPACIO
Mostrar la direccion completa para un hipertexto F2
Insertar retornos de linea en cuadros de texto CONTROL-INTRO
Conmutador de depuracion en el modo de edicion de codigo CONTROL-G

trucos access: Acceso rapido a opciones frecuentes

Crear una macro nueva.


En la columna Nombre de macro consignar el caracter ^ y a continuacion
una letra (por ejemplo ^P).
En la columna Accion elegir EnviarTeclas y en la zona inferior, dentro del
apartado Pulsaciones de teclas escribir el signo % seguido de aquellas
letras que esten subrayadas en los menues de Access. Por ejemplo, para
desplegar las propiedades, escribir %VE, ya que V es la letra subrayada del
menu Ver y E es la letra subrayada de la opcion Propiedades.
Guardar la marco con el nombre Autokeys (no vale otro nombre).
Cuando estemos frente a un formulario, la pulsacion de la tecla CONTROL
junto con la letra elegida en el nombre de la macro producira el efecto de
haberlo elegido de los menues. Siguiendo el ejemplo anterior, la pulsacion
de CONTROL-P mostraria las propiedades de un objeto.

trucos access: Analizar tablas

Si se tienen datos redundantes en una tabla, se puede hacer uso del


analizador de tablas para una mejor eficiencia. Para ello hay que elegir
Herramientas/Analizar/Tabla.
El analizador funciona sin daar la tabla original e incluso genera una
consulta que simula la tabla original inalterada, de forma que se puede
seguir utilizando como origen de datos.

trucos access: Anexionar datos


de una tabla en otra
respetando el valor de un
campo autonumerico
Primeramente, crear un duplicado (copiar y pegar con otro nombre) de la tabla de destino
cambiando en ella el campo Autonumerico por Numerico de tipo Entero largo y eliminar, en su caso,
la clave principal o si se ha establecido la propiedades Indexado sin duplicados. De lo contrario,
fracasara la consulta.
Importar los datos de esta tabla utilizando una consulta de datos anexados (opcion disponible
dentro del menu Consultas de una consulta) para mover los registros a la tabla de destino, ya que
este tipo de consultas conservan los valores originales cuando se colocan los datos en campos
autonumericos. Hay que eliminar, si existe, la clave principal del campo que la ostente o si se ha
establecido la propiedad Indexado sin duplicados en algun otro campo. De lo contrario, fracasara la
consulta.
Si la otra tabla esta en una base de datos distinta, no hay mayor problema para la importacion. Si ha
sido generada por otra aplicacion, siempre que sea compatible con el estandar ODBC, incluso
bastaria con ejecutar directamente la consulta de datos anexados, es decir, se puede omitir el paso
intermedio de crear una copia de la tabla. Por tanto, hay que elegir Archivo/Obtener datos
externos/Vincular tablas y elegir a continuacion el nombre de archivo. Entre los tipos de archivo
figuran muchos que Access reconoce directamente y tambien figura ODBC.

trucos access: Animacion con


los creditos del programa
Crear una nueva base de datos y grabarla con el nombre Go Speed Racer Go. Luego elegir
Ayuda/Acerca de y hacer doble clic con el boton derecho del raton sobre el dibujo del cuadro de
dialogo. Para salir de la animacion, pulsar ESC.

trucos access: Asignar el foco a


un campo concreto de un
formulario al cargarse
En las propiedades del formulario y dentro del evento Al activar registro, consignar esta linea de
codigo:
NombreCuadro.SetFocus
donde NombreCuadro es el nombre del cuadro de texto al que se desea asignar el foco para que se
muestre el cursor en el.

trucos access: Atajo para ver el


diseo de un elemento de la
base de datos
Si se hace doble clic sobre un elemento en la ventana de la base de datos, se abre la vista de hoja de
datos (la tabla si es un elemento de tabla, el formulario si es un elemento de formulario, etc.), pero
se puede forzar que se abrir la vista de diseo si se mantiene pulsada la tecla CONTROL mientras se
hace el doble clic.