Page 1 of 2

Realizar Backup o copias de Seguridad desde FW

Posted: Sun Nov 23, 2008 9:17 am
by dobfivewin
Estimados...

Que rutinas hay para generar backup ZIP,
Estoy tratando de usar HB_ZipFile y no me funciona, conseguí la Libreria y no me dá ningun error de compilación ni de ejecución, pero NO me generar nada.
Que otras opciones con FW tengo?

muchas gracias

david
argentina

Posted: Sun Nov 23, 2008 9:49 am
by Carlos Mora
David,

hb-zip funciona bastante bien. Porque no subís el código que te falla, algún ejemplo, y seguro encontramos que estás haciendo mal.

Un saludo

Re: Realizar Backup o copias de Seguridad desde FW

Posted: Sun Nov 23, 2008 10:22 am
by Manuel Valdenebro
dobfivewin wrote:Que otras opciones con FW tengo?
Aunque estoy de acuerdo con Carlos Mora (yo personalmente uso la utilidad del propio xHarbour), tienes otra opción gratuita que funciona bastante bien: EASYBACKUP. La puedes obtener en www.reportdesigner.info

Es facilmente configurable.

Posted: Sun Nov 23, 2008 9:44 pm
by Johnson
dobfivewin.
copiar & colar

Re: Realizar Backup o copias de Seguridad desde FW

Posted: Sun Nov 23, 2008 10:16 pm
by FiveWiDi
dobfivewin wrote:Estimados...

Que rutinas hay para generar backup ZIP,
Estoy tratando de usar HB_ZipFile y no me funciona, conseguí la Libreria y no me dá ningun error de compilación ni de ejecución, pero NO me generar nada.
Que otras opciones con FW tengo?

muchas gracias

david
argentina
Siempre estoy viendo por todos lados ZIP, ZIP, ZIP, ....

Que se gana con usar ZIP (aparte de ahorrar espacio y dejar un solo fichero)? Que ventajas me proporciona?

Un familiar mio tiene la puñetera manía de usar ZIP (o el compresor que esté de moda). Yo sigo con el COPY. Y la verdad, NUNCA he estado preocupado en como lo voy a recuperar si se da el caso.
Sé que en cualquier PC podré recuperar la copia (DOS y Windows claro).

Y por cierto, nunca falla, y es compatible con las versiones anteriores, de unos ..... 20 años atras quizás.

En fin no puedo ayudarte, debo ser un bicho raro.

Saludos
Carlos G.

Posted: Mon Nov 24, 2008 12:49 am
by Alfredo Arteaga
He incorporado un paso para que mis clientes puedan comprimir la información y me la envíen por correo, para casos de soporte.

Uso esto:

Code: Select all

   // Comprimir archivos (en ZIP)

   aFiles:=Array(ADir(cPath+"*.DBF"))
   nFiles:=aDir(cPath+"*.DBF",aFiles)
   FOR nI=1 TO nFiles
      cDbf:=cPath+aFiles[nI]
      AAdd(aZip,cDbf)
      CursorWait()
   NEXT nI

   FOR nI=1 TO Len(aZip)
      CursorWait()
      HB_ZipFile(cFile,aZip[nI],,,,,.F.)
   NEXT nI

   // Extraer archivos

   aFiles:=HB_GetFilesInZip(cFile)
   HB_UnZipFile(cFile,,.T.,,cPath,aFiles,NIL)
A ellos tambien les resulta muy útil, toda vez que sus propios clientes puedes estar a cientos o miles de kilómetros de distancia y el envio de este tipo de archivos resulta eficiente.

Posted: Mon Nov 24, 2008 9:19 am
by dobfivewin
Estimados

Muchas gracias por su respuesta...

Alfredo tome tu ejemplo y solucioné en parte. En cuando al armado del ZIP andubo perfecto.

Pero la extracción no tuve suerte

Code: Select all

aFiles:=HB_GetFilesInZip(cFile) 
HB_UnZipFile(cFile,,.T.,,cPath,aFiles,NIL)


la consulta que coloco en: cFile,cPath

Entiendo que cFile es el lugar donde se encuentra el ZIP y cPath es donde tengo que colocar la extracción de archivos ?

nuevamente gracias

Ya que estamos... como es la funcion para que me de la carpeta de ubicacion actual

david
argentina

Posted: Mon Nov 24, 2008 10:37 am
by jose_murugosa
Lo mejor que he visto en backup con fivewin y hbzip es xBLite

Un sistema de respaldo de directorios y subdirectorios seleccionados facilmente y permite restaurar también los datos.

Francamente, no se quien lo desarrolló originalmente... pero es gratuito y open source (los fuentes están completos)

Originalmente se desarrolló utilizando como browse SuperBrowse de Manuel Mercado, y mi buen amigo WMormar lo paso a xBrowse, para los que así lo prefieran.

Lo pueden hallar en:

xBLite Versión para SuperBrowse (M. Mercado)
http://www.box.net/shared/zovhrcoz3f

xBLite Versión modificada por WMormar para xBrowse
http://www.box.net/shared/v4ijq2olgq

Espero que les sean útiles y desde aquí mi gratitud a quienes participaron en el desarrollo de ambas versiones.

Posted: Mon Nov 24, 2008 3:25 pm
by carlos vargas
los desarrolladores originales de xBackupLite

Kleyber y un servidor, y ademas hay una version mejorada por karihna.

:-)

un saludo a aquellos que usan xBackupLite, el cual fue un aporte para todos mas que nada para demostrar el poder de fivewin y harbour.

salu2

Posted: Mon Nov 24, 2008 4:04 pm
by karinha
carlos vargas wrote:los desarrolladores originales de xBackupLite

Kleyber y un servidor, y ademas hay una version mejorada por karihna.

:-)

un saludo a aquellos que usan xBackupLite, el cual fue un aporte para todos mas que nada para demostrar el poder de fivewin y harbour.

salu2
Disponible en:

http://www.fivewin.com.br/exibedicas.asp?id=822

un gran saludo a mi querido amigo Carlos Vargas.

Saludos.

Posted: Mon Nov 24, 2008 5:10 pm
by Kleyber
carlos vargas wrote:Kleyber y un servidor...
llamado Carlos Vargas.

Saludos,

Posted: Tue Nov 25, 2008 7:36 am
by dobfivewin
Muchas gracias por vuestras respuestas

instalé y probé xBLite y me parece MUY BUENO opción :D .

Ahora estoy tratando de incorporar algo más simple y automático para que el usuario no tenga que hacer mucho....

es por eso que necesito saber:

Para la la extracción
Código:

Code: Select all

aFiles:=HB_GetFilesInZip(cFile) 
HB_UnZipFile(cFile,,.T.,,cPath,aFiles,NIL) 
la consulta que coloco en: cFile,cPath

Entiendo que cFile es el lugar donde se encuentra el ZIP y cPath es donde tengo que colocar la extracción de archivos ?

Ya que estamos... como es la funcion para que me de la carpeta de ubicacion actual

Posted: Wed Nov 26, 2008 4:29 pm
by dobfivewin
Estimados

Gracias a Alfredo Arteaga logre hacer funcionar el armado de backup en ZIP

les dejo lo armado a modo de ejemplo...

Code: Select all

#include 'dob.ini'

static mUBI_ORI
static mUBI_DES
static mNOMARCHIVO

Function BackupZIP()

local oDlgCar 
local lSalir:= .f.
local oFont1

dbcloseall()

DEFINE FONT oFont1 NAME 'Arial' SIZE 0,-15 BOLD

DEFINE DIALOG oDlgCar FROM 0, 0 TO 12, 80 ;
              TITLE 'BACKUP de INFORMACION'

  
   @ 1, 8 BUTTON 'Armar Backup'  OF oDlgCar SIZE 50, 12 ;
			           ACTION ( ArmarBackup(1) )


   @ 2, 8 BUTTON 'Traer Backup'  OF oDlgCar SIZE 50, 12 ;
			           ACTION ( ArmarBackup(2) )


   @ 3, 8 BUTTON 'Salir' OF oDlgCar SIZE 50, 12 ;
	               ACTION ( oDlgCar:End() )

ACTIVATE DIALOG oDlgCar CENTERED

dbcloseall()
return .t.

*-----------------------------------------------------------------------------
Function ArmarBackup(Arma1Extrae2)

local oDlgCar 
local lSalir:= .f.
local oFont1

local oUBI_ORI , oUBI_DES
local xUBI_ORI:=CurDrive()+":\"+CurDir()+"\"

mUBI_ORI:=xUBI_ORI+SPACE(60-LEN(xUBI_ORI))
mUBI_DES:=xUBI_ORI+SPACE(60-LEN(xUBI_ORI))
mNOMARCHIVO:=SPACE(20) 

dbcloseall()

DEFINE FONT oFont1 NAME 'Arial' SIZE 0,-9 //BOLD

DEFINE DIALOG oDlgCar FROM 0, 0 TO 15, 80 ;
              TITLE If(Arma1Extrae2==1,'ARMA','EXTRAE`')+' BACKUP de INFORMACION'

   @ 1.750, 1 SAY 'Carpeta de Origen' of oDlgCar

   @ 1.500,10 BUTTON 'Buscar' OF oDlgCar  SIZE 20, 10 Font oFont1 ;
                     ACTION( mUBI_ORI:=DIRECMain() ,;
                             mUBI_ORI:=alltrim(mUBI_ORI)+'\' ,;
                             mUBI_ORI:=mUBI_ORI+space(60-len(mUBI_ORI)) ,;
                             oUBI_ORI:refresh() )

   @     2,10 GET oUBI_ORI var mUBI_ORI of oDlgCar


   @ 2.625, 1 SAY 'Carpeta de Destino' of oDlgCar

   @ 2.300,10 BUTTON 'Buscar' OF oDlgCar  SIZE 20, 10 Font oFont1 ;
                     ACTION( mUBI_DES:=DIRECMain() ,;
                             mUBI_DES:=alltrim(mUBI_DES)+'\' ,;
                             mUBI_DES:=mUBI_DES+space(60-len(mUBI_DES)) ,;
                             oUBI_DES:refresh() )

   @     3,10 GET oUBI_DES var mUBI_DES of oDlgCar

   @ 3.500, 1 SAY 'Nombre de Archivo ZIP' of oDlgCar

   @     4,10 GET mNOMARCHIVO of oDlgCar

   If Arma1Extrae2 == 1

     @ 4, 10 BUTTON 'Generar Backup'  OF oDlgCar SIZE 50, 12 ;
	  		            ACTION ( Backup1(alltrim(mNOMARCHIVO),alltrim(mUBI_ORI),alltrim(mUBI_DES)) ,;
		  	                    oDlgCar:End() )
   Else

     @ 4, 10 BUTTON 'Extraer Backup'  OF oDlgCar SIZE 50, 12 ;
	  		            ACTION ( Backup2(alltrim(mUBI_DES),alltrim(mUBI_ORI),alltrim(mNOMARCHIVO)) ,;
		  	                    oDlgCar:End() )
   EndIf


   @ 4, 20 BUTTON 'Salir' OF oDlgCar SIZE 50, 12 ;
	               ACTION ( oDlgCar:End() )

ACTIVATE DIALOG oDlgCar CENTERED

dbcloseall()
return .t.

*-----------------------------------------------------------
Function Backup1(cFile,cPath,mUBI_DES,cPass)

local aFiles , nI , aZip:={} , nFiles , cDbf 

If FILE(mUBI_DES+cFile+'.zip') .and. !MsgNoYes(oemtoansi('Archivo Existente, desea Reemplezar ?'),;
                                oemtoansi('Elija opcion SI/NO') )
  return .t.

EndIf
If FILE(cFile+'.zip')
  FErase(cFile+'.zip') 
EndIf

aFiles:=Array(ADir(cPath+"*.DBF")) 
nFiles:=aDir(cPath+"*.DBF",aFiles) 
FOR nI=1 TO nFiles 
   cDbf:=cPath+aFiles[nI] 
   AAdd(aZip,cDbf) 
   CursorWait() 
NEXT nI 

aFiles:=Array(ADir(cPath+"*.DBT")) 
nFiles:=aDir(cPath+"*.DBT",aFiles) 
FOR nI=1 TO nFiles 
   cDbf:=cPath+aFiles[nI] 
   AAdd(aZip,cDbf) 
   CursorWait() 
NEXT nI 

aFiles:=Array(ADir(cPath+"*.FTP")) 
nFiles:=aDir(cPath+"*.FTP",aFiles) 
FOR nI=1 TO nFiles 
   cDbf:=cPath+aFiles[nI] 
   AAdd(aZip,cDbf) 
   CursorWait() 
NEXT nI 

FOR nI=1 TO Len(aZip) 
   CursorWait() 
   HB_ZipFile(mUBI_DES+cFile,aZip[nI],,,,,.F.)    
NEXT nI 

MsgInfo('Carpeta de Origen: '+cPath+chr(13)+;
        'Carpeta de Destino: '+mUBI_DES+chr(13)+;
        'Archivo ZIP: '+cFile+chr(13)+;
        'Cantidad de Archivo Guardados: '+str(Len(aZip),3) ,'Información General')

return .t.

*-----------------------------------------------------------
Function Backup2(cPath,mUBI_ORI,cFile)

local aFiles

If !FILE(cFile+'.zip') 
  MsgInfo('Archivo Inexistente','Archivo Inexistente')
  return .t.

EndIf

   aFiles:=HB_GetFilesInZip(cFile) 
   HB_UnZipFile(mUBI_ORI+cFile,,.T.,,cPath,aFiles,NIL) 

return .t.
Para empezar a hacer mejoras:
1) Como puedo incluir una barra de proceso en el armado del ZIP, como verán en la variable (Array) aZip tengo los archivos que van a ser incluido en el backup

2) para descomprimir un archivo, como puedo hacer para que el usuario pueda seleccionar un archivo

desde ya muchas gracias

david
argentina

Posted: Thu Nov 27, 2008 9:11 am
by dobfivewin
Actualizo mi simple programa de Guarda/Recuperar Informacion :) :

Para Mejorar:
Como puedo implementarle una barra de estado del proceso cuando valla armado o recuperando la Informacion (Meter?) :oops:

Code: Select all

#include 'dob.ini'

static mUBI_ORI
static mUBI_DES
static mNOMARCHIVO

Function BackupZIP()

local oDlgCar 
local lSalir:= .f.
local oFont1

dbcloseall()

DEFINE FONT oFont1 NAME 'Arial' SIZE 0,-15 BOLD

DEFINE DIALOG oDlgCar FROM 0, 0 TO 12, 40 ;
              TITLE 'GUARDAR / RECUPERAR INFORMACION'

  
   @ 1, 8 BUTTON 'Guardar Informacion'  OF oDlgCar SIZE 60, 12 ;
			           ACTION ( ArmarBackup(1) )


   @ 2, 8 BUTTON 'Recuperar Informacion'  OF oDlgCar SIZE 60, 12 ;
			           ACTION ( ArmarBackup(2) )

  
   @ 3, 8 BUTTON 'Salir' OF oDlgCar SIZE 60, 12 ;
	               ACTION ( oDlgCar:End() )

ACTIVATE DIALOG oDlgCar CENTERED

dbcloseall()
return .t.

*-----------------------------------------------------------------------------
Function ArmarBackup(Arma1Extrae2)

local oDlgCar 
local lSalir:= .f.
local oFont1

local oUBI_ORI , oUBI_DES
local xUBI_ORI:=CurDrive()+":\"+CurDir()+"\"

mUBI_ORI:=xUBI_ORI+SPACE(60-LEN(xUBI_ORI))
mUBI_DES:=xUBI_ORI+SPACE(60-LEN(xUBI_ORI))
mNOMARCHIVO:=SPACE(20) 

dbcloseall()

DEFINE FONT oFont1 NAME 'Arial' SIZE 0,-9 //BOLD

DEFINE DIALOG oDlgCar FROM 0, 0 TO 15, 80 ;
              TITLE If(Arma1Extrae2==1,'GUARDAR','EXTRAER')+' INFORMACION'

   @ 1.750, 1 SAY 'Carpeta de Origen' of oDlgCar

   @ 1.500, 9 BUTTON 'Buscar' OF oDlgCar  SIZE 20, 10 Font oFont1 ;
                     ACTION( mUBI_ORI:=DIRECMain() ,;
                             mUBI_ORI:=alltrim(mUBI_ORI)+'\' ,;
                             mUBI_ORI:=mUBI_ORI+space(60-len(mUBI_ORI)) ,;
                             oUBI_ORI:refresh() )

   @     2,10 GET oUBI_ORI var mUBI_ORI of oDlgCar


   @ 2.625, 1 SAY 'Carpeta de Destino' of oDlgCar

   @ 2.250, 9 BUTTON 'Buscar' OF oDlgCar  SIZE 20, 10 Font oFont1 ;
                     ACTION( mUBI_DES:=DIRECMain() ,;
                             mUBI_DES:=alltrim(mUBI_DES)+'\' ,;
                             mUBI_DES:=mUBI_DES+space(60-len(mUBI_DES)) ,;
                             oUBI_DES:refresh() )

   @     3,10 GET oUBI_DES var mUBI_DES of oDlgCar

   If Arma1Extrae2 == 1

     @ 3.500, 1 SAY 'Nombre de Archivo ZIP' of oDlgCar
     @     4,10 GET mNOMARCHIVO of oDlgCar


     @ 4, 10 BUTTON 'Guardar Informacion'  OF oDlgCar SIZE 60, 12 ;
	  		            ACTION ( Backup1(alltrim(mNOMARCHIVO),alltrim(mUBI_ORI),alltrim(mUBI_DES)) ,;
		  	                    oDlgCar:End() )
   Else

     @ 4, 10 BUTTON 'Extraer Informacion'  OF oDlgCar SIZE 60, 12 ;
	  		            ACTION ( Backup2(alltrim(mUBI_DES),alltrim(mUBI_ORI),alltrim(mNOMARCHIVO)) ,;
		  	                    oDlgCar:End() )
   EndIf


   @ 4, 30 BUTTON 'Salir' OF oDlgCar SIZE 60, 12 ;
	               ACTION ( oDlgCar:End() )

ACTIVATE DIALOG oDlgCar CENTERED

dbcloseall()
return .t.

*-----------------------------------------------------------  GUARDAR INFORMACION
Function Backup1(cFile,cPath,mUBI_DES,cPass)

local aFiles , nI , aZip:={} , nFiles , cDbf 
local oMeter2 , nRow:=1



                     
If FILE(mUBI_DES+cFile+'.zip') .and. !MsgNoYes(oemtoansi('Archivo Existente, desea Reemplezar ?'),;
                                oemtoansi('Elija opcion SI/NO') )
  return .t.

EndIf
If FILE(cFile+'.zip')
  FErase(cFile+'.zip') 
EndIf

aFiles:=Array(ADir(cPath+"*.DBF")) 
nFiles:=aDir(cPath+"*.DBF",aFiles) 
FOR nI=1 TO nFiles 
   cDbf:=cPath+aFiles[nI] 
   AAdd(aZip,cDbf) 
   CursorWait() 
NEXT nI 

aFiles:=Array(ADir(cPath+"*.DBT")) 
nFiles:=aDir(cPath+"*.DBT",aFiles)
FOR nI=1 TO nFiles 
   cDbf:=cPath+aFiles[nI] 
   AAdd(aZip,cDbf) 
   CursorWait() 
NEXT nI 

aFiles:=Array(ADir(cPath+"*.FTP")) 
nFiles:=aDir(cPath+"*.FTP",aFiles) 
FOR nI=1 TO nFiles 
   cDbf:=cPath+aFiles[nI] 
   AAdd(aZip,cDbf) 
   CursorWait() 
NEXT nI 

FOR nI=1 TO Len(aZip) 
   CursorWait() 
   HB_ZipFile(mUBI_DES+cFile,aZip[nI],,,,,.F.)    
NEXT nI 

MsgInfo('Carpeta de Origen: '+cPath+chr(13)+;
        'Carpeta de Destino: '+mUBI_DES+chr(13)+;
        'Archivo/s Guardados en: '+cFile+chr(13)+;
        'Cantidad de Archivos Guardados: '+str(Len(aZip),3) ,'Información General del Proceso')

return .t.

*----------------------------------------------------------- RECUPERAR INFORMACION
Function Backup2(cPath,mUBI_ORI)

local aFiles
local cFile

cFile:= cGetFile32( "ZIP  (*.zip)| *.zip|"  +;                    
                     "Seleccione un archivo de ZIP",3) 

msginfo(cFile) 

aFiles:=HB_GetFilesInZip(cFile) 
HB_UnZipFile(cFile,,.T.,,cPath,aFiles,NIL) 

MsgInfo('Carpeta de Origen: '+mUBI_ORI+chr(13)+;
        'Carpeta de Destino: '+cPath+chr(13)+;
        'Archivo/s Recuperados de: '+cFile+chr(13)+;
        'Cantidad de Archivos Recuperados: '+str(Len(aFiles),3) ,'Información General del Proceso')

return .t.

Posted: Thu Nov 27, 2008 10:57 am
by karinha
no se puede probar, falta:

#include 'dob.ini' //??

mUBI_ORI:=DIRECMain() //???

Saludos.