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 de aja72
10
aja72, Desde los 14 años dedicado a la informática,...
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
Añade tu respuesta sólo si conoces la solución a la pregunta.
No lo utilices para hacer una nueva pregunta.
Para pedir más datos de la pregunta utiliza "Pedir más información".
Para aportar más información a una respuesta, añade un comentario.