** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Compactar con código un único End y tres Front.
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoCompactar con código un único End y tres Front.

 Responder Responder
Autor
Mensaje
katsumoto Ver desplegable
Habitual
Habitual


Unido: 24/Julio/2011
Localización: Ciudad Real
Estado: Sin conexión
Puntos: 171
Enlace directo a este mensaje Tema: Compactar con código un único End y tres Front.
    Enviado: 10/Noviembre/2019 a las 12:34

Desde 1995 –con sucesivas actualizaciones a las también sucesivas versiones de la plataforma ACCESS- vengo trabajando con tres .accdb Front Back que vienen a constituir una especie de suite de Gestión Agrícola. Estos tres ficheros atacan un único Back End.

Últimamente he creado un nuevo Front Back -sin siquiera vínculos a tablas- cuyo único papel se limitaría a recoger tres llamadas (evento Al hacer clic en tres botones en el casi único formulario de que consta) a los tres Front Back básicos de que he hablado antes, ello mediante el método Application.FollowHyperlink (perdón si no utilizo adecuadamente los términos de VBA: no es mi fuerte...) que me funciona perfectamente.

El caso es que en el Ribbon del nuevo Front Back de puente creado ahora, quisiera incorporar en una de sus tab cuatro botones que al ser accionados ejecutasen la tarea de compactar/reparar, sucesivamente claro, el Back End común y único a la suite, y cada uno de los tres Front Back de las aplicaciones básicas.

Lo he intentado todo, método Application.FollowHyperlink, uso de la función Shell para ejecutar un .bat específicamente creado al efecto: Shell ("C:\Agricultura\CompactarTablas.bat"), ubicado en la ruta indicada y cuyo texto plano es el siguiente: C:\Agricultura\AGRICULTURA_Tablas.accdb /compact , siendo su único objetivo el compactar el Back End; también he intentado una combinación de ambas metodologías…  pero nada, no hay forma. Una cosa curiosa: cuando ejecuto el .bat con la Shell, me abre la base de datos –y la deja abierta..- pero no la compacta, sin embargo si ejecuto con doble clic el .bat la compactación se realiza, o sea que el .bat está bien escrito...

Alguien me puede ayudar, por favor?

Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14732
Enlace directo a este mensaje Enviado: 10/Noviembre/2019 a las 18:53
No se si te entendí... ¿quieres compactar una base de datos distinta a la activa?

Yo tengo este código para eso:

Function CompactarOtraBDD(strFullPath As String)
    On Error GoTo ErrorHandler
    
    Dim strNewNombre    As String
    Dim strBackend      As String
    
    ' Función para compactar una base de datos externa
    
    ' Comprobamos si alguien está conectado a la base de datos. Simplemente miramos si existe el laccdb
    If Len(Dir(Replace(strFullPath, ".accdb", ".laccdb"), vbArchive)) > 0 Then
        ' Parece bloqueado
        MsgBox "La base de datos está en uso. Espere a que sea liberada para poder compactarla.", vbExclamation, cStrTitMb
        Exit Function
    End If
    
    strNewNombre = Replace(strFullPath, ".accdb", "_Backup.accdb")
    If Len(Dir(strNewNombre, vbArchive)) > 0 Then
        ' Borramos backup previo
        Kill strNewNombre
    End If
    
    DBEngine.CompactDatabase DamePathCompletoDatos, strNewNombre
    ' Borramos el BackEnd
    Kill strFullPath
    
    ' Renombramos el backup
    Name strNewNombre As strFullPath

ExitProcedure:
    On Error GoTo 0
    Exit Function
ErrorHandler:
    Select Case Err.Number
        Case 0
        Case Else
            MsgBox "Error " & Err.Number & " - " & Err.Description & vbNewLine & _
                    "Procedimiento: CompactarOtraBDD" & vbNewLine & _
                    "Módulo: " & Application.VBE.ActiveCodePane.CodeModule.Name, vbCritical, "AVISO"
            Resume ExitProcedure
    End Select
End Function

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
katsumoto Ver desplegable
Habitual
Habitual


Unido: 24/Julio/2011
Localización: Ciudad Real
Estado: Sin conexión
Puntos: 171
Enlace directo a este mensaje Enviado: 10/Noviembre/2019 a las 19:14
Gracias por responder, Xavi.
Intentaré descifrar tu función, pero... Wacko
Arriba
katsumoto Ver desplegable
Habitual
Habitual


Unido: 24/Julio/2011
Localización: Ciudad Real
Estado: Sin conexión
Puntos: 171
Enlace directo a este mensaje Enviado: 11/Diciembre/2019 a las 20:31
Simplemente por cerrar el hilo.

La 'solución', supongo que pedestre, que he utilizado es crear un bat del tipo:

"C:\Program Files (x86)\Microsoft Office\Office14\MSAccess.exe" "C:\CarpetaContenedora\MiBaseDeDatos.accdb" /compact

He ubicado ese bat en la carpeta que antes he llamado 'Carpeta contenedora' y en el Ribbon de una BD puente que se limita a ser enlace de las aplicaciones que pretendía compactar, Módulo CallBacks,  he escrito simplemente las líneas:

 Case "btnN"
        Shell ("C:\CarpetaContenedora\NombreDelBat.bat")

Como he dicho por ahí arriba se puede cerrar el hilo.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable