Está en la página 1de 5

BORRAR O NO BORRAR... THAT'S THE QUESTION...

Este es un ejemplo muy simple (o relativamente simple...


je, je...) para poder borrar un registro y que Access haga lo
que nosotros queramos antes de proceder al borrado.

Para simplificar lo que explicaremos es cómo hacer que


salga un mensaje escrito por nosotros para solicitar la
confirmación del borrado.

Sin embargo, aprovecharé el ejemplo para explicar, en una segunda parte, cómo programar un
backup del registro que se quiere borrar “por si las moscas” utilizando una metodología no
demasiado complicada.

En realidad ya sabemos que cuando vamos a borrar un registro Access nos pide una
confirmación estándar de eliminación. En este ejemplo la vamos a cambiar por una
confirmación a nuestro gusto (insisto: podríamos realizar todas las acciones que quisiéramos
antes de proceder a la eliminación de dicho registro, como la que explicaremos en la segunda
parte del ejemplo).

Manos a la obra.

CREANDO NUESTRA TABLA Y NUESTRO FORMULARIO


Vamos a crearnos una tabla que llamaremos TDatos muy simple y sobre ella un formulario que
llamaremos FDatos. Simplemente lo hacemos así para que, en el ejemplo, tengamos algo que
borrar...

Por ejemplo, mi tabla TDatos tiene esta más que simple estructura:

Y le escribimos un par de registros.

Una vez creado FDatos vamos a insertar, en su encabezado, un botón de comando, al cual le
pondremos de nombre cmdBorrar2

CÓDIGO Y OTRAS OPERACIONES


A este botón cmdBorrar, en su evento “Al hacer clic”, le generamos el siguiente código3:


Private Sub cmdBorrar_Click()
'Creamos un control de errores
On Error GoTo sol_err

1 La BD de ejemplo os la podéis bajar aquí


2 Para asignar un nombre a un control lo que debemos hacer es sacar las propiedades de ese control e irnos a la Pestaña Otras →
Nombre. Ahí escribimos el nombre que queramos.
3 Para generar código debemos sacar las propiedades del control → Pestaña Eventos, y nos situamos en la parte “blanca” a la
derecha del evento que queremos programar. Veremos un pequeño botón de puntos suspensivos. Si hacemos clic sobre él nos
aparecerá una ventana que nos pedirá qué operación deseamos realizar. Le indicamos que queremos “generar código”.

1
Visítame en http://neckkito.siliconproject.com.ar
'Ejecutamos el borrado del registro
DoCmd.RunCommand acCmdDeleteRecord
Salida:
Exit Sub
sol_err:
Select Case Err.Number
Case 2046 'El registro no se puede borrar
MsgBox "No se puede ejecutar el borrado en este momento",
vbExclamation, "AVISO"
Case 2501 'Se cancela la acción de borrar
'No hacemos nada
Case Else 'Otro error no previsto
MsgBox "Se ha producido el error " & Err.Number & " - " &
Err.Description
End Select
Resume Salida
End Sub

Si nos quedáramos en este código nos saldría el mensaje de confirmación estándar de Access.
Vamos a cambiar eso.

Sacamos las propiedades del formulario y nos situamos en el evento “Antes de confirmar la
eliminación”. Ahí le generamos el código siguiente:


Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
'Declaramos las variables
Dim resp As Integer
'Definimos la variable Response para que no salga el mensaje de Access
Response = acDataErrContinue
'Aquí generamos nuestra petición personalizada de confirmación de diálogo
resp = MsgBox("¿Pero de verdad quieres borrar este hermoso registro?", _
vbQuestion + vbYesNo, "¿ESTÁS SEGURO?")
'Si la respuesta es no cancelamos el borrado
If resp = vbNo Then
Cancel = True
End If
'Si la respuesta ha sido SÍ dejamos que la acción del DoCmd.acRunCommmand se ejecute.
'Para ello no necesitamos hacer nada más (porque Cancel tiene False como valor por
'defecto)
End Sub

Como veis, se trata de manejar el argumento Cancel del evento para autorizar o no el borrado.

SEGUNDA PARTE: HACER BACKUP DEL REGISTRO A


BORRAR
Lo que haremos, para no complicar el ejemplo, es realizar un backup muy simple. Veamos...

Vamos a crearnos un nuevo formulario sobre TDatos que guardaremos con el nombre de
FDatos2.

Vamos a copiar la tabla TDatos y vamos a pegarla con el nombre de TBackupDatos, pero,
importante, sólo vamos a pegar la estructura, no los datos.

A continuación vamos a crearnos una consulta sobre TDatos que llamaremos CBackup, que
tendrá la siguiente estructura:

2
Visítame en http://neckkito.siliconproject.com.ar
Una vez tengamos la consulta con esta estructura la convertimos en una consulta de datos
anexados. Cuando nos pida a qué tabla queremos anexar elegimos TBackupDatos.

Fijaos que he fijado como filtro del campo [Id] una función que crearemos a continuación, y
que he llamado

fncIdBorrado()

Accedemos al VBE e insertamos así un módulo estándar4. Vamos a guardarlo como mdlBackup

En ese módulo vamos a definir una variable pública y nuestra función fncIdBorrado(). Además,
crearemos también un procedimiento público que nos ejecutará la consulta para hacer nuestro
backup.

A nuestra variable pública la llamaremos idBorrado, y simplemente, en el módulo, la


declaramos así:

Nuestra función, que escribiremos a continuación de la variable pública, será, simplemente.


Public Function fncIdBorrado()
fncIdBorrado = idBorrado
End Function

Y a continuación de esta función escribimos el procedimiento subEjecutoCBackup(), cuyo


código es el siguiente:


Public Sub subEjecutoCBackup()
'Deshabilitamos las advertencias
DoCmd.SetWarnings False

4 Para insertar un módulo estándar podemos abrir el editor de VB (ALT+F11) y nos vamos a Menú → Insertar → Módulo

3
Visítame en http://neckkito.siliconproject.com.ar
'Ejecutamos la consulta
DoCmd.OpenQuery "CBackup"
'Habilitamos las advertencias
DoCmd.SetWarnings True
End Sub

Ok. Vamos a por el formulario FDatos2.

En su encabezado vamos a situar un botón de comando y lo


vamos a llamar cmdBorrarBackup. En su evento “Al hacer
clic” generamos el siguiente código (que, como veréis, es
bastante parecido al código que hemos escrito en FDatos):


Private Sub cmdBorrarBackup_Click()
'Creamos un control de errores
On Error GoTo sol_err
'Pasamos el id del registro que queremos borrar a la variable pública
idBorrado = Nz(Me.Id.Value, 0)
'Ejecutamos el borrado del registro
DoCmd.RunCommand acCmdDeleteRecord
Salida:
Exit Sub
sol_err:
Select Case Err.Number
Case 2046 'El registro no se puede borrar
MsgBox "No se puede ejecutar el borrado en este momento", vbExclamation, "AVISO"
Case 2501 'Se cancela la acción de borrar
'No hacemos nada
Case Else 'Otro error no previsto
MsgBox "Se ha producido el error " & Err.Number & " - " & Err.Description
End Select
Resume Salida
End Sub

Como veis, la única diferencia está en que antes de realizar cualquier acción pasamos el
identificador del registro que queremos borrar a la variable pública idBorrado que habíamos
creado en nuestro módulo estándar.

Ahora sacamos las propiedades del formulario y en el evento “Antes de confirmar la


eliminación” le generamos el siguiente código, que de nuevo es muy parecido al que ya
habíamos usado en la parte primera de este ejemplo pero añadiéndole la funcionalidad de
realizar el backup del registro si el usuario finalmente desea borrar.


Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
'Declaramos las variables
Dim resp As Integer
'Definimos la variable Response para que no salga el mensaje de Access
Response = acDataErrContinue
'Aquí generamos nuestra petición personalizada de confirmación de diálogo
resp = MsgBox("¿Pero de verdad quieres borrar este hermoso registro?", _
vbQuestion + vbYesNo, "¿ESTÁS SEGURO?")
'Si la respuesta es no cancelamos el borrado
If resp = vbNo Then
Cancel = True
Else 'Si el usuario sí quiere borrar realizamos el proceso de borrado a través de la llamada
'a nuestro procedimiento que ejecuta la consulta de backup
Call subEjecutoCBackup
'No tocamos el valor del argumento Cancel porque, por defecto, es false (no cancelamos el borrado,
'en definitiva).
End If
End Sub

4
Visítame en http://neckkito.siliconproject.com.ar

Como vemos lo que hacemos es analizar la respuesta del


usuario. Como el argumento Cancel es, por defecto, False,
con el If, si el usuario quiere cancelar, cambiamos su valor a
True; en caso contrario, y a través del Else, ejecutamos
nuestro procedimiento que nos realiza el backup del
registro que estamos a punto de borrar.

Y eso es todo.

PARA FINALIZAR EL EJEMPLO


Bueno... Hemos visto cómo cambiar el mensaje de advertencia de eliminación de registros, en
la primera parte del ejemplo, por un mensaje propio, y en la segunda parte le hemos añadido
una funcionalidad a nuestra BD, que ha sido la de hacer una copia de seguridad del registro
que hemos decidido borrar. Fácil, ¿verdad? 

Espero que el ejemplo os sea de utilidad. Un saludo, y...

¡suerte!

5
Visítame en http://neckkito.siliconproject.com.ar