lunes, 29 de marzo de 2010

[Access] Abrir un .mdb desde otro .mdb (y vuelta)

Tengo una aplicación en Access que debe ofrecer un número único de registro y después llamar a diversos formularios de distintos departamentos para que se procesen esos expedientes. Las necesidades de esos departamentos son muchas y variadas, con distintas tablas asociadas cada una de ellas. Una aplicación así en Access me da mucho miedo, porque puede crecer hasta el infinito (y más allá) con los correspondientes problemas de accesos concurrentes en red, bloqueos y demás.

La solución es crear una pequeña aplicación desde la que genero los números de registro, y con un formulario dotado de múltiples botones que llaman a las aplicaciones de cada departamento, cada una de las cuales reside en un .mdb (o .accdb) distinto con sus propios formularios y tablas. Al cerrar esas aplicaciones, se vuelve a abrir la principal, con lo que la sensación para el usuario es la de usar un único programa.

El código que pongo en la aplicación central es el siguiente:

Private Sub Comando0_Click()
    ' Definimos la aplicación que vamos a llamar, y la rodeamos de dobles comillas
    bdllamada = Chr(34) & "c:\caminocompleto\nombreBD.accdb" & Chr(34)
    ' Llamamos a Access, le decimos la BDD que debe abrir y le pasamos el parámetro
    ' correspondiente a la aplicación padre, a la que deberá volver después
    Call Shell("msaccess.exe " & bdllamada & " /cmd " & Application.CurrentDb.Name, vbMaximizedFocus)
    ' Activamos los eventos
    DoEvents
    ' Cerramos la aplicación actual
    DoCmd.Quit
End Sub

El quid de la cuestión está en el /cmd . Lo que va a continuación es un parámetro que se le pasa a la aplicación que se abre, y se puede rescatar mediante la función Command().

En la aplicación hija se incluye el siguiente código:

Public padre As String

Private Sub Form_Open(Cancel As Integer)
    ' Recogemos el parámetro que nos indica a dónde volver
    padre = Command()
End Sub
Private Sub Form_Close()
    ' Al cerrar, volvemos a llamar al padre
    Call Shell("msaccess.exe " & Chr(34) & padre & Chr(34), vbMaximizedFocus)
End Sub

No hay comentarios:

Datos personales