Professional Documents
Culture Documents
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:
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.
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
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
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
yCodigo = ssTmp!UltCodigo
ssTmp.Close
Set ssTmp = Nothing
Set db = Nothing
Return yCodigo
End Function
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.
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
trucos access: Controlar que formulario se abre por defecto al abrir una
base de datos
Tablas
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
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.
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
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
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
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
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,
- 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.
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.
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).