Back-Up zipado e com senha usando o xHarbour+Hbzip+Hwgui
Enviado: 12 Out 2007 03:47
/*
Autor............:Leonardo Machado
Colaborações.:Eolo Ventura
Notas.:
1º-Abaixo temos um Exemplo de Back-up e Retorno de Back-up com uso de Visual Grafico usando a HWGUI.Tem que linkar a HBZIP da Contrib.Obs.:No exemplo estou considerando que
os DBF estão dentro de uma pasta chamada "DADOS"
*/
Obs:Pode, ser melhorada ou adptada para modo console, basta tirar as funções da HWGUI;
Autor............:Leonardo Machado
Colaborações.:Eolo Ventura
Notas.:
1º-Abaixo temos um Exemplo de Back-up e Retorno de Back-up com uso de Visual Grafico usando a HWGUI.Tem que linkar a HBZIP da Contrib.Obs.:No exemplo estou considerando que
os DBF estão dentro de uma pasta chamada "DADOS"
*/
Código: Selecionar todos
#include "Directry.ch"
********************************************************************************
************INICIO DAS FUNÇÕES PARA BACK-UP E RETORNO DE BACK-UP****************
********************************************************************************
******************
Function Back_up()
******************
PRIVATE aDir0, aDir1, aDir2, vNome_zip
PRIVATE oDlgHabla:=NIL
vCopia="S"
MsgStop("Atenção Para Fazer um Back-up do Banco de Dados é Nescessario que Ninguem esteja usando o Sistema","Aviso do Sistema")
IF MSGYESNO("Tem certeza que deseja Fazer o Back-Up Agora ?","Aviso do Sistema")
MsgRun("Aguarde Compactando o Banco de Dados Para Back-up")
*- Salvar o caminho
cDir := curdrive()+':'
cHome := curdir()
vNome_zip := "Back_up.sag"
aDir1 := curdrive()+":\"+rtrim(curdir()) + "\dados\*.dbf"
aDir2 := curdrive()+":\"+rtrim(curdir()) + "\Back_up.sag"
aDir0 := directory(aDir1)
aArq:={}
for x=1 to len(aDir0)
aadd(aArq,curdrive()+":\"+rtrim(curdir())+"\dados\"+aDir0[x,1])
next
Fim_Run()
Private m_oBar,cComplete:=Len(aDir0),m_oDlg_Prog
Hw_IniBarraProgresso()
Hw_BarraProgresso(40,[Backup],cComplete)
m_oBar:Set(,cComplete,.t.)
hb_zipfile( vNome_zip,aARQ, 9,{|cFile,nPos| eProgresso( cFile, nPos,cComplete) },.t., "senha",.F.,.F., )
Hw_FimBarraProgresso()
MsgInfo("Back-up Realizado com Sucesso","Aviso do Sistema")
s2 := "*.sag"
s1 := "Back-Up Banco de Dados" + "( " + s2 + " )"
DO WHILE .T.
vNome_zip2 := SaveFile(vNome_zip,s1,s2, ) // DESTINO ONDE VAI SALVAR
vFILE=STRTRAN(vNome_zip2,vNome_zip,"")+vNome_zip
IF FILE(vFILE)
IF MsgYesNo("Arquivo com o mesmo Nome Localizado nesse diretorio, deseja subistituir ?","Aviso do Sistema")
if vNome_zip2=aDir2
vCopia="N"
endif
EXIT
ELSE
LOOP
Endif
Else
Exit
ENDIF
ENDDO
IF EMPTY(vNome_zip2)
MsgInfo("O Sistema salvou o Back-Up em...: "+ aDir2,"Aviso do Sistema")
dbcloseall()
ENDIF
IF vCopia="S"
IF !EMPTY(aDir2) .AND. !EMPTY(vNome_zip2)
__CopyFile((lower(aDir2)),(lower(vNome_zip2)))
FERASE(aDir2)
ENDIF
endif
dbcloseall()
Dirchange(cDir+"\"+cHome)
ENDIF
Return Nil
**********************
FUNCTION Ret_Back_up()
**********************
PRIVATE vNome_zip, aDir1
PRIVATE oDlgHabla:=NIL
cDir := curdrive()+':'
cHome := curdir()
MsgStop("Atenção Para Retornar um Back-up do Banco de Dados é Nescessario que Ninguem esteja usando o Sistema","Aviso do Sistema")
IF MSGYESNO("Atenção Esse Processo é Totalmente Irreversível !!! Tem certeza que deseja Fazer o Retorno do Back-Up Agora ? ","Aviso do Sistema")
s2 := "*.sag"
s1 := "Back-Up Banco de Dados " + "( " + s2 + " )"
aDir1 := curdrive()+":\"+rtrim(curdir()) + "\dados\"
vNome_zip := SelectFile( {s1,"Todos Arquivos"},{s2,"*.sag*"} )
IF EMPTY(vNome_zip) .OR. LASTKEY()=27
Return Nil
ENDIF
MsgRun("Aguarde...Descompactando o Banco de Dados de Back-up")
aExtract := hb_GetFilesInZip( vNome_zip )
HB_UNZIPFILE( vNome_zip,,.F.,"senha", aDir1, aExtract )
Fim_Run()
dbcloseall()
ENDIF
dirchange(cDir+"\"+cHome)
Return Nil
************************************
Function eProgresso(vtxt,xPerc,wTot)
************************************
m_oBar:Set(vTxt,xPerc,.t.)
@ 30,70 SAY "Aguarde Compactando Banco de Dados: "+str((xPerc/wTot)*100)+" %" SIZE 420,22
return nil
***********************************
Function Hw_IniBarraProgresso(vTam)
***********************************
Local xTamJan:=150
if vTam#nil
xTamJan:=vTam
endif
INIT DIALOG m_oDlg_Prog TITLE "Aguarde em processamento......." ;
SIZE 450,xTamJan NOEXIT ;
STYLE DS_CENTER + WS_VISIBLE
m_oDlg_Prog:Activate(.t.)
return nil
*******************************
Function Hw_FimBarraProgresso()
*******************************
m_oDlg_Prog:Close()
m_oDlg_Prog:=nil
m_obar:=nil
m_xBarra:=40
return nil
**********************************************
Function Hw_BarraProgresso(xLinha,vTexto,xReg)
**********************************************
Local xTexto:=[],vLInha:=80,xObar:=m_Obar,tReg:=100
xTexto:=hb_OemtoAnsi(vTexto)
if xLinha#nil
vLinha:=xLinha
endif
if xReg#nil
tReg:=xReg
endif
SetWindowText(m_oDlg_Prog:Handle,xTexto)
@ 30,vLinha PROGRESSBAR m_oBar OF m_oDlg_Prog SIZE 350,100 BARWIDTH tReg QUANTITY 1
m_oBar:Set(,1,.t.)
return nil
********************************************************************************
************FIM DAS FUNÇÕES PARA BACK-UP E RETORNO DE BACK-UP*******************
********************************************************************************