Backup de base de datos dividida con ruta relativa
Quería saber si me podrían ayudar, tengo una base de datos que la dividí para que trabaje en entorno de red, y necesito que mediante un botón pueda realizar una backup; y que me permita hacerla en la posición que yo escoja.
2 Respuestas
Si combinas este ejemplo de Neckkito: http://neckkito.xyz/nck/index.php/ejemplos/17-seguridad/140-backup-bd-dividida-en-tiempo-de-ejecucion con lo que explica en este otro: http://neckkito.xyz/nck/index.php/ejemplos/18-codigo/152-quiero-navegar-y-seleccionar-un-archivo, lo tienes resuelto.
Hola, buen día, Sveinbjorn.
Bueno he estado tratando de combinarlo; pero me sale error en el modulo de la backup, justo en este línea Dim fso As Scripting.FileSystemObject y me dice que no lo he definido, primero busco el archivo a copiar; pero cuando quiero copiarlo me sale error.
Si puedes echarme una mano.
¿Has registrado las referencias que se mencionan en los ejemplos? Para que funcione el Filedialog has de activar la referencia "Microsoft Office x.xx Library"
¿Y esta otra librería también la has registrado: "Microsoft Scripting Runtime"?
El error que comentas en esa línea es porque te faltan librerías por registrar
Hola buen día.
Si es raro ya seleccione todas la librerías pero la verdad no logro que me funcione.
Gracias.
- Compartir respuesta
En el evento del botón deberías llamar a la rutina HacerCopia cuyo código te copio más abajo.
Verás que este código llama a dos funciones que también te copio y que te pueden ser útiles para otras cosas.
Lógicamente deberás cambiar el nombre de la tabla que he usado en el ejemplo (Membres) por el de una tabla vinculada de tu base de datos.
Con ello tendrás una copia de la base de datos que contiene las tablas.
Si quieres hacer una copia de tu BDD front-end, entonces la ruta la puedes obtener así:
Ruta=currentdb.Name
Finalmente, decirte que cuando lances esta rutina no deberás tener ninguna tabla abierta, ni en la ventana de la BDD, ni con código (recordset) ni con un formulario que esté vinculado a una tabla.
Si no lo cierras todo la copia fallará al activarse el archivo .laccdb
Debes tener en cuenta que esta rutina siempre nombra la copia de la misma forma, por lo que deberías:
. Borrar primero la copia previa con un Kill, o
. Modificar esta rutina para que añada al nombre de la copia, por ejemplo, la fecha y hora del dia (función Now).
Espero que te sirva
Sub HacerCopia()
'Requiere Microsoft Office 11.0 Object Library.
Dim Ruta As String, Destino As String, NombreBDD As String
Dim FSO As New FileSystemObject, Carpeta As String
'Obtengo la ruta de la BDD de datos a través de una tabla vinculada
Ruta = CurrentDb.TableDefs("Membres").Connect
'Esto me da un string como este: ;DATABASE=\\Mac\Home\Documents\Access\AJPBS_Taller\AASALDades.accdb
'Ahora quito la parte izquierda de la cadena
Ruta = Replace(Ruta, ";DATABASE=", "")
'Ahora tengo cargada en la variable ruta la duta de la BDD de datos: \\Mac\Home\Documents\Access\AJPBS_Taller\AASALDades.accdb
'Pido al usuario que seleccione la carpeta donde quiere hacer la copia
Destino = EscojeCarpeta(Ruta, "Escoge la carpeta ddonde quieres dejar la copia de la base de datos", "Escoje")
'Verifico que hayan slecionado una una carpeta
If Destino = "" Then Exit Sub
'Obtengo el nombre de la base de datos
NombreBDD = BuscaNombreArchivo(Ruta)
'Añado al nombre del archivo la partícula '_BackUp'
NombreBDD = Replace(NombreBDD, ".", "_BackUp.")
'Completo la ruta de destino
Destino = Destino & "\" & NombreBDD
'Hago la copia
FSO.CopyFile Ruta, Destino, True
End Sub
Function EscojeCarpeta(ByVal RutaBase As String, Missatge As String, TitolBoto As String) As String
'Abre un explorador de Windows para escojer una carpeta
'Requiere Microsoft Office 11.0 Object Library.
Dim Explorador As Office.FileDialog
Set Explorador = Application.FileDialog(msoFileDialogFolderPicker)
'Opciones: msoFileDialogOpen, msoFileDialogSaveAs, msoFileDialogFolderPicker
With Explorador
.AllowMultiSelect = False
.Title = Missatge If Right(RutaBase, 1) <> "\" Then RutaBase = RutaBase & "\"
.InitialFileName = RutaBase .ButtonName = TitolBoto
If .Show = True Then
EscojeCarpeta = .SelectedItems(1)
Else
EscojeCarpeta = ""
End If
End With
End Function
Function BuscaNombreArchivo(Ruta As String) As String
'Devuelve el nombre del archivo a partir de una ruta completa
Dim Posicio As Integer, DarrerMatch
Do
Posicio = InStr(Posicio + 1, Ruta, "\")
If Posicio <> 0 Then DarrerMatch = Posicio Else Exit Do
Loop
BuscaNombreArchivo = Right(Ruta, Len(Ruta) - DarrerMatch)
End Function
Hola buen día.
He estado intentando con el código que me facilitaste; pero no logro que funcione, copie las funciones y luego las llame con un botón para seleccionar carpeta y la otra para la backup, pero parte del código me lo coloca en rojo y no me deja avanzar.
Gracias.
.Title = Missatge If Right(RutaBase, 1) <> "\" Then RutaBase = RutaBase & "\"
.InitialFileName = RutaBase .ButtonName = TitolBoto
En el evento del botón "Al hacer click" únicamente has de llamar a la rutina HacerCopia
Call HacerCopia
Es esta rutina la que llama a las Funciones
Respecto a las líneas que se te ponen en rojo, tiene toda la pinta que no has cargado la libreria Microsoft Office 11.0 Object Library u otra versión superior (yo uso la Microsoft Office 16.0 Object Library)
Para cargarla, cuando estés en la ventana del módulo VBA, en el menú superior escoge Herramientas--> Referencias. Ahí te aparaceran todas las librerías disponibles. Busca la 11 o superior i la activas marcándola con un "tic".
Hola buen día.
Transcribí tu ejemplo tal cual y registre las librerias; pero a un no funciona, si eres tan amable y me das una idea de que puede ser.
Gracias.
Te reproduzco a continuación las librerías que estoy usando para que podamos sincronizarnos
Pruba a conectarlas. La de Outlook no la necesitas.
También te adjunto imagen del programa y la función para que puedas chequear que la tengas bien.
Yo lo que compilado y lo he ejecutado, y funciona correctamente.
Caray que ya seleccione las librerías que me dices y revise el codigo; pero la verdad no encuentro el problema y sigo con el mismo error.
Seria posible que me envíes un ejemplo que te funcione pues la verdad, no encuentro el error.
Gracias.
Ya he hecho la BDD y funciona.
He estado probando sin algunas de las librerías y la que me daba el error que me indicabas era la Microsoft Scripting Runtime.
¿Ésta también la tienes activada?
Si sí, dame un e-mail donde mandarte la BDD
Si no, actívala y pruébalo de nuevo.
- Compartir respuesta