Jump to content
Fivewin Brasil

Backup de Banco de Dados Sql


DonJuan

Recommended Posts

Estou enviando pra quem gosta de Sgdb e precisa de um backup prontinho pra jogar suas informações para um arquivo texto, podendo restaurar conforme queira

/******************************************************************************

* Sistema .....: PROJETO_PRINCIPAL

* Programa ....: BKPRST.PRG

* Autor .......: ALESSANDRO

* Sintese .....: RESP. PELA ADMIN. DO SISTEMA

* Data ........: 5/29/2010 às 6:38:50 PM

* Revisado em .: 5/29/2010 às 6:38:50 PM

******************************************************************************/

#include "SYSTEMA.CH"

/*******************************************************************************/

STATIC aBase

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

FUNCTION BKPRST()

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

LOCAL X, cBACKUP:="", aFStruct[4], aStrutura_OUT, aStrutura_INI, cTabela, aTokens

local oTXT, clinha := '', cAux:='', cArqTxt, nFileHandle,aFONTE:={},aFONTE2:={}, aDat[ 2], oDat[ 2]

LOCAL cSt_SUBMODULO:="Módulo de Backups", oBlbx

LOCAL oMtr1,oMtr2,nPor1,nPor2, cSay1,cSay2, oSay1,oSay2

LOCAL oMtr3,oMtr4,nPor3,nPor4, cSay3,cSay4, oSay3,oSay4

aBase:={}

FOR nX:=1 TO LEN(aMods)

IF !EMPTY(aMods[nX,5])

AADD(aBase,{aMods[nX,1],aMods[nX,2],aMods[nX,3],aMods[nX,4],aMods[nX,5]})

ENDIF

NEXT

aDat[ 1]:=SPACE(255)

aDat[ 2]:=SPACE(255)

nPor1:=0

nPor2:=0

cSay1:="-"

cSay2:="-"

FOR nX:=1 TO LEN(aBase)

IF SR_EXISTTABLE(aBase[nX,5])

cComm:= " SELECT * FROM "+aBase[nX,5]+" ORDER BY SR_RECNO"

EXECUTA_SQL(cComm,"TB_ARQUIVO")

AADD(aFONTE,{("*"),(aBase[nX,5]),(TB_ARQUIVO->(LASTREC())),(0)})

CLOSE TB_ARQUIVO

ELSE

MSGINFO(" ESTA TABELA NÃO EXISTE "+aBase[nX,5],"ATENÇÃO")

ENDIF

NEXT

AADD(aFONTE2,{(""),(""),(0),(0)})

DEFINE DIALOG oDbkp RESOURCE "BACKUP" TITLE cSt_SUBMODULO FONT oFontSystem

REDEFINE BITMAP ID 5000 RESOURCE "BANNER" OF oDbkp ADJUST

REDEFINE SENSITIVE SAY oSS06 PROMPT cSt_SUBMODULO ID 5001 OF oDbkp FONT oFont_Banner01 COLOR CLR_YELLOW ALIGN RIGHT TRANSPARENT

REDEFINE SENSITIVE SAY oSS06 PROMPT cVersao_Sistema ID 5002 OF oDbkp FONT oFont_Banner02 COLOR CLR_YELLOW ALIGN RIGHT TRANSPARENT

REDEFINE FOLDER oFld ID 1000 OF oDbkp ;

PROMPTS "Criar Backups","Restaurar Backups" ;

DIALOGS "G_BACKUP","I_BACKUP"

oBlbx := TXBrowse():New( oFld:aDialogs[1] )

oBlbx:CreateFromResource(100)

//oBlbx:bKeyDown :={|nKey| IIF(nKey==VK_RETURN,,)}

//oBlbx:bChange :={|| SQLRefresh()}

//oBlbx:bLDblClick:={|| INCLUIR(.T.,oBlbx,aDad)}

//oBlbx:bRClicked :={|| MsgInfo("Teste") }

oBlbx:bClrRowFocus := { || { CLR_BLACK, RGB(185,220,255) } }

oBlbx:nMarqueeStyle := MARQSTYLE_HIGHLCELL // MARQSTYLE_HIGHLCELL //MARQSTYLE_HIGHLROW

oBlbx:nColDividerStyle := 4

oBlbx:nRowDividerStyle := 4

oBlbx:lColDividerComplete := .F.

oBlbx:lFooter := .F.

oBlbx:nFreeze := 1

oBlbx:nHeaderLines := 1

oBlbx:nDataLines := 1

oBlbx:lHScroll := .T. // Barra Rolagem Horiz.

oBlbx:lVScroll := .T. // Barra Rolagem vertical

//oBlbx:bClrStd := {|| { CLR_BROWSE_TEXTO, IIF(((oBd_Espe)->(ORDKEYNO()))%2==0, CLR_BROWSE01, CLR_BROWSE02) } }

oBlbx:bClrSelFocus := {|| { CLR_BROWSE_TEXTO_BARRA, CLR_BROWSE_BARRA } }

oBlbx:SetArray( aFONTE, .t., ,{2,3,4} )

oBlbx:aCols[1]:cHeader := "TABELA"

oBlbx:aCols[1]:cEditPicture := "@!"

oBlbx:aCols[1]:nDataStrAlign := AL_LEFT

oBlbx:aCols[1]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[1]:nWiDTH := 150

oBlbx:aCols[2]:cHeader := "TOT REGISTRO"

oBlbx:aCols[2]:cEditPicture := "@E 999,999,999"

oBlbx:aCols[2]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[2]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[3]:cHeader := "STATUS"

oBlbx:aCols[3]:cEditPicture := "@E 9"

oBlbx:aCols[3]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[3]:nHeadStrAlign := AL_CENTER

REDEFINE BTNGET oDat[ 1] VAR aDat[ 1] ID 101 OF oFld:aDialogs[1];

ACTION (aDat[ 1] := cGetDir( "Selecione uma pasta ",".\odonto", CurDrive() + ":\" + GetCurDir() ),oDat[ 1]:REFRESH() )

REDEFINE SAY oSay1 VAR cSay1 ID 104 OF oFld:aDialogs[1]

REDEFINE SAY oSay2 VAR cSay2 ID 105 OF oFld:aDialogs[1]

REDEFINE METER oMtr1 VAR nPor1 TOTAL 100 ID 102 OF oFld:aDialogs[1] COLOR CLR_WHITE, CLR_BLACK

REDEFINE METER oMtr2 VAR nPor2 TOTAL 100 ID 103 OF oFld:aDialogs[1] COLOR CLR_WHITE, CLR_BLACK

REDEFINE BUTTON ID 10 OF oFld:aDialogs[1] ACTION IF(!EMPTY(aDat[ 1]),BACKUP_GERA(1,aFONTE, oMtr1, oMtr2, @nPor1, @nPor2, oSay1, oSay2, @cSay1, @cSay2,aDat ),MSGINFO("ESCOLHA UM LOCAL DE DESTINO PARA O BACLUP","ATENÇÃO"))

REDEFINE BUTTON ID 20 OF oFld:aDialogs[1] ACTION oDbkp:End() CANCEL

// 2 FOLHA DE RESTAURAÇÃO DE ARQUIVOS

oBlbx := TXBrowse():New( oFld:aDialogs[2] )

oBlbx:CreateFromResource(100)

//oBlbx:bKeyDown :={|nKey| IIF(nKey==VK_RETURN,,)}

//oBlbx:bChange :={|| SQLRefresh()}

//oBlbx:bLDblClick:={|| INCLUIR(.T.,oBlbx,aDad)}

//oBlbx:bRClicked :={|| MsgInfo("Teste") }

oBlbx:bClrRowFocus := { || { CLR_BLACK, RGB(185,220,255) } }

oBlbx:nMarqueeStyle := MARQSTYLE_HIGHLCELL // MARQSTYLE_HIGHLCELL //MARQSTYLE_HIGHLROW

oBlbx:nColDividerStyle := 4

oBlbx:nRowDividerStyle := 4

oBlbx:lColDividerComplete := .F.

oBlbx:lFooter := .F.

oBlbx:nFreeze := 1

oBlbx:nHeaderLines := 1

oBlbx:nDataLines := 1

oBlbx:lHScroll := .T. // Barra Rolagem Horiz.

oBlbx:lVScroll := .T. // Barra Rolagem vertical

//oBlbx:bClrStd := {|| { CLR_BROWSE_TEXTO, IIF(((oBd_Espe)->(ORDKEYNO()))%2==0, CLR_BROWSE01, CLR_BROWSE02) } }

oBlbx:bClrSelFocus := {|| { CLR_BROWSE_TEXTO_BARRA, CLR_BROWSE_BARRA } }

oBlbx:SetArray( aFONTE2, .t., ,{2,3,4} )

oBlbx:aCols[1]:cHeader := "TABELA"

oBlbx:aCols[1]:cEditPicture := "@!"

oBlbx:aCols[1]:nDataStrAlign := AL_LEFT

oBlbx:aCols[1]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[1]:nWiDTH := 150

oBlbx:aCols[2]:cHeader := "TOT REGISTRO"

oBlbx:aCols[2]:cEditPicture := "@E 999,999,999"

oBlbx:aCols[2]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[2]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[3]:cHeader := "STATUS"

oBlbx:aCols[3]:cEditPicture := "@E 9"

oBlbx:aCols[3]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[3]:nHeadStrAlign := AL_CENTER

REDEFINE BTNGET oDat[ 2] VAR aDat[ 2] ID 101 OF oFld:aDialogs[2];

ACTION (aDat[ 2] := cGetfile32("*.SQL | ", "Selecione o Arquivo de Backups",,.f.),BUSCA_BKP(aDat,@aFONTE2,oBlbx),oDat[ 2]:REFRESH() )

REDEFINE SAY oSay3 VAR cSay3 ID 104 OF oFld:aDialogs[2]

REDEFINE SAY oSay4 VAR cSay4 ID 105 OF oFld:aDialogs[2]

REDEFINE METER oMtr3 VAR nPor3 TOTAL 100 ID 102 OF oFld:aDialogs[2] COLOR CLR_WHITE, CLR_BLACK

REDEFINE METER oMtr4 VAR nPor4 TOTAL 100 ID 103 OF oFld:aDialogs[2] COLOR CLR_WHITE, CLR_BLACK

REDEFINE BUTTON ID 10 OF oFld:aDialogs[2] ACTION IF(!EMPTY(aDat[ 2]),BACKUP_GERA(2,aFONTE2, oMtr3, oMtr4, @nPor3, @nPor4, oSay3, oSay4, @cSay3, @cSay4,aDat ),MSGINFO("ESCOLHA UM LOCAL DE DESTINO PARA O BACLUP","ATENÇÃO"))

REDEFINE BUTTON ID 20 OF oFld:aDialogs[2] ACTION oDbkp:End() CANCEL

ACTIVATE DIALOG oDbkp CENTERED

RETURN NIL

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

FUNCTION CHKBKP()

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

LOCAL X, cBACKUP:="", aFStruct[4], aStrutura_OUT, aStrutura_INI, cTabela, aTokens

local oTXT, clinha := '', cAux:='', cArqTxt, nFileHandle,aFONTE:={},aFONTE2:={}, aDat[ 2], oDat[ 2]

LOCAL cSt_SUBMODULO:="Módulo de Backups", oBlbx

LOCAL oMtr1,oMtr2,nPor1,nPor2, cSay1,cSay2, oSay1,oSay2

LOCAL oMtr3,oMtr4,nPor3,nPor4, cSay3,cSay4, oSay3,oSay4

IF Secs( TIME() ) >= Secs( cHorBkp ) .AND. DATE() > dDatBkp .AND. DIABKP()==.T.

oTimer:Deactivate()

aDat[ 1]:=ALLTRIM(cDesBkp)

aDat[ 2]:=SPACE(255)

nPor1:=0

nPor2:=0

cSay1:="-"

cSay2:="-"

FOR nX:=1 TO LEN(aBase)

cComm:= " SELECT * FROM "+aBase[nX,5]+" ORDER BY SR_RECNO"

EXECUTA_SQL(cComm,"TB_ARQUIVO")

AADD(aFONTE,{("*"),(aBase[nX,5]),(TB_ARQUIVO->(LASTREC())),(0)})

CLOSE TB_ARQUIVO

NEXT

DEFINE DIALOG oDbkp RESOURCE "CHK_BACKUP" TITLE cSt_SUBMODULO FONT oFontSystem

REDEFINE BITMAP ID 5000 RESOURCE "BANNER" OF oDbkp ADJUST

REDEFINE SENSITIVE SAY oSS06 PROMPT cSt_SUBMODULO ID 5001 OF oDbkp FONT oFont_Banner01 COLOR CLR_YELLOW ALIGN RIGHT TRANSPARENT

REDEFINE SENSITIVE SAY oSS06 PROMPT cVersao_Sistema ID 5002 OF oDbkp FONT oFont_Banner02 COLOR CLR_YELLOW ALIGN RIGHT TRANSPARENT

oBlbx := TXBrowse():New( oDbkp )

oBlbx:CreateFromResource(1000)

//oBlbx:bKeyDown :={|nKey| IIF(nKey==VK_RETURN,,)}

//oBlbx:bChange :={|| SQLRefresh()}

//oBlbx:bLDblClick:={|| INCLUIR(.T.,oBlbx,aDad)}

//oBlbx:bRClicked :={|| MsgInfo("Teste") }

oBlbx:bClrRowFocus := { || { CLR_BLACK, RGB(185,220,255) } }

oBlbx:nMarqueeStyle := MARQSTYLE_HIGHLCELL // MARQSTYLE_HIGHLCELL //MARQSTYLE_HIGHLROW

oBlbx:nColDividerStyle := 4

oBlbx:nRowDividerStyle := 4

oBlbx:lColDividerComplete := .F.

oBlbx:lFooter := .F.

oBlbx:nFreeze := 1

oBlbx:nHeaderLines := 1

oBlbx:nDataLines := 1

oBlbx:lHScroll := .T. // Barra Rolagem Horiz.

oBlbx:lVScroll := .T. // Barra Rolagem vertical

//oBlbx:bClrStd := {|| { CLR_BROWSE_TEXTO, IIF(((oBd_Espe)->(ORDKEYNO()))%2==0, CLR_BROWSE01, CLR_BROWSE02) } }

oBlbx:bClrSelFocus := {|| { CLR_BROWSE_TEXTO_BARRA, CLR_BROWSE_BARRA } }

oBlbx:SetArray( aFONTE, .t., ,{2,3,4} )

oBlbx:aCols[1]:cHeader := "TABELA"

oBlbx:aCols[1]:cEditPicture := "@!"

oBlbx:aCols[1]:nDataStrAlign := AL_LEFT

oBlbx:aCols[1]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[1]:nWiDTH := 150

oBlbx:aCols[2]:cHeader := "TOT REGISTRO"

oBlbx:aCols[2]:cEditPicture := "@E 999,999,999"

oBlbx:aCols[2]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[2]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[3]:cHeader := "STATUS"

oBlbx:aCols[3]:cEditPicture := "@E 9"

oBlbx:aCols[3]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[3]:nHeadStrAlign := AL_CENTER

REDEFINE SAY oSay1 VAR cSay1 ID 101 OF oDbkp

REDEFINE SAY oSay2 VAR cSay2 ID 103 OF oDbkp

REDEFINE METER oMtr1 VAR nPor1 TOTAL 100 ID 102 OF oDbkp COLOR CLR_WHITE, CLR_BLACK

REDEFINE METER oMtr2 VAR nPor2 TOTAL 100 ID 104 OF oDbkp COLOR CLR_WHITE, CLR_BLACK

ACTIVATE DIALOG oDbkp NOWAIT CENTERED

(BACKUP_GERA(1,aFONTE, oMtr1, oMtr2, @nPor1, @nPor2, oSay1, oSay2, @cSay1, @cSay2,aDat ),;

MSGINFO("Backup Concluído","Atenção"),oDbkp:End(),;

cCodiSQl:="UPDATE CONFIGURACAO SET DATBKP = '"+DTOS(DATE())+"'", apCode := SR_SQLParse( cCodiSQl ), oSql := SR_GetConnection(),;

oSql:exec( SR_SQLCodeGen( apCode, {}, oSql:nSystemID ) ), dDatBkp:=DATE(), oTimer:activate() )

ELSE

ENDIF

RETURN NIL

**********************************************************

STATIC FUNCTION DIABKP()

**********************************************************

LOCAL lConcede:=.F.

DO CASE

CASE CtoDoW( CDoW( DATE() ) ) = 2

lConcede:=lSeg

CASE CtoDoW( CDoW( DATE() ) ) = 3

lConcede:=lTer

CASE CtoDoW( CDoW( DATE() ) ) = 4

lConcede:=lQua

CASE CtoDoW( CDoW( DATE() ) ) = 5

lConcede:=lQui

CASE CtoDoW( CDoW( DATE() ) ) = 6

lConcede:=lSex

CASE CtoDoW( CDoW( DATE() ) ) = 7

lConcede:=lSab

CASE CtoDoW( CDoW( DATE() ) ) = 1

lConcede:=lDom

ENDCASE

RETURN lConcede

**********************************************************

STATIC FUNCTION BUSCA_BKP(aDat,aFONTE2,oBlbx)

**********************************************************

LOCAL oTXT, cLinha, cTabela, aStrutura_OUT,nReg:=0, aTokens, nBd:=0

aFONTE2:={}

aTokens := HB_ATokens( MEMOREAD(aDat[ 2]), Chr(10) , .F., .F. )

FOR i := 1 TO Len( aTokens )

IF SUBSTR(aTokens,1,3) == "TB-" .AND. cTabela <> StrTran( aTokens, "TB-" )

IF !EMPTY(cTabela)

AADD(aFONTE2,{nBd,cTabela,nReg,0})

ENDIF

nBd+=1

cTabela:=StrTran( aTokens, "TB-" )

nReg:=0

ENDIF

IF SUBSTR(aTokens,1,3) == "RG-"

nReg+=1

ENDIF

NEXT

AADD(aFONTE2,{nBd,cTabela ,nReg,0})

//AADD(aFONTE2,{(""),(cTabela),(nReg),(0)})

oBlbx:SetArray( aFONTE2, .t., ,{1,2,3,4} )

oBlbx:aCols[1]:cHeader := "-"

oBlbx:aCols[1]:cEditPicture := "@!"

oBlbx:aCols[1]:nDataStrAlign := AL_LEFT

oBlbx:aCols[1]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[1]:nWiDTH := 25

oBlbx:aCols[2]:cHeader := "TABELA"

oBlbx:aCols[2]:cEditPicture := "@!"

oBlbx:aCols[2]:nDataStrAlign := AL_LEFT

oBlbx:aCols[2]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[2]:nWiDTH := 150

oBlbx:aCols[3]:cHeader := "TOT REGISTRO"

oBlbx:aCols[3]:cEditPicture := "@E 999,999,999"

oBlbx:aCols[3]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[3]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[4]:cHeader := "STATUS"

oBlbx:aCols[4]:cEditPicture := "@E 9"

oBlbx:aCols[4]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[4]:nHeadStrAlign := AL_CENTER

oBlbx:Refresh()

RETURN NIL

**********************************************************

STATIC FUNCTION BACKUP_GERA(nMOD,aFONTEx, oMtr1, oMtr2, nPor1, nPor2, oSay1, oSay2, cSay1, cSay2,aDat)

**********************************************************

LOCAL nX:=0, nTot1, nTot2, nF1, nF2, nT1, nT2, cArquivo, lDel:=.F. ,cErros:=""

LOCAL X, cBACKUP:="", aFStruct[4], aStrutura_OUT, aStrutura_INI, cTabela, aTokens, aToken_Rg

LOCAL oTXT, clinha := '', cAux:='', cArqTxt, nFileHandle, cNome_Arquivo:=SPACE(255), lResp:=.F.

nF1:=0; nF2:=0; nT1:=0; nT2:=0; nTot1:=LEN(aFONTEx); nTot2:=0

SysRefresh()

IF nMOD == 1

FOR nX:=1 TO LEN(aFONTEx)

cSay1:="Fazendo Cópia do Arquivo: "+aFONTEx[nX,2]

oSay1:Refresh()

nF1++

nPor1:=INT((nF1*100)/nTot1)

IF nPor1<>nT1

oMtr1:Refresh()

SysRefresh()

nT1:=nPor1

ENDIF

nF2:=0; nT2:=0; nTot2:=0

// IDENTIFICA A TABELA E FAZ UMA SELEÇÃO DA MESMA

cArquivo:=aFONTEx[nX,2]

cComm:= " SELECT * FROM "+cArquivo+" ORDER BY SR_RECNO"

EXECUTA_SQL(cComm,"TB_ARQUIVO")

// INICA O SCRIPT DO ARQUIVOS DE BACKUP E COPIA A ESTRUTURA DA TABELA

cBACKUP+="TB-"+cArquivo+Chr(10)

aStrutura_INI:={}

FOR n := 1 TO TB_ARQUIVO->(FCount())

AEval( PEGAESTRUTURA( n, aFStruct,@cBACKUP,@aStrutura_INI ), {|x| TB_ARQUIVO->(QOut( x )) } )

NEXT

// AQUI ELE PEGA OS REGISTROS E JOGA NO ARQUIVO

nTot2:=TB_ARQUIVO->(LASTREC())

TB_ARQUIVO->(DBGOTOP())

DO WHILE TB_ARQUIVO->(!EOF())

cBACKUP+="RG-"

FOR nI:=1 TO LEN(aStrutura_INI)

IF nI == LEN(aStrutura_INI)

cBACKUP+=IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="N",ALLTRIM(STR(TB_ARQUIVO->(FIELDGET(nI))) ),;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="D",DTOS(TB_ARQUIVO->(FIELDGET(nI) )),;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="L",IF( TB_ARQUIVO->(FIELDGET(nI)) == .T. ,"1","0") ,;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="M",ALLTRIM(TB_ARQUIVO->(FIELDGET(nI))) ,;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="C",ALLTRIM(TB_ARQUIVO->(FIELDGET(nI))),"") ))))+Chr(10)

lResp:=.T.

ELSE

cBACKUP+=IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="N",ALLTRIM(STR(TB_ARQUIVO->(FIELDGET(nI))) ),;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="D",DTOS(TB_ARQUIVO->(FIELDGET(nI) )),;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="L",IF( TB_ARQUIVO->(FIELDGET(nI)) == .T. ,"1","0") ,;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="M",ALLTRIM(TB_ARQUIVO->(FIELDGET(nI))) ,;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="C", ALLTRIM(TB_ARQUIVO->(FIELDGET(nI))),"") ))))+"|"

ENDIF

NEXT

nF2++

cSay2:="Copiando Registro(s): "+str(nF2)+" de "+ALLTRIM(str(nTot2))

oSay2:Refresh()

nPor2:=INT((nF2*100)/nTot2)

IF nPor2<>nT2

oMtr2:Refresh()

SysRefresh()

nT2:=nPor2

ENDIF

TB_ARQUIVO->(DBSKIP())

ENDDO

CLOSE TB_ARQUIVO

NEXT

// FAZENDO A GRAVAÇÃO DA COPIA

cNome_Arquivo:=aDat[1]+"\"+cNomTab+"_"+alltrim(cConnTipo)+"_BKP_"+SUBSTR(DTOC(DATE()),1,2)+"-"+SUBSTR(DTOC(DATE()),4,2)+"-"+SUBSTR(DTOC(DATE()),7,4)+"_"+SUBSTR(TIME(),1,2)+"-"+SUBSTR(TIME(),4,2)+"-"+SUBSTR(TIME(),7,2)+".SQL"

//MemoWrit(ALLTRIM(cNome_Arquivo) , cBACKUP )

MemoWrit(ALLTRIM(cNome_Arquivo) , StrTran( cBACKUP, '"' ) )

// CHECANDO A INTEGRIDADE DO ARQUIVO

oTXT:=TTxtFile():New( cNome_Arquivo )

while !oTXT:lEof

cLinha:= oTXT:cLine

IF SUBSTR(cLinha,1,3) <> "TB-" .AND. SUBSTR(cLinha,1,3) == "ES-" .AND. SUBSTR(cLinha,1,3) == "RG-"

MSGINFO("ERRO" )

ENDIF

oTXT:Skip(1)

ENDDO

oTXT:Close()

cSay1:="Cópia Feita Com Sucesso. Arquivo : "+ALLTRIM(cNome_Arquivo)

cSay2:="Registros Copiados Com Sucesso : "

oSay1:Refresh()

oSay2:Refresh()

ELSEIF nMOD == 2 // ESTE MÓDULO É O DE RESTAURAÇÃO DO BACKUP

SR_BeginTransaction()

// TRY

aTokens := HB_ATokens( MEMOREAD(aDat[ 2]), Chr(10) , .F., .F. )

FOR i := 1 TO Len( aTokens )

IF SUBSTR(aTokens,1,3) == "TB-"

aStrutura_OUT:={}

cTabela:=StrTran( aTokens, "TB-" )

lDel:=.T.

cSay1:="Restaurando Cópia de Segurança: Arquivo "+cTabela

oSay1:Refresh()

nF1++

nPor1:=INT((nF1*100)/nTot1)

IF nPor1<>nT1

oMtr1:Refresh()

SysRefresh()

nT1:=nPor1

ENDIF

nF2:=0; nT2:=0; nTot2:=0

nTot2:=aFONTEx[nF1,3]

ENDIF

IF SUBSTR(aTokens,1,3) == "ES-"

aToken_Rg := HB_ATokens( StrTran( aTokens, "ES-" ), "|", .F., .F. )

AADD(aStrutura_OUT, { aToken_Rg[1], aToken_Rg[2], VAL(aToken_Rg[3]), VAL(aToken_Rg[4]) } )

ENDIF

IF SUBSTR(aTokens,1,3) == "RG-"

IF SR_ExistTable( cTabela ) .AND. lDel==.T.

SR_DropTable( cTabela )

DBCreate( cTabela, aStrutura_OUT, "SqlRdd" )

lDel:=.F.

ENDIF

aToken_Rg := HB_ATokens( StrTran( aTokens, "RG-" ), "|", .F., .F. )

SCRIPT_SALVARSQL2(1, cTabela, aStrutura_OUT,aToken_Rg,@cErros)

nF2++

cSay2:="Copiando Registro(s): "+str(nF2)+" de "+ALLTRIM(str(nTot2))

oSay2:Refresh()

nPor2:=INT((nF2*100)/nTot2)

IF nPor2<>nT2

oMtr2:Refresh()

SysRefresh()

nT2:=nPor2

ENDIF

ENDIF

NEXT

cSay1:="Aguarde... "

cSay2:="Organizando Registros...: "

oSay1:Refresh()

oSay2:Refresh()

VERIFICA_TABELAS(.T.)

/*

CATCH oErr

MemoWrit("ERRO_BACKUP.LOG" , cErros )

SR_RollBackTransaction()

MSGALERT("Ocorreram alguns erros durante o processo!"+CRLF+;

"Para proteção do sistema e das informações,"+CRLF+;

"esse processo será abortado."+CRLF+;

+CRLF+CRLF+cErros+CRLF+CRLF+;

"Comunique ao Suport o Problema" ,"Erro no Sistema")

quit

FINALLY

SR_CommitTransaction()

END

*/

ENDIF

cSay1:="Cópia Restaurada Com Sucesso. "

cSay2:="Registros Copiados Com Sucesso : "

oSay1:Refresh()

oSay2:Refresh()

REG_AUDITOR(cUSU_LOGIN,"INICIOU","MOD. DE BACKUP E RESTAURAÇÃO",IF(nMOD==1,"BACKUP","RESTAURAR"),cNome_Arquivo)

RETURN .T.

//--//--//

function Parse( cInput, cSep )

local cOutput

local k

DEFAULT cSep := ';'

k := At( cSep, cInput )

if k > 0

cOutput := AllTrim( SubStr( cInput, 1, k-1 ) )

cInput := AllTrim( SubStr( cInput, k+1 ) )

else

cOutput := Trim( cInput )

cInput := ''

endif

RETURN cOutput

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

FUNCTION PEGAESTRUTURA( nFieldPos, aFStruct,cBACKUP,aStrutura_INI )

aFStruct[DBS_NAME] := DbFieldInfo( DBS_NAME, nFieldPos )

aFStruct[DBS_TYPE] := DbFieldInfo( DBS_TYPE, nFieldPos )

aFStruct[DBS_LEN ] := DbFieldInfo( DBS_LEN , nFieldPos )

aFStruct[DBS_DEC ] := DbFieldInfo( DBS_DEC , nFieldPos )

AADD( aStrutura_INI, { aFStruct[DBS_NAME], aFStruct[DBS_TYPE]} )

cBACKUP+="ES-"+ALLTRIM(aFStruct[DBS_NAME])+"|"+ALLTRIM(aFStruct[DBS_TYPE])+"|"+ALLTRIM(STR(aFStruct[DBS_LEN]))+"|"+ALLTRIM(STR(aFStruct[DBS_DEC]))+Chr(10)

RETURN aFStruct

***************************************************************************

FUNCTION SCRIPT_SALVARSQL2(nTIPO, cBANCO, aCampos, aGets,cErros)

***************************************************************************

LOCAL cSCRIPT:=SPACE(500), nI:=0

IF nTIPO == 1

IF ALLTRIM(cConnTipo) == "FIREBIRD"

USE &(cBANCO) ALIAS &cBANCO VIA "SQLRDD"

&cBANCO->(DBAPPEND())

SELECT &cBANCO

FOR nI:=1 TO LEN(aGets)

REPLACE &cBANCO->&(aCampos[nI,1]) WITH IF(aCampos[nI,2]="D",StoD( aGets[nI] ),;

IF(aCampos[nI,2]="N",VAL(aGets[nI]),;

IF(aCampos[nI,2]="C",TIRA_ACENTUACAO(aGets[nI],aCampos[nI,2]),;

IF(aCampos[nI,2]="L",IF(VAL(aGets[nI])==1,.T.,.F.),TIRA_ACENTUACAO(aGets[nI],aCampos[nI,2]) ) ) ) )

NEXT

&cBANCO->(DBCOMMIT())

CLOSE &cBANCO

ELSE

cSCRIPT:="INSERT INTO "+cBANCO+" ("

FOR nI:=1 TO LEN(aGets)

IF nI==LEN(aGets)

cSCRIPT+=" "+aCampos[nI,1]+") "

ELSE

cSCRIPT+=" "+aCampos[nI,1]+", "

ENDIF

NEXT

/*

cSCRIPT+=" VALUES ("

FOR nI:=1 TO LEN(aGets)

IF nI==LEN(aGets)

cSCRIPT+=" "+SR_cDBValue( DataConvert(cDado, cType, n_Tam) IF(aCampos[nI,2]="D",IF(EMPTY(aGets[nI]),DTOS(DATE()),aGets[nI] ),TIRA_ACENTUACAO(aGets[nI],aCampos[nI,2]) ) )+") "

ELSE

cSCRIPT+=" "+SR_cDBValue( IF(aCampos[nI,2]="D",IF(EMPTY(aGets[nI]),DTOS(DATE()),aGets[nI] ),TIRA_ACENTUACAO(aGets[nI],aCampos[nI,2])) )+", "

ENDIF

NEXT

*/

cSCRIPT+=" VALUES ("

FOR nI:=1 TO LEN(aGets)

IF nI==LEN(aGets)

cSCRIPT+=" "+SR_cDBValue( DataConvert(aGets[nI], aCampos[nI,2], aCampos[nI,3], aCampos[nI,1] ) )+") "

ELSE

cSCRIPT+=" "+SR_cDBValue( DataConvert(aGets[nI], aCampos[nI,2], aCampos[nI,3], aCampos[nI,1] ) )+", "

ENDIF

NEXT

apCode := SR_SQLParse(cSCRIPT)

oSql := SR_GetConnection()

oSql:exec( SR_SQLCodeGen( apCode, {,,}, oSql:nSystemID ) )

ENDIF

ENDIF

cErros:=cSCRIPT

RETURN cSCRIPT

STATIC FUNCTION DataConvert(cDado, cType, n_Tam,cCampo)

LOCAL cNewFormat := cDado, cNovo

IF cType = "C"

cNewFormat := TIRA_ACENTUACAO(cDado,cType)

ELSEIF cType = "D"

IF EMPTY(cDado)

cNewFormat := DATE()

ELSE

cNewFormat := cDado

ENDIF

ELSEIF cType = "L"

cNewFormat := cDado

ELSEIF cType = "M"

cNewFormat := cDado

ELSEIF cType = "N"

cNewFormat := cDado

ENDIF

RETURN(cNewFormat)

FUNCTION TIRA_ACENTUACAO( cStr,nTIpo )

local cStrNew := "", nX

cAcentos := {"'",'"',"´","`","\"}

cLetras := {"" ,"" ,"" ,"" ,"_"}

For nX := 1 TO LEN(cAcentos)

cStrNew := StrTran(cStr, cAcentos[nX], cLetras[nX])

cStr := cStrNew

Next

Return( cStrNew )

Acesse: http://programafontefivewin.blogspot.com/

FHW 10.8, XHB1.2.1, PELLESC 6.5, XDEV 7.2, FASTREPORT, SQLRDD, MySql, Firebird, Postgres

"MIGRE SEUS SISTEMAS EM CLIPPER PARA 32BITS COM BANCOS SQL"

Editado por - DonJuan on 30/09/2011 14:40:41

Link to comment
Share on other sites

Estou enviando pra quem gosta de Sgdb e precisa de um backup prontinho pra jogar suas informações para um arquivo texto, podendo restaurar conforme queira

/******************************************************************************

* Sistema .....: PROJETO_PRINCIPAL

* Programa ....: BKPRST.PRG

* Autor .......: ALESSANDRO

* Sintese .....: RESP. PELA ADMIN. DO SISTEMA

* Data ........: 5/29/2010 às 6:38:50 PM

* Revisado em .: 5/29/2010 às 6:38:50 PM

******************************************************************************/

#include "SYSTEMA.CH"

/*******************************************************************************/

STATIC aBase

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

FUNCTION BKPRST()

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

LOCAL X, cBACKUP:="", aFStruct[4], aStrutura_OUT, aStrutura_INI, cTabela, aTokens

local oTXT, clinha := '', cAux:='', cArqTxt, nFileHandle,aFONTE:={},aFONTE2:={}, aDat[ 2], oDat[ 2]

LOCAL cSt_SUBMODULO:="Módulo de Backups", oBlbx

LOCAL oMtr1,oMtr2,nPor1,nPor2, cSay1,cSay2, oSay1,oSay2

LOCAL oMtr3,oMtr4,nPor3,nPor4, cSay3,cSay4, oSay3,oSay4

aBase:={}

FOR nX:=1 TO LEN(aMods)

IF !EMPTY(aMods[nX,5])

AADD(aBase,{aMods[nX,1],aMods[nX,2],aMods[nX,3],aMods[nX,4],aMods[nX,5]})

ENDIF

NEXT

aDat[ 1]:=SPACE(255)

aDat[ 2]:=SPACE(255)

nPor1:=0

nPor2:=0

cSay1:="-"

cSay2:="-"

FOR nX:=1 TO LEN(aBase)

IF SR_EXISTTABLE(aBase[nX,5])

cComm:= " SELECT * FROM "+aBase[nX,5]+" ORDER BY SR_RECNO"

EXECUTA_SQL(cComm,"TB_ARQUIVO")

AADD(aFONTE,{("*"),(aBase[nX,5]),(TB_ARQUIVO->(LASTREC())),(0)})

CLOSE TB_ARQUIVO

ELSE

MSGINFO(" ESTA TABELA NÃO EXISTE "+aBase[nX,5],"ATENÇÃO")

ENDIF

NEXT

AADD(aFONTE2,{(""),(""),(0),(0)})

DEFINE DIALOG oDbkp RESOURCE "BACKUP" TITLE cSt_SUBMODULO FONT oFontSystem

REDEFINE BITMAP ID 5000 RESOURCE "BANNER" OF oDbkp ADJUST

REDEFINE SENSITIVE SAY oSS06 PROMPT cSt_SUBMODULO ID 5001 OF oDbkp FONT oFont_Banner01 COLOR CLR_YELLOW ALIGN RIGHT TRANSPARENT

REDEFINE SENSITIVE SAY oSS06 PROMPT cVersao_Sistema ID 5002 OF oDbkp FONT oFont_Banner02 COLOR CLR_YELLOW ALIGN RIGHT TRANSPARENT

REDEFINE FOLDER oFld ID 1000 OF oDbkp ;

PROMPTS "Criar Backups","Restaurar Backups" ;

DIALOGS "G_BACKUP","I_BACKUP"

oBlbx := TXBrowse():New( oFld:aDialogs[1] )

oBlbx:CreateFromResource(100)

//oBlbx:bKeyDown :={|nKey| IIF(nKey==VK_RETURN,,)}

//oBlbx:bChange :={|| SQLRefresh()}

//oBlbx:bLDblClick:={|| INCLUIR(.T.,oBlbx,aDad)}

//oBlbx:bRClicked :={|| MsgInfo("Teste") }

oBlbx:bClrRowFocus := { || { CLR_BLACK, RGB(185,220,255) } }

oBlbx:nMarqueeStyle := MARQSTYLE_HIGHLCELL // MARQSTYLE_HIGHLCELL //MARQSTYLE_HIGHLROW

oBlbx:nColDividerStyle := 4

oBlbx:nRowDividerStyle := 4

oBlbx:lColDividerComplete := .F.

oBlbx:lFooter := .F.

oBlbx:nFreeze := 1

oBlbx:nHeaderLines := 1

oBlbx:nDataLines := 1

oBlbx:lHScroll := .T. // Barra Rolagem Horiz.

oBlbx:lVScroll := .T. // Barra Rolagem vertical

//oBlbx:bClrStd := {|| { CLR_BROWSE_TEXTO, IIF(((oBd_Espe)->(ORDKEYNO()))%2==0, CLR_BROWSE01, CLR_BROWSE02) } }

oBlbx:bClrSelFocus := {|| { CLR_BROWSE_TEXTO_BARRA, CLR_BROWSE_BARRA } }

oBlbx:SetArray( aFONTE, .t., ,{2,3,4} )

oBlbx:aCols[1]:cHeader := "TABELA"

oBlbx:aCols[1]:cEditPicture := "@!"

oBlbx:aCols[1]:nDataStrAlign := AL_LEFT

oBlbx:aCols[1]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[1]:nWiDTH := 150

oBlbx:aCols[2]:cHeader := "TOT REGISTRO"

oBlbx:aCols[2]:cEditPicture := "@E 999,999,999"

oBlbx:aCols[2]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[2]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[3]:cHeader := "STATUS"

oBlbx:aCols[3]:cEditPicture := "@E 9"

oBlbx:aCols[3]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[3]:nHeadStrAlign := AL_CENTER

REDEFINE BTNGET oDat[ 1] VAR aDat[ 1] ID 101 OF oFld:aDialogs[1];

ACTION (aDat[ 1] := cGetDir( "Selecione uma pasta ",".\odonto", CurDrive() + ":\" + GetCurDir() ),oDat[ 1]:REFRESH() )

REDEFINE SAY oSay1 VAR cSay1 ID 104 OF oFld:aDialogs[1]

REDEFINE SAY oSay2 VAR cSay2 ID 105 OF oFld:aDialogs[1]

REDEFINE METER oMtr1 VAR nPor1 TOTAL 100 ID 102 OF oFld:aDialogs[1] COLOR CLR_WHITE, CLR_BLACK

REDEFINE METER oMtr2 VAR nPor2 TOTAL 100 ID 103 OF oFld:aDialogs[1] COLOR CLR_WHITE, CLR_BLACK

REDEFINE BUTTON ID 10 OF oFld:aDialogs[1] ACTION IF(!EMPTY(aDat[ 1]),BACKUP_GERA(1,aFONTE, oMtr1, oMtr2, @nPor1, @nPor2, oSay1, oSay2, @cSay1, @cSay2,aDat ),MSGINFO("ESCOLHA UM LOCAL DE DESTINO PARA O BACLUP","ATENÇÃO"))

REDEFINE BUTTON ID 20 OF oFld:aDialogs[1] ACTION oDbkp:End() CANCEL

// 2 FOLHA DE RESTAURAÇÃO DE ARQUIVOS

oBlbx := TXBrowse():New( oFld:aDialogs[2] )

oBlbx:CreateFromResource(100)

//oBlbx:bKeyDown :={|nKey| IIF(nKey==VK_RETURN,,)}

//oBlbx:bChange :={|| SQLRefresh()}

//oBlbx:bLDblClick:={|| INCLUIR(.T.,oBlbx,aDad)}

//oBlbx:bRClicked :={|| MsgInfo("Teste") }

oBlbx:bClrRowFocus := { || { CLR_BLACK, RGB(185,220,255) } }

oBlbx:nMarqueeStyle := MARQSTYLE_HIGHLCELL // MARQSTYLE_HIGHLCELL //MARQSTYLE_HIGHLROW

oBlbx:nColDividerStyle := 4

oBlbx:nRowDividerStyle := 4

oBlbx:lColDividerComplete := .F.

oBlbx:lFooter := .F.

oBlbx:nFreeze := 1

oBlbx:nHeaderLines := 1

oBlbx:nDataLines := 1

oBlbx:lHScroll := .T. // Barra Rolagem Horiz.

oBlbx:lVScroll := .T. // Barra Rolagem vertical

//oBlbx:bClrStd := {|| { CLR_BROWSE_TEXTO, IIF(((oBd_Espe)->(ORDKEYNO()))%2==0, CLR_BROWSE01, CLR_BROWSE02) } }

oBlbx:bClrSelFocus := {|| { CLR_BROWSE_TEXTO_BARRA, CLR_BROWSE_BARRA } }

oBlbx:SetArray( aFONTE2, .t., ,{2,3,4} )

oBlbx:aCols[1]:cHeader := "TABELA"

oBlbx:aCols[1]:cEditPicture := "@!"

oBlbx:aCols[1]:nDataStrAlign := AL_LEFT

oBlbx:aCols[1]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[1]:nWiDTH := 150

oBlbx:aCols[2]:cHeader := "TOT REGISTRO"

oBlbx:aCols[2]:cEditPicture := "@E 999,999,999"

oBlbx:aCols[2]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[2]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[3]:cHeader := "STATUS"

oBlbx:aCols[3]:cEditPicture := "@E 9"

oBlbx:aCols[3]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[3]:nHeadStrAlign := AL_CENTER

REDEFINE BTNGET oDat[ 2] VAR aDat[ 2] ID 101 OF oFld:aDialogs[2];

ACTION (aDat[ 2] := cGetfile32("*.SQL | ", "Selecione o Arquivo de Backups",,.f.),BUSCA_BKP(aDat,@aFONTE2,oBlbx),oDat[ 2]:REFRESH() )

REDEFINE SAY oSay3 VAR cSay3 ID 104 OF oFld:aDialogs[2]

REDEFINE SAY oSay4 VAR cSay4 ID 105 OF oFld:aDialogs[2]

REDEFINE METER oMtr3 VAR nPor3 TOTAL 100 ID 102 OF oFld:aDialogs[2] COLOR CLR_WHITE, CLR_BLACK

REDEFINE METER oMtr4 VAR nPor4 TOTAL 100 ID 103 OF oFld:aDialogs[2] COLOR CLR_WHITE, CLR_BLACK

REDEFINE BUTTON ID 10 OF oFld:aDialogs[2] ACTION IF(!EMPTY(aDat[ 2]),BACKUP_GERA(2,aFONTE2, oMtr3, oMtr4, @nPor3, @nPor4, oSay3, oSay4, @cSay3, @cSay4,aDat ),MSGINFO("ESCOLHA UM LOCAL DE DESTINO PARA O BACLUP","ATENÇÃO"))

REDEFINE BUTTON ID 20 OF oFld:aDialogs[2] ACTION oDbkp:End() CANCEL

ACTIVATE DIALOG oDbkp CENTERED

RETURN NIL

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

FUNCTION CHKBKP()

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

LOCAL X, cBACKUP:="", aFStruct[4], aStrutura_OUT, aStrutura_INI, cTabela, aTokens

local oTXT, clinha := '', cAux:='', cArqTxt, nFileHandle,aFONTE:={},aFONTE2:={}, aDat[ 2], oDat[ 2]

LOCAL cSt_SUBMODULO:="Módulo de Backups", oBlbx

LOCAL oMtr1,oMtr2,nPor1,nPor2, cSay1,cSay2, oSay1,oSay2

LOCAL oMtr3,oMtr4,nPor3,nPor4, cSay3,cSay4, oSay3,oSay4

IF Secs( TIME() ) >= Secs( cHorBkp ) .AND. DATE() > dDatBkp .AND. DIABKP()==.T.

oTimer:Deactivate()

aDat[ 1]:=ALLTRIM(cDesBkp)

aDat[ 2]:=SPACE(255)

nPor1:=0

nPor2:=0

cSay1:="-"

cSay2:="-"

FOR nX:=1 TO LEN(aBase)

cComm:= " SELECT * FROM "+aBase[nX,5]+" ORDER BY SR_RECNO"

EXECUTA_SQL(cComm,"TB_ARQUIVO")

AADD(aFONTE,{("*"),(aBase[nX,5]),(TB_ARQUIVO->(LASTREC())),(0)})

CLOSE TB_ARQUIVO

NEXT

DEFINE DIALOG oDbkp RESOURCE "CHK_BACKUP" TITLE cSt_SUBMODULO FONT oFontSystem

REDEFINE BITMAP ID 5000 RESOURCE "BANNER" OF oDbkp ADJUST

REDEFINE SENSITIVE SAY oSS06 PROMPT cSt_SUBMODULO ID 5001 OF oDbkp FONT oFont_Banner01 COLOR CLR_YELLOW ALIGN RIGHT TRANSPARENT

REDEFINE SENSITIVE SAY oSS06 PROMPT cVersao_Sistema ID 5002 OF oDbkp FONT oFont_Banner02 COLOR CLR_YELLOW ALIGN RIGHT TRANSPARENT

oBlbx := TXBrowse():New( oDbkp )

oBlbx:CreateFromResource(1000)

//oBlbx:bKeyDown :={|nKey| IIF(nKey==VK_RETURN,,)}

//oBlbx:bChange :={|| SQLRefresh()}

//oBlbx:bLDblClick:={|| INCLUIR(.T.,oBlbx,aDad)}

//oBlbx:bRClicked :={|| MsgInfo("Teste") }

oBlbx:bClrRowFocus := { || { CLR_BLACK, RGB(185,220,255) } }

oBlbx:nMarqueeStyle := MARQSTYLE_HIGHLCELL // MARQSTYLE_HIGHLCELL //MARQSTYLE_HIGHLROW

oBlbx:nColDividerStyle := 4

oBlbx:nRowDividerStyle := 4

oBlbx:lColDividerComplete := .F.

oBlbx:lFooter := .F.

oBlbx:nFreeze := 1

oBlbx:nHeaderLines := 1

oBlbx:nDataLines := 1

oBlbx:lHScroll := .T. // Barra Rolagem Horiz.

oBlbx:lVScroll := .T. // Barra Rolagem vertical

//oBlbx:bClrStd := {|| { CLR_BROWSE_TEXTO, IIF(((oBd_Espe)->(ORDKEYNO()))%2==0, CLR_BROWSE01, CLR_BROWSE02) } }

oBlbx:bClrSelFocus := {|| { CLR_BROWSE_TEXTO_BARRA, CLR_BROWSE_BARRA } }

oBlbx:SetArray( aFONTE, .t., ,{2,3,4} )

oBlbx:aCols[1]:cHeader := "TABELA"

oBlbx:aCols[1]:cEditPicture := "@!"

oBlbx:aCols[1]:nDataStrAlign := AL_LEFT

oBlbx:aCols[1]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[1]:nWiDTH := 150

oBlbx:aCols[2]:cHeader := "TOT REGISTRO"

oBlbx:aCols[2]:cEditPicture := "@E 999,999,999"

oBlbx:aCols[2]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[2]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[3]:cHeader := "STATUS"

oBlbx:aCols[3]:cEditPicture := "@E 9"

oBlbx:aCols[3]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[3]:nHeadStrAlign := AL_CENTER

REDEFINE SAY oSay1 VAR cSay1 ID 101 OF oDbkp

REDEFINE SAY oSay2 VAR cSay2 ID 103 OF oDbkp

REDEFINE METER oMtr1 VAR nPor1 TOTAL 100 ID 102 OF oDbkp COLOR CLR_WHITE, CLR_BLACK

REDEFINE METER oMtr2 VAR nPor2 TOTAL 100 ID 104 OF oDbkp COLOR CLR_WHITE, CLR_BLACK

ACTIVATE DIALOG oDbkp NOWAIT CENTERED

(BACKUP_GERA(1,aFONTE, oMtr1, oMtr2, @nPor1, @nPor2, oSay1, oSay2, @cSay1, @cSay2,aDat ),;

MSGINFO("Backup Concluído","Atenção"),oDbkp:End(),;

cCodiSQl:="UPDATE CONFIGURACAO SET DATBKP = '"+DTOS(DATE())+"'", apCode := SR_SQLParse( cCodiSQl ), oSql := SR_GetConnection(),;

oSql:exec( SR_SQLCodeGen( apCode, {}, oSql:nSystemID ) ), dDatBkp:=DATE(), oTimer:activate() )

ELSE

ENDIF

RETURN NIL

**********************************************************

STATIC FUNCTION DIABKP()

**********************************************************

LOCAL lConcede:=.F.

DO CASE

CASE CtoDoW( CDoW( DATE() ) ) = 2

lConcede:=lSeg

CASE CtoDoW( CDoW( DATE() ) ) = 3

lConcede:=lTer

CASE CtoDoW( CDoW( DATE() ) ) = 4

lConcede:=lQua

CASE CtoDoW( CDoW( DATE() ) ) = 5

lConcede:=lQui

CASE CtoDoW( CDoW( DATE() ) ) = 6

lConcede:=lSex

CASE CtoDoW( CDoW( DATE() ) ) = 7

lConcede:=lSab

CASE CtoDoW( CDoW( DATE() ) ) = 1

lConcede:=lDom

ENDCASE

RETURN lConcede

**********************************************************

STATIC FUNCTION BUSCA_BKP(aDat,aFONTE2,oBlbx)

**********************************************************

LOCAL oTXT, cLinha, cTabela, aStrutura_OUT,nReg:=0, aTokens, nBd:=0

aFONTE2:={}

aTokens := HB_ATokens( MEMOREAD(aDat[ 2]), Chr(10) , .F., .F. )

FOR i := 1 TO Len( aTokens )

IF SUBSTR(aTokens,1,3) == "TB-" .AND. cTabela <> StrTran( aTokens, "TB-" )

IF !EMPTY(cTabela)

AADD(aFONTE2,{nBd,cTabela,nReg,0})

ENDIF

nBd+=1

cTabela:=StrTran( aTokens, "TB-" )

nReg:=0

ENDIF

IF SUBSTR(aTokens,1,3) == "RG-"

nReg+=1

ENDIF

NEXT

AADD(aFONTE2,{nBd,cTabela ,nReg,0})

//AADD(aFONTE2,{(""),(cTabela),(nReg),(0)})

oBlbx:SetArray( aFONTE2, .t., ,{1,2,3,4} )

oBlbx:aCols[1]:cHeader := "-"

oBlbx:aCols[1]:cEditPicture := "@!"

oBlbx:aCols[1]:nDataStrAlign := AL_LEFT

oBlbx:aCols[1]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[1]:nWiDTH := 25

oBlbx:aCols[2]:cHeader := "TABELA"

oBlbx:aCols[2]:cEditPicture := "@!"

oBlbx:aCols[2]:nDataStrAlign := AL_LEFT

oBlbx:aCols[2]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[2]:nWiDTH := 150

oBlbx:aCols[3]:cHeader := "TOT REGISTRO"

oBlbx:aCols[3]:cEditPicture := "@E 999,999,999"

oBlbx:aCols[3]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[3]:nHeadStrAlign := AL_CENTER

oBlbx:aCols[4]:cHeader := "STATUS"

oBlbx:aCols[4]:cEditPicture := "@E 9"

oBlbx:aCols[4]:nDataStrAlign := AL_RIGHT

oBlbx:aCols[4]:nHeadStrAlign := AL_CENTER

oBlbx:Refresh()

RETURN NIL

**********************************************************

STATIC FUNCTION BACKUP_GERA(nMOD,aFONTEx, oMtr1, oMtr2, nPor1, nPor2, oSay1, oSay2, cSay1, cSay2,aDat)

**********************************************************

LOCAL nX:=0, nTot1, nTot2, nF1, nF2, nT1, nT2, cArquivo, lDel:=.F. ,cErros:=""

LOCAL X, cBACKUP:="", aFStruct[4], aStrutura_OUT, aStrutura_INI, cTabela, aTokens, aToken_Rg

LOCAL oTXT, clinha := '', cAux:='', cArqTxt, nFileHandle, cNome_Arquivo:=SPACE(255), lResp:=.F.

nF1:=0; nF2:=0; nT1:=0; nT2:=0; nTot1:=LEN(aFONTEx); nTot2:=0

SysRefresh()

IF nMOD == 1

FOR nX:=1 TO LEN(aFONTEx)

cSay1:="Fazendo Cópia do Arquivo: "+aFONTEx[nX,2]

oSay1:Refresh()

nF1++

nPor1:=INT((nF1*100)/nTot1)

IF nPor1<>nT1

oMtr1:Refresh()

SysRefresh()

nT1:=nPor1

ENDIF

nF2:=0; nT2:=0; nTot2:=0

// IDENTIFICA A TABELA E FAZ UMA SELEÇÃO DA MESMA

cArquivo:=aFONTEx[nX,2]

cComm:= " SELECT * FROM "+cArquivo+" ORDER BY SR_RECNO"

EXECUTA_SQL(cComm,"TB_ARQUIVO")

// INICA O SCRIPT DO ARQUIVOS DE BACKUP E COPIA A ESTRUTURA DA TABELA

cBACKUP+="TB-"+cArquivo+Chr(10)

aStrutura_INI:={}

FOR n := 1 TO TB_ARQUIVO->(FCount())

AEval( PEGAESTRUTURA( n, aFStruct,@cBACKUP,@aStrutura_INI ), {|x| TB_ARQUIVO->(QOut( x )) } )

NEXT

// AQUI ELE PEGA OS REGISTROS E JOGA NO ARQUIVO

nTot2:=TB_ARQUIVO->(LASTREC())

TB_ARQUIVO->(DBGOTOP())

DO WHILE TB_ARQUIVO->(!EOF())

cBACKUP+="RG-"

FOR nI:=1 TO LEN(aStrutura_INI)

IF nI == LEN(aStrutura_INI)

cBACKUP+=IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="N",ALLTRIM(STR(TB_ARQUIVO->(FIELDGET(nI))) ),;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="D",DTOS(TB_ARQUIVO->(FIELDGET(nI) )),;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="L",IF( TB_ARQUIVO->(FIELDGET(nI)) == .T. ,"1","0") ,;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="M",ALLTRIM(TB_ARQUIVO->(FIELDGET(nI))) ,;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="C",ALLTRIM(TB_ARQUIVO->(FIELDGET(nI))),"") ))))+Chr(10)

lResp:=.T.

ELSE

cBACKUP+=IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="N",ALLTRIM(STR(TB_ARQUIVO->(FIELDGET(nI))) ),;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="D",DTOS(TB_ARQUIVO->(FIELDGET(nI) )),;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="L",IF( TB_ARQUIVO->(FIELDGET(nI)) == .T. ,"1","0") ,;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="M",ALLTRIM(TB_ARQUIVO->(FIELDGET(nI))) ,;

IF(VALTYPE(TB_ARQUIVO->(FIELDGET(nI)))=="C", ALLTRIM(TB_ARQUIVO->(FIELDGET(nI))),"") ))))+"|"

ENDIF

NEXT

nF2++

cSay2:="Copiando Registro(s): "+str(nF2)+" de "+ALLTRIM(str(nTot2))

oSay2:Refresh()

nPor2:=INT((nF2*100)/nTot2)

IF nPor2<>nT2

oMtr2:Refresh()

SysRefresh()

nT2:=nPor2

ENDIF

TB_ARQUIVO->(DBSKIP())

ENDDO

CLOSE TB_ARQUIVO

NEXT

// FAZENDO A GRAVAÇÃO DA COPIA

cNome_Arquivo:=aDat[1]+"\"+cNomTab+"_"+alltrim(cConnTipo)+"_BKP_"+SUBSTR(DTOC(DATE()),1,2)+"-"+SUBSTR(DTOC(DATE()),4,2)+"-"+SUBSTR(DTOC(DATE()),7,4)+"_"+SUBSTR(TIME(),1,2)+"-"+SUBSTR(TIME(),4,2)+"-"+SUBSTR(TIME(),7,2)+".SQL"

//MemoWrit(ALLTRIM(cNome_Arquivo) , cBACKUP )

MemoWrit(ALLTRIM(cNome_Arquivo) , StrTran( cBACKUP, '"' ) )

// CHECANDO A INTEGRIDADE DO ARQUIVO

oTXT:=TTxtFile():New( cNome_Arquivo )

while !oTXT:lEof

cLinha:= oTXT:cLine

IF SUBSTR(cLinha,1,3) <> "TB-" .AND. SUBSTR(cLinha,1,3) == "ES-" .AND. SUBSTR(cLinha,1,3) == "RG-"

MSGINFO("ERRO" )

ENDIF

oTXT:Skip(1)

ENDDO

oTXT:Close()

cSay1:="Cópia Feita Com Sucesso. Arquivo : "+ALLTRIM(cNome_Arquivo)

cSay2:="Registros Copiados Com Sucesso : "

oSay1:Refresh()

oSay2:Refresh()

ELSEIF nMOD == 2 // ESTE MÓDULO É O DE RESTAURAÇÃO DO BACKUP

SR_BeginTransaction()

// TRY

aTokens := HB_ATokens( MEMOREAD(aDat[ 2]), Chr(10) , .F., .F. )

FOR i := 1 TO Len( aTokens )

IF SUBSTR(aTokens,1,3) == "TB-"

aStrutura_OUT:={}

cTabela:=StrTran( aTokens, "TB-" )

lDel:=.T.

cSay1:="Restaurando Cópia de Segurança: Arquivo "+cTabela

oSay1:Refresh()

nF1++

nPor1:=INT((nF1*100)/nTot1)

IF nPor1<>nT1

oMtr1:Refresh()

SysRefresh()

nT1:=nPor1

ENDIF

nF2:=0; nT2:=0; nTot2:=0

nTot2:=aFONTEx[nF1,3]

ENDIF

IF SUBSTR(aTokens,1,3) == "ES-"

aToken_Rg := HB_ATokens( StrTran( aTokens, "ES-" ), "|", .F., .F. )

AADD(aStrutura_OUT, { aToken_Rg[1], aToken_Rg[2], VAL(aToken_Rg[3]), VAL(aToken_Rg[4]) } )

ENDIF

IF SUBSTR(aTokens,1,3) == "RG-"

IF SR_ExistTable( cTabela ) .AND. lDel==.T.

SR_DropTable( cTabela )

DBCreate( cTabela, aStrutura_OUT, "SqlRdd" )

lDel:=.F.

ENDIF

aToken_Rg := HB_ATokens( StrTran( aTokens, "RG-" ), "|", .F., .F. )

SCRIPT_SALVARSQL2(1, cTabela, aStrutura_OUT,aToken_Rg,@cErros)

nF2++

cSay2:="Copiando Registro(s): "+str(nF2)+" de "+ALLTRIM(str(nTot2))

oSay2:Refresh()

nPor2:=INT((nF2*100)/nTot2)

IF nPor2<>nT2

oMtr2:Refresh()

SysRefresh()

nT2:=nPor2

ENDIF

ENDIF

NEXT

cSay1:="Aguarde... "

cSay2:="Organizando Registros...: "

oSay1:Refresh()

oSay2:Refresh()

VERIFICA_TABELAS(.T.)

/*

CATCH oErr

MemoWrit("ERRO_BACKUP.LOG" , cErros )

SR_RollBackTransaction()

MSGALERT("Ocorreram alguns erros durante o processo!"+CRLF+;

"Para proteção do sistema e das informações,"+CRLF+;

"esse processo será abortado."+CRLF+;

+CRLF+CRLF+cErros+CRLF+CRLF+;

"Comunique ao Suport o Problema" ,"Erro no Sistema")

quit

FINALLY

SR_CommitTransaction()

END

*/

ENDIF

cSay1:="Cópia Restaurada Com Sucesso. "

cSay2:="Registros Copiados Com Sucesso : "

oSay1:Refresh()

oSay2:Refresh()

REG_AUDITOR(cUSU_LOGIN,"INICIOU","MOD. DE BACKUP E RESTAURAÇÃO",IF(nMOD==1,"BACKUP","RESTAURAR"),cNome_Arquivo)

RETURN .T.

//--//--//

function Parse( cInput, cSep )

local cOutput

local k

DEFAULT cSep := ';'

k := At( cSep, cInput )

if k > 0

cOutput := AllTrim( SubStr( cInput, 1, k-1 ) )

cInput := AllTrim( SubStr( cInput, k+1 ) )

else

cOutput := Trim( cInput )

cInput := ''

endif

RETURN cOutput

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

FUNCTION PEGAESTRUTURA( nFieldPos, aFStruct,cBACKUP,aStrutura_INI )

aFStruct[DBS_NAME] := DbFieldInfo( DBS_NAME, nFieldPos )

aFStruct[DBS_TYPE] := DbFieldInfo( DBS_TYPE, nFieldPos )

aFStruct[DBS_LEN ] := DbFieldInfo( DBS_LEN , nFieldPos )

aFStruct[DBS_DEC ] := DbFieldInfo( DBS_DEC , nFieldPos )

AADD( aStrutura_INI, { aFStruct[DBS_NAME], aFStruct[DBS_TYPE]} )

cBACKUP+="ES-"+ALLTRIM(aFStruct[DBS_NAME])+"|"+ALLTRIM(aFStruct[DBS_TYPE])+"|"+ALLTRIM(STR(aFStruct[DBS_LEN]))+"|"+ALLTRIM(STR(aFStruct[DBS_DEC]))+Chr(10)

RETURN aFStruct

***************************************************************************

FUNCTION SCRIPT_SALVARSQL2(nTIPO, cBANCO, aCampos, aGets,cErros)

***************************************************************************

LOCAL cSCRIPT:=SPACE(500), nI:=0

IF nTIPO == 1

IF ALLTRIM(cConnTipo) == "FIREBIRD"

USE &(cBANCO) ALIAS &cBANCO VIA "SQLRDD"

&cBANCO->(DBAPPEND())

SELECT &cBANCO

FOR nI:=1 TO LEN(aGets)

REPLACE &cBANCO->&(aCampos[nI,1]) WITH IF(aCampos[nI,2]="D",StoD( aGets[nI] ),;

IF(aCampos[nI,2]="N",VAL(aGets[nI]),;

IF(aCampos[nI,2]="C",TIRA_ACENTUACAO(aGets[nI],aCampos[nI,2]),;

IF(aCampos[nI,2]="L",IF(VAL(aGets[nI])==1,.T.,.F.),TIRA_ACENTUACAO(aGets[nI],aCampos[nI,2]) ) ) ) )

NEXT

&cBANCO->(DBCOMMIT())

CLOSE &cBANCO

ELSE

cSCRIPT:="INSERT INTO "+cBANCO+" ("

FOR nI:=1 TO LEN(aGets)

IF nI==LEN(aGets)

cSCRIPT+=" "+aCampos[nI,1]+") "

ELSE

cSCRIPT+=" "+aCampos[nI,1]+", "

ENDIF

NEXT

/*

cSCRIPT+=" VALUES ("

FOR nI:=1 TO LEN(aGets)

IF nI==LEN(aGets)

cSCRIPT+=" "+SR_cDBValue( DataConvert(cDado, cType, n_Tam) IF(aCampos[nI,2]="D",IF(EMPTY(aGets[nI]),DTOS(DATE()),aGets[nI] ),TIRA_ACENTUACAO(aGets[nI],aCampos[nI,2]) ) )+") "

ELSE

cSCRIPT+=" "+SR_cDBValue( IF(aCampos[nI,2]="D",IF(EMPTY(aGets[nI]),DTOS(DATE()),aGets[nI] ),TIRA_ACENTUACAO(aGets[nI],aCampos[nI,2])) )+", "

ENDIF

NEXT

*/

cSCRIPT+=" VALUES ("

FOR nI:=1 TO LEN(aGets)

IF nI==LEN(aGets)

cSCRIPT+=" "+SR_cDBValue( DataConvert(aGets[nI], aCampos[nI,2], aCampos[nI,3], aCampos[nI,1] ) )+") "

ELSE

cSCRIPT+=" "+SR_cDBValue( DataConvert(aGets[nI], aCampos[nI,2], aCampos[nI,3], aCampos[nI,1] ) )+", "

ENDIF

NEXT

apCode := SR_SQLParse(cSCRIPT)

oSql := SR_GetConnection()

oSql:exec( SR_SQLCodeGen( apCode, {,,}, oSql:nSystemID ) )

ENDIF

ENDIF

cErros:=cSCRIPT

RETURN cSCRIPT

STATIC FUNCTION DataConvert(cDado, cType, n_Tam,cCampo)

LOCAL cNewFormat := cDado, cNovo

IF cType = "C"

cNewFormat := TIRA_ACENTUACAO(cDado,cType)

ELSEIF cType = "D"

IF EMPTY(cDado)

cNewFormat := DATE()

ELSE

cNewFormat := cDado

ENDIF

ELSEIF cType = "L"

cNewFormat := cDado

ELSEIF cType = "M"

cNewFormat := cDado

ELSEIF cType = "N"

cNewFormat := cDado

ENDIF

RETURN(cNewFormat)

FUNCTION TIRA_ACENTUACAO( cStr,nTIpo )

local cStrNew := "", nX

cAcentos := {"'",'"',"´","`","\"}

cLetras := {"" ,"" ,"" ,"" ,"_"}

For nX := 1 TO LEN(cAcentos)

cStrNew := StrTran(cStr, cAcentos[nX], cLetras[nX])

cStr := cStrNew

Next

Return( cStrNew )

Acesse: http://programafontefivewin.blogspot.com/

FHW 10.8, XHB1.2.1, PELLESC 6.5, XDEV 7.2, FASTREPORT, SQLRDD, MySql, Firebird, Postgres

"MIGRE SEUS SISTEMAS EM CLIPPER PARA 32BITS COM BANCOS SQL"

Editado por - DonJuan on 30/09/2011 14:40:41

Link to comment
Share on other sites

citação:

Boa tarde DonJuan!!!

Esta rotina é muito boa para termos uma idéia de como fazer porque ela não funcional. Faltam o arquivo .CH e algumas funções estão ausentes.

Muito Grato

Sds

José Carlos - ZECA

fwh612(Free)-clipper52e-blinker 7.0 - six 3.02 - Windows XP


id=quote>id=quote>

Mande e-mail para mim que te mando o res e os chs necessários

Acesse: http://programafontefivewin.blogspot.com/

FHW 10.8, XHB1.2.1, PELLESC 6.5, XDEV 7.2, FASTREPORT, SQLRDD, MySql, Firebird, Postgres

"MIGRE SEUS SISTEMAS EM CLIPPER PARA 32BITS COM BANCOS SQL"

Link to comment
Share on other sites

citação:

citação:

Boa tarde DonJuan!!!

Esta rotina é muito boa para termos uma idéia de como fazer porque ela não funcional. Faltam o arquivo .CH e algumas funções estão ausentes.

Muito Grato

Sds

José Carlos - ZECA

fwh612(Free)-clipper52e-blinker 7.0 - six 3.02 - Windows XP


id=quote>id=quote>

Mande e-mail para mim que te mando o res e os chs necessários

Acesse: http://programafontefivewin.blogspot.com/

FHW 10.8, XHB1.2.1, PELLESC 6.5, XDEV 7.2, FASTREPORT, SQLRDD, MySql, Firebird, Postgres

"MIGRE SEUS SISTEMAS EM CLIPPER PARA 32BITS COM BANCOS SQL"


id=quote>id=quote>

Boa Noite!!!

Ei-lo zeca_roque@hotmail.com.

Creio de para funcionar faltam o prg com as funcoes, o arquivo ch e o arquivo res.

Antecipadamente agradeço.

Sds

José Carlos - ZECA

fwh612(Free)-clipper52e-blinker 7.0 - six 3.02 - Windows XP

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...