Poder compactar base

29/07/2003 - 13:23 por Pablo | Informe spam
Hola: Tengo una aplicacion multiusuario que trabaja en una
red local, con una base de datos Access 2000. Cuando
quieor compactar la base de datos, si hay un usuario
conectado a la base no me permite compactarla. Mi pregunta
es, como puedo hacer mediante codigo para desconectar a
todos los usuarios de una base de datos y luego
compactarla?. Gracias

Preguntas similare

Leer las respuestas

#1 Victor Koch
29/07/2003 - 16:49 | Informe spam
Hola Pablo, yo te diría que la abras la DB en forma exclusiva y si te da
error quiere decir que ya esta abierta por otra terminal.
Te envío una forma para saber cuantos usuarios están conectados a la base de
datos, tal vez esto te sirva.

Sub ReturnUserRoster(Base As ADODB.Connection)
JET_SCHEMA_USERROSTER = "{947bb102-5d43-11d1-bdbf-00c04fb92675}"
Dim Rst As ADODB.Recordset
Set Rst = New ADODB.Recordset
Set Rst = Base.OpenSchema(adSchemaProviderSpecific, ,
JET_SCHEMA_USERROSTER)
Do Until Rst.EOF
DEBUG.PRINT Rst("COMPUTER_NAME")
DEBUG.PRINT Rst("LOGIN_NAME")
DEBUG.PRINT Rst("CONNECTED")
DEBUG.PRINT Rst("SUSPECT_STATE")
Rst.MoveNext
Loop
Rst.Close
Set Rst = Nothing
End Sub


Un saludo, Víctor Koch.


"Pablo" escribió en el mensaje
news:0b0901c355c3$e07d0820$
Hola: Tengo una aplicacion multiusuario que trabaja en una
red local, con una base de datos Access 2000. Cuando
quieor compactar la base de datos, si hay un usuario
conectado a la base no me permite compactarla. Mi pregunta
es, como puedo hacer mediante codigo para desconectar a
todos los usuarios de una base de datos y luego
compactarla?. Gracias
Respuesta Responder a este mensaje
#2 Nelson
30/07/2003 - 05:33 | Informe spam
Yo lo hago de esta manera:

A una hora determinada, por ejemplo a las 00:00 cierro todos los
ejecutables, y así se cierra la base de datos. A cada uno de los
ejecutables, los distingo por un número de puesto único, por ejemplo 1, 2, 3
...

Mediante otro ejecutable, que está corriendo permanente y que lo pongo en el
directorio de Inicio de Windows, vuelvo a arrancar los ejecutables, pero con
una diferencia:

El ejecutable que está en la PC 1 arranca a las 00:01 y los demás arrancan a
las 00:05, (ó 00:10 ó 00:15), de esta manera, el ejecutable que está en la
PC 1 ejecuta este procedimiento:

Dim NombreViejo As String, NombreNuevo As String, Camino As String,
Directorio As String, NombreArchivo As String

'Compacto la base y la llamo Base1, pero primero me aseguro que no haya otra
Base1 en el mismo directorio
If Dir(Directorio & "base1.mdb") <> "" Then Kill Directorio & "base1.mdb"

Camino = Directorio & NombreArchivo
CompactDatabase Directorio & NombreArchivo, Directorio & "base1.mdb", , ,
CONEXION, (yo tengo una clave que esta dentro la constante Conexión)

'Transformo la Base Original en BaseOld
NombreViejo = Directorio & NombreArchivo: NombreNuevo = Directorio &
"BaseOld.mdb"

'Me aseguro que no haya ninguna BaseOld en el mismo directorio
If Dir(NombreNuevo) <> "" Then Kill NombreNuevo
Name NombreViejo As NombreNuevo 'Base Original transformada en BaseOld

'Transformo Base1 en Base Original
NombreViejo = Directorio & "base1.mdb": NombreNuevo = Directorio &
NombreArchivo
Name NombreViejo As NombreNuevo 'Base1 transformada en base original

'Elimino BaseOld.mdb
Kill Directorio & "BaseOld.mdb"

El resto de los ejecutables, al arrancar más tarde, no presentan problemas,
el tiempo en que deberían arrancar los ejecutables de los distintos puestos,
debería estar en relacón con el tiempo en que se tarda en realizar la
compactación de la base de datos.

Saludos

Nelson
"Pablo" escribió en el mensaje
news:0b0901c355c3$e07d0820$
Hola: Tengo una aplicacion multiusuario que trabaja en una
red local, con una base de datos Access 2000. Cuando
quieor compactar la base de datos, si hay un usuario
conectado a la base no me permite compactarla. Mi pregunta
es, como puedo hacer mediante codigo para desconectar a
todos los usuarios de una base de datos y luego
compactarla?. Gracias
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida