Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Reparar y compactar base de datos

108 views
Skip to first unread message

Alberto

unread,
Jan 9, 2004, 9:22:47 AM1/9/04
to
Me gustaria compactar y reparar una base de datos
mediante código. Anteriormente se han hecho algunas veces
esta pregunta pero siempre se ha respondido con el código
de compactar una base de datos y no con el de reparar.
¿Con esto yo puedo suponer que con compactar una base
de datos ya es suficiente?

Gracias.

Búho

unread,
Jan 9, 2004, 9:45:51 AM1/9/04
to
Hola. De la ayuda de Access:
Function RepairDatabase(strSource As String, _
strDestination As String) As Boolean
' Input values: the paths and file names of
' the source and destination files.

' Trap for errors.
On Error GoTo error_handler

' Compact and repair the database. Use the return value of
' the CompactRepair method to determine if the file was
' successfully compacted.
RepairDatabase = _
Application.CompactRepair( _
LogFile:=True, _
SourceFile:=strSource, _
DestinationFile:=strDestination)

' Reset the error trap and exit the function.
On Error GoTo 0
Exit Function

' Return False if an error occurs.
error_handler:
RepairDatabase = False

End Function

Esta función anterior compacta y repara la base de datos especificada (.mdb)
o el archivo de proyecto de Microsoft Access (.adp). Devuelve un Boolean;
Verdadero si el proceso se ha realizado correctamente.

El archivo de origen no debe ser la base de datos actual o no debe abrirlo
ningún otro usuario, ya que al llamar a este método, se abrirá el archivo en
modo exclusivo.

--

Saludos desde Valladolid
Francisco Javier García Aguado
---
http://www.buho.tk [http://www.clikear.com/webs/accessbhuo/index.html]
http://groups.msn.com/Access2000VisualBasic/
=======================================
Web de Access de Juan M Afan de Ribera
http://www.juanmafan.tk
=======================================
"Alberto" <anon...@discussions.microsoft.com> escribió en el mensaje
news:0d0101c3d6bc$0df74350$a101...@phx.gbl...

Cheeky

unread,
Jan 9, 2004, 9:58:00 AM1/9/04
to
Que yo sepa, las dos acciones, Access las realiza en el mismo proceso.

Si metes esto en un módulo, puedes llamar a la función POMPACTARPACO cuando
quieras para reparar y compactar tu mdb.

Option Compare Database
Option Explicit

'------------------------------------------------------------
' COMPACTAR
' Francisco Javier García Aguado
' Bhúo Julio 2002
' Misterio de este código:
' Con SendKeys "%" lo que hacemos es activar la barra superior de access
' Con SendKeys "h" pasamos al menu H-erramientas
' Con Sendkeys "u" pasamos al menu U-tilidades
' Con Sendkeys "o" pasamos al menu c-O-mpactar y Reparar
' Si alguien define una barra de menús personalizadas, se pueden
' cambiar perfectamente la secuencia de SendKeys
' No es lo que yo quería, pero funciona
'------------------------------------------------------------
Public Function COMPACTARPACO()
On Error GoTo COMPACTAR_Err


SendKeys "%", False
SendKeys "h", False
SendKeys "u", False
SendKeys "o", False


COMPACTAR_Exit:
Exit Function

COMPACTAR_Err:
MsgBox Error$
Resume COMPACTAR_Exit

End Function

"Alberto" <anon...@discussions.microsoft.com> escribió en el mensaje
news:0d0101c3d6bc$0df74350$a101...@phx.gbl...

Cheeky

unread,
Jan 9, 2004, 10:58:01 AM1/9/04
to
Anda, puñetas, y yo chupando cámara al protagonista de la peli.

Si tuviera verguenza, me abría puesto #ff0000.

Cheeky

unread,
Jan 9, 2004, 11:06:28 AM1/9/04
to
Anda, puñetas, y yo chupando cámara al protagonista de la peli.

Si tuviera vergüenza, me hhhhhhhhhhhhhhhhhhhhhabría puesto #ff0000.


Juan M. Afán de Ribera

unread,
Jan 9, 2004, 12:22:05 PM1/9/04
to
Paco, ese método es para Access 2003 (no se si también aparecerá en Access
XP, pero no me suena).

Un método que es común a todas las versiones es DBEngine.CompactDatabase

A partir de la versión 2000 de Access el método RepairDatabase fue absorvido
por el método CompactDatabase que repara y compacta la base de datos en un
solo paso.

--
Saludos desde Barcelona
Juan M. Afán de Ribera
[MVP MS ACCESS]

http://www.juanmafan.tk
http://www.clikear.com/webs4/juanmafan

"Búho" <pacoQU...@nemo.es> escribió en el mensaje
news:%23XzCB9r...@TK2MSFTNGP11.phx.gbl...

Búho

unread,
Jan 9, 2004, 12:34:43 PM1/9/04
to
:-D

Búho

unread,
Jan 9, 2004, 12:42:20 PM1/9/04
to
Si es que no puede ser...con tantas versiones y tan seguidas...
Yo corté por lo sano. Llegué a tener instaladas varias y solo me he quedado
con la 2003.
Así que me hago un lío horroroso de qué es nuevo, que existía o no en tal o
cual versión...en fin...

Juan M. Afán de Ribera

unread,
Jan 9, 2004, 12:48:37 PM1/9/04
to
Yo, cuando he visto esa función que has posteado, me he vuelto loco buscando
el método DBEngine.CompactDatabase y pensaba "Paco se ha olvidado de postear
algo más de código". Pero luego me he dado cuenta de que lo hacías a través
del objeto Application, y además sirve tanto para las mdb como para los adp
:-)

--
Saludos desde Barcelona
Juan M. Afán de Ribera
[MVP MS ACCESS]

http://www.juanmafan.tk
http://www.clikear.com/webs4/juanmafan

"Búho" <pacoQU...@nemo.es> escribió en el mensaje

news:uB4xoft1...@TK2MSFTNGP12.phx.gbl...

Fernando V

unread,
Jan 11, 2004, 1:09:28 AM1/11/04
to
Esto funciona en Acces 2000 y en XP. Ignoro por completo 2003.

DoCmd.RunCommand acCmdCompactDatabase
DoCmd.RunCommand acCmdRepairDatabase

Fernando V

unread,
Jan 11, 2004, 1:51:07 AM1/11/04
to
DoCmd.RunCommand acCmdCompactDatabase
DoCmd.RunCommand acCmdRepairDatabase

Uffff hora de dormir (es la 1 y 40 am, aunque creo que en España son como
las 7).
Dije que esto funciona "correctamente" pero eso es falso. Quise decir que se
escribe y se complila correctamente y hasta aparece en la ayuda sensible y
en la lista de propiedades y métodos.

La pregunta es ¿para qué sirve? para compilar y reparar otras mdb?


Juan M. Afán de Ribera

unread,
Jan 11, 2004, 4:12:59 AM1/11/04
to
Eso es algo que también me pregunto yo, la verdad.

En principio te puedo decir que "parece" funcionar cuando utilizas
automatización (digo parece, porque va tan rápido que mmmmm nose nose nose
nose...), por ejemplo:

Dim app As Access.Application

Set app = New Access.Application

app.OpenCurrentDatabase "c:\neptuno.mdb"

app.RunCommand acCmdRepairDatabase
app.RunCommand acCmdCompactDatabase

app.Quit

Set app = Nothing

eso sí, si la base tiene un formulario de inicio o macro autoexec, debes de
desactivarlo primero, porque sino te dará el famoso mensaje de "la base de
datos no puede ser compactada mientras se está ejecutando código Visual
Basic" (o algo así)

--
Saludos desde Barcelona
Juan M. Afán de Ribera
[MVP MS ACCESS]

http://www.juanmafan.tk
http://www.clikear.com/webs4/juanmafan

"Fernando V" <fvergara...@operamail.com> escribió en el mensaje
news:%23Igoq9A...@TK2MSFTNGP09.phx.gbl...

Búho

unread,
Jan 11, 2004, 5:14:43 AM1/11/04
to
En la pagina:
http://home.clara.net/tkwickenden/coding.htm
donde se comentan las constantes de este metodo, ponen un ejemplo, que
sinceramente al ver el SendKeys, no le he visto muy profundamente. No sé tan
siquiera si funcionará:
http://home.clara.net/tkwickenden/codeex/4.htm

--

Saludos desde Valladolid
Francisco Javier García Aguado
---

0 new messages