Hola Yolanda:
Te indico como he resuelto yo este asunto, pués tambien a mi se me presentó este problema. La idea de 2pl tambien es factible, tu decides:
Si son tres Empresas necesitas 4 bases de datos. Ejemplo:
- BaseClientes.mdb conteniendo solamente la Tabla Clientes
- Empresa001.mdb con todas sus Tablas
- Empresa002.mdb con todas sus Tablas
- Empresa003.mdb con todas sus Tablas
Necesitas otra Base que hará de programa (el FrontEnd) y que contendrá todos los demás objetos (consultas, formularios, informes, macros y módulos, pero NINGUNA Tabla que NO sea vinculada)
Si son varios usuarios, cada uno tendrá una copia exacta de la base FrontEnd en su disco duro local.
Todas las bases FrontEnd tendrán vinculada directamente la Tabla "Clientes" de la Base de datos "BaseClientes.mdb" y lógicamente esas cuatro mdb's estarán en una carpeta compartida de un Servidor de Red.
Se supone que las Tablas de las tres EmpresasXXX.mdb son iguales en cuanto a NOMBRE y ESTRUCTURA aunque contengan datos diferentes y los nombres de las Tablas deben ser los mismos en todas las Bases "EmpresaXXX"
En la Base FrontEnd puedes poner un Formulario de Inicio con un MARCO DE OPCIONES, con tantas opciones como empresas, en tu caso tres (1-Cargar Empresa001, 2-Cargar Empresa002, 3-Cargar Empresa003) y estos dos Procedimientos de evento:
'EVENTO AL CARGAR:
Private Sub Form_Load()
DoCmd.Maximize
Marco1.Value = 1 'Marca por defecto al cargar, la opcion 1 = Cargar Empresa001
End Sub
'EVENTO AL HACER CLICK EN UN BOTON DE COMANDO:
Private Sub Comando1_Click()
On Error Resume Next
Dim Empresa As String
If Marco1.Value = 1 Then
Empresa = "//Servidor/DiscoD/Gestion/Empresa001.mdb"
ElseIf Marco1.Value = 2 Then
Empresa = "//Servidor/DiscoD/Gestion/Empresa002.mdb"
ElseIf Marco1.Value = 3 Then
Empresa = "//Servidor/DiscoD/Gestion/Empresa003.mdb"
End If
'Elimina las Tablas que haya vinculadas antes de vincular las de la nueva Empresa cargada:
DoCmd.SetWarnings False
DoCmd.DeleteObject acTable, "Tabla1"
DoCmd.DeleteObject acTable, "Tabla2"
DoCmd.DeleteObject acTable, "Tabla3"
DoCmd.DeleteObject acTable, "Tabla4"
.........
.........
'Vincula las Tablas de la Empresa que seleccionemos en el Marco de opciones:
DoCmd.TransferDatabase acLink, "Microsoft Access", Empresa, acTable, "Tabla1", "Tabla1"
DoCmd.TransferDatabase acLink, "Microsoft Access", Empresa, acTable, "Tabla2", "Tabla2"
DoCmd.TransferDatabase acLink, "Microsoft Access", Empresa, acTable, "Tabla3", "Tabla3"
DoCmd.TransferDatabase acLink, "Microsoft Access", Empresa, acTable, "Tabla3", "Tabla4"
.........
.........
DoCmd.SetWarnings True
End Sub
En las tres líneas de código que definen el valor de las Empresas, cambia las barras inclinadas a la derecha por las inclinadas a la izquierda, ya que como sabrás, en este Foro no se muestras estas últimas.
Cualquier duda que te surga, pregunta.
Saludos
Enrique