Función en vba para realizar un backup de BD en Access
Tengo una base de datos y quiero crear una función para realizar un backup del archivo .accbd, busque la pregunta aquí pero no tienen respuesta en concreto solo pone que lo ha solucionado pero no dice como,
De momento por o que investigue access no permite eso internamente con una base de datos activa(Abierta) pero encontré en internet(google) un comando que me puede servir. Aquí pongo mi código.
----------------------------------------------------------------
Dim cadena As String
cadena = "XCOPY C:\bd.mdb C:\backup\copy.mdb"
Shell cadena, vbNormalFocus
------------------------------------------------------------------
Al llamar al procedimiento funciona pero me arroja la siguiente pantalla:
----------------Cuadro de símbolo de sistema------------------------
¿C:\backup\copy.mdb especifica un archivo o directorio como destino
<F = Archivo, D = Directorio>?
------------------------------------------------------------------------------
Obviamente ese cuadro de confirmación entorpece el procedimiento automatizado ala hora de hacer backups porque no quiero que salga.
Si coloco "Shell cadena, vbHide" no me aparece pero tampoco hace la copia porque obviamente requiere especificar F o D
Encontré que colocando "Echo F | XCOPY origen destino" funciona saltándose la pregunta colocando automáticamente "F" de archivo.
Lo probé en el símbolo de sistema y funciona de maravilla
**************Ventana simbolo del sistema*************************
C:\Documents and Settings\Administrador>ECHO F | XCOPY C:\bd2.mdb C:\backup\copy
.mdb
¿C:\backup\copy.mdb especifica un archivo
o un directorio como destino
(F = archivo, D = directorio)? F
C:\bd2.mdb
1 archivos copiados
*************************** ************************* *********
Aplicado a mi código quedaria:
------------------------------------------------------------
Dim cadena As String
cadena = "ECHO F | XCOPY C:\bd2.mdb C:\backup\copy.mdb"
Shell cadena, vbNormalFocus
-------------------------------------------------------------
Pero al llamar al procedimiento mediante el botón me arroja el error:
*********Microsoft Visual Basic********************
Se ha producido el error '53' en tiempo de ejecución:
Archivo no encontrado
*********************************************
Si le doy Depurar me arroja error la linea:
-------------------------------------
Shell cadena, vbNormalFocus
-------------------------------------
Con lo que significa que la variable "cadena" no es aceptable con lo que le agregue "ECHO F |".
No entiendo porque si al 'probar el comando directamente al símbolo del sistema ¡FUNCIONA! A la perfección, se saltala pregunta colocando "F" automáticamente pasando directo a copiar el archivo.
Pero en access "NO funciona".
Lo que me supone es que debe ser error con el símbolo "|" pero no se.
Si alguien sabe cual es el error en el código me lo podría decir o si conocen algún otro método (dentro de access y no con un formulario externo de visual basic o programas ajenos) para sacar una copia de seguridad mientras la base este abierta se los agradecería.
Pd. El archivo es.mdb porque estoy haciendo pruebas con ese antes de pasar a mi base de datos y estoy usando access 2010.
De momento por o que investigue access no permite eso internamente con una base de datos activa(Abierta) pero encontré en internet(google) un comando que me puede servir. Aquí pongo mi código.
----------------------------------------------------------------
Dim cadena As String
cadena = "XCOPY C:\bd.mdb C:\backup\copy.mdb"
Shell cadena, vbNormalFocus
------------------------------------------------------------------
Al llamar al procedimiento funciona pero me arroja la siguiente pantalla:
----------------Cuadro de símbolo de sistema------------------------
¿C:\backup\copy.mdb especifica un archivo o directorio como destino
<F = Archivo, D = Directorio>?
------------------------------------------------------------------------------
Obviamente ese cuadro de confirmación entorpece el procedimiento automatizado ala hora de hacer backups porque no quiero que salga.
Si coloco "Shell cadena, vbHide" no me aparece pero tampoco hace la copia porque obviamente requiere especificar F o D
Encontré que colocando "Echo F | XCOPY origen destino" funciona saltándose la pregunta colocando automáticamente "F" de archivo.
Lo probé en el símbolo de sistema y funciona de maravilla
**************Ventana simbolo del sistema*************************
C:\Documents and Settings\Administrador>ECHO F | XCOPY C:\bd2.mdb C:\backup\copy
.mdb
¿C:\backup\copy.mdb especifica un archivo
o un directorio como destino
(F = archivo, D = directorio)? F
C:\bd2.mdb
1 archivos copiados
*************************** ************************* *********
Aplicado a mi código quedaria:
------------------------------------------------------------
Dim cadena As String
cadena = "ECHO F | XCOPY C:\bd2.mdb C:\backup\copy.mdb"
Shell cadena, vbNormalFocus
-------------------------------------------------------------
Pero al llamar al procedimiento mediante el botón me arroja el error:
*********Microsoft Visual Basic********************
Se ha producido el error '53' en tiempo de ejecución:
Archivo no encontrado
*********************************************
Si le doy Depurar me arroja error la linea:
-------------------------------------
Shell cadena, vbNormalFocus
-------------------------------------
Con lo que significa que la variable "cadena" no es aceptable con lo que le agregue "ECHO F |".
No entiendo porque si al 'probar el comando directamente al símbolo del sistema ¡FUNCIONA! A la perfección, se saltala pregunta colocando "F" automáticamente pasando directo a copiar el archivo.
Pero en access "NO funciona".
Lo que me supone es que debe ser error con el símbolo "|" pero no se.
Si alguien sabe cual es el error en el código me lo podría decir o si conocen algún otro método (dentro de access y no con un formulario externo de visual basic o programas ajenos) para sacar una copia de seguridad mientras la base este abierta se los agradecería.
Pd. El archivo es.mdb porque estoy haciendo pruebas con ese antes de pasar a mi base de datos y estoy usando access 2010.
Respuesta de xavi -ae soft-
1