BD Access en red

Tenemos una red local donde hay una base de datos en el servidor y en cada ordenador hemos instalado un programa que utiliza esa base de datos en red.
El problema es que no sabemos cómo hacer la conexión a esa base de datos.
¿Se pueden conectar varios usuarios a la vez a la misma base de datos?
¿Si uno modifica algo, los demás verán los cambios?

1 respuesta

Respuesta
1
Me dices que estás en el caso segundo (no tienes acceso al código de la aplicación) pero estás programando para acceder a la bbdd ¡¿?!.
Intuyo que quieres atacar la bbdd usando DAO, en ese caso, la forma de actuar será la siguiente:
* Conexíón
Public wrk As Workspace
Public dbs As Database
Set wrk = CreateWorkspace("", "admin", "", dbUseJet)
Set dbs = wrk.OpenDatabase("\\SERVIDOR\PROGRAMA\bd\BaseDatos1.mdb", False, False, "MS Access;PWD=")
* Consultas
Dim rs As Recordset
Set rs = dbs.OpenRecordset("SELECT * FROM Tabla1", dbOpenSnapshot, dbReadOnly)
* Modificaciones
dbs.Execute "DELETE * FROM Tabla1 WHERE CODIGO='A'", dbFailOnError
Los bloqueos sobre las tablas los controla Access. La mejor forma para garantizar la integridad de los datos es que utilices transacciones cuando vayas a modificar la bbdd. Sería algo así:
On Error Goto ErrFn
Wrk. BeginTrans
'Incluyes todo el código necesario para hacer las modificaciones...
Wrk. CommitTrans 'Se realizan todos los cambios "en bloque" desde el inicio de la transacción
ErrFn:
Wrk. Rollback 'Si algo falla se deshacen todos los cambios desde el inicio de la transacción
No te aconsejo que utilices DAO y ADO simultáneamente en tu programa. DAO es perfectamente válido para atacar Access.
La situación que tenemos es la segunda.
¿Cómo tenemos que hacer la conexión a la base de datos y las consultas y modificaciones sobre la base de datos?
¿Cómo se puede bloquear una tabla para que ningún usuario pueda verla hasta que el otro termine de operar sobre ella?
Te pongo el código que tenemos ahora mismo para gestionar a la base de datos:
(La unidad F está en red)
Public dbDB As Database
Public dbtbl As Recordset
Public InsSQL As QueryDef
Set dbDB = OpenDatabase("F:\PROGRAMA\bd\BaseDatos1")
'Para hacer consultas:
Set dbtbl = dbDB.OpenRecordset("SELECT * FROM Tabla1", dbReadOnly)
'Para modificar:
Set InsSQL = dbDB.CreateQueryDef("", "DELETE * FROM Tabla1 WHERE CODIGO='A'")
InsSQL.Execute
Pero he leído algo acerca de ADODB Database y Connection.
¿Cuándo se debe utilizar una u otra?
Se pueden dar dos situaciones:
a) Que el programa lo estés haciendo tú, en cuyo caso bastará con compartir la carpeta del servidor donde está la BBDD y especificar la ruta de red a la hora de hacer la conexión (p.e. \\SERVIDOR\DIR_COMPARTIDO\bbdd.mdb) en vez de utilizar una ruta local (C:\DIRECTORIO\bbdd.mdb)
b) Que no tengas acceso al código, en cuyo caso lo mejor es instalar en programa en todos los equipos (servidor y clientes), y poner en cada cliente un acceso directo al ejecutable en el servidor. Hacer la instalación en los clientes te servirá para tener todas las librerías necesarias, y el acceso directo al servidor para que todos los clientes usen el mismo programa y la misma BBDD.
En cualquier caso, si se pueden conectar varios usuarios simultáneamente a una bbdd access. Los cambios realizados por un usuario se podrán ver en las otra máquinas pero bajo consulta, es decir, si dos usuarios visualizan los mismos datos, y el primero de ellos cambia algo, el segundo no verá los cambios hasta que vuelva a consultarlos nuevamente.
El principal problema que te puedes encontrar es el de los bloqueos: dependiendo de la programación de la aplicación, mientras un usuario modifica algo se pueden producir bloqueos de tablas en la bbdd, lo que puede ocasionar un error en tiempo de ejecución o un bloqueo de la aplicación en otros equipos clientes hasta la finalización de la transacción.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas