Respaldar desde Prog. en Ejecución

20/02/2004 - 18:54 por Manuel0 | Informe spam
Hola Amigos

Existe alguna forma de generar un respaldo de la base de datos desde mi
aplicación en ejecución.

AL instalar la aplicación la base de datos queda en una carpeta BASE, la
idea es respaldar toda la carpeta BASE en algún otro Directorio, CD o
Diskette. Ojalá también el respaldo se pueda hacer en Zip(ojalá en forma
automática a lo mas que el usuario elija el camino), sería ideal .
Desde ya muchas gracias.
Manuel G.A.

Preguntas similare

Leer las respuestas

#1 SAGM
23/02/2004 - 19:24 | Informe spam
Te sugiero utilizar una aplicacion de terceros en este caso el cobian backup
es gratis.
esta es la web: http://www.educ.umu.se/~cobian yo lo utilizo y me ha dado
buenos resultados, este te permite hacer respaldo en formato zip de tus
archivos aunque estos esten abiertos.


"Manuel0" escribió en el mensaje
news:
Hola Amigos

Existe alguna forma de generar un respaldo de la base de datos desde mi
aplicación en ejecución.

AL instalar la aplicación la base de datos queda en una carpeta BASE, la
idea es respaldar toda la carpeta BASE en algún otro Directorio, CD o
Diskette. Ojalá también el respaldo se pueda hacer en Zip(ojalá en forma
automática a lo mas que el usuario elija el camino), sería ideal .
Desde ya muchas gracias.
Manuel G.A.


Respuesta Responder a este mensaje
#2 Baltazar Moreno
27/02/2004 - 08:07 | Informe spam
Bueno, tengo un par de rutinar que con ayuda de la gente del foro he podido
terminar, a mi me funcionan muy bien, yo las tengo en procedimientos de mi
menu principal.

Solo tiene que cambiar los paths y nombres que utilizo
*-*
*Para respaldar a otra carpeta- *
*-*
lcAqui = _vfp.DefaultFilePath+"\"
set defa to c:\veterinaria\tablas\
SELE A
USE USUARIOS
count all for usuarios.us_falla == .T. to liDentro
IF liDentro > 1
MESSAGEBOX ("Hay usuarios dentro del sistema, No se puede realizar esta
operacion",0+16,"Respaldo de Información")
RETURN
ENDIF
scan
replace usuarios.us_falla with .T.
endscan
use
set defa to (lcAqui)
*close data
titulo = "Respaldo de Archivos"
*msg = "Seleccione Carpeta ORIGEN"
*origen = GETdir('c:','Respaldo de Información', msg) &&VFP7
origen = GETdir('c:\veterinaria', msg) &&VFP6
IF EMPTY(origen) && Esc or CANCEL pressed
errata()
RETURN
ENDIF
IF alltrim(origen)=="C:\VETERINARIA\"
msg = "La carpeta c:\veterinaria no puede ser copiada"+CHR(13)+;
"por favor seleccione la carpeta que contiene las tablas"
messagebox(msg,16+0+0,titulo)
errata()
RETURN
ENDIF

*ocupa = 0
gnDbcnumber = ADIR(gaDatabase, '*.*') && Crea la matriz
FOR nCount = 1 TO gnDbcnumber && Bucle para número de bases de archivos
ocupa = ocupa + gaDatabase(nCount,2) && tamaño que ocupa el backup
ENDFOR
*msg = "Seleccione Carpeta DESTINO"
*destino = GETdir('c:','Respaldo de Información',msg) &&VFP7
destino = GETdir('c:',msg)&&VFP6
IF EMPTY(destino) && Esc or CANCEL pressed
errata()
RETURN
ENDIF
*IF LIKE(origen+'*',destino)
msg = "ERROR: El directorio destino, no puede encontrarse dentro del
directorio fuente"+chr(13)+;
" Seleccione diferente ruta de destino"
messagebox(msg,16+0+0,titulo)
errata()
return
endif
*tamaño = diskspace(left(destino,2)) && Espacio libre en disco destino
if (ocupa > tamaño)
msg = "No hay suficiente espacio en el disco duro destino para hacer la
copia"
messagebox(msg,16+0+0,titulo)
errata()
return
endif
*carpeta2 = destino
carpeta = origen
carpeta = left(alltrim(carpeta), len(alltrim(carpeta)) -1)
carpeta2 = alltrim(carpeta2)
ofs_bmj_za=createobject("scripting.filesystemobject")
ofs_bmj_za.copyfolder(carpeta, carpeta2)
*USE c:\veterinaria\tablas\USUARIOS
scan
IF MUsuario <> USUARIOS.us_Usuario
REPLACE USUARIOS.us_Falla WITH .F.
ENDIF
endscan
use
set defa to (lcAqui)
*msg = "Finalizó el Backup de las Bases de Datos"
messagebox(msg,48+0+0,titulo)
*function errata
USE c:\veterinaria\tablas\USUARIOS
scan
IF MUsuario <> USUARIOS.us_Usuario
REPLACE USUARIOS.us_Falla WITH .F.
ENDIF
endscan
set defa to (lcAqui)
use
endfunc
*-- *
*-- *




=*--*
*Para respaldar a un archivo ZIP usando WinZip- *
*-- *
*lcAqui = _vfp.DefaultFilePath+"\"
set defa to c:\veterinaria\tablas\
use
SELE A
USE USUARIOS
count all for usuarios.us_falla == .T. to liDentro
IF liDentro > 1
MESSAGEBOX ("Hay usuarios dentro del sistema, No se puede realizar esta
operacion",0+16,"Respaldo en ZIP")
RETURN
ENDIF
scan
replace usuarios.us_falla with .T.
endscan
use
set defa to (lcAqui)
*use
close databases
mCarpeta=GETDIR("c:\veterinaria","Seleccione Carpeta a Comprimir")
IF EMPTY(mCarpeta)
errata()
RETURN
ENDIF
IF alltrim(mCarpeta)=="C:\VETERINARIA\"
msg = "La carpeta c:\veterinaria no puede ser ZIPeada"+CHR(13)+;
"por favor seleccione la carpeta que contiene las tablas"
messagebox(msg,16+0+0,"Respaldo en ZIP")
errata()
RETURN
ENDIF
*como "Respaldo_"+ALLTRIM(STR(DAY(DATE())))+"-"+ALLTRIM(STR(MONTH(DATE())))+"-"+AL
LTRIM(STR(YEAR(DATE())))
mFile = PUTFILE('Archivo ZIP:', (como), 'zip')
IF EMPTY(mFile) && Esc pressed
errata()
RETURN
ENDIF

IF LIKE(mCarpeta+'*',mFile)
messagebox("No puede Grabar el archivo zip dentro de la carpeta a
comprimir",48+0+0,"Error al comprimir")
errata()
return
endif

crear = "winzip -a -r -p -ex "+mFile+" "+mCarpeta

oZip = createobject("WScript.Shell")
oZip.Run(crear, 0,.T.)
*USE c:\veterinaria\tablas\USUARIOS
scan
IF MUsuario <> USUARIOS.us_Usuario
REPLACE USUARIOS.us_Falla WITH .F.
ENDIF
endscan
use
set defa to (lcAqui)
*msg = "Finalizó el Backup en ZIP de las Bases de Datos"
messagebox(msg,48+0+0,"Respaldo en ZIP")
*function errata
USE c:\veterinaria\tablas\USUARIOS
scan
IF MUsuario <> USUARIOS.us_Usuario
REPLACE USUARIOS.us_Falla WITH .F.
ENDIF
endscan
use
set defa to (lcAqui)
endfunc
*-- *
*-- *

El campo us_falla de la tabla de usuarios me indica que usuarios están
dentro del sistema y se pone en .T. para evitar el acceso al sistema de
estos ( mientras se ejecuta la rutina de respaldo ) mediante una validacion
de usuarios en el form login, etc...

Bueno, espero te sirva.


***Estoy seguro que se puede optimizar, con gusto acepto sus
recomendaciones.***
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida