Hoje vou mostrar como dar um Pack em várias tabelas do Protheus, via AdvPL.
Algumas vezes precisamos limpar várias tabelas do sistema, e existe um recurso nativo que é utilizado no Apsdu, o Pack de tabelas.
O Pack consiste em excluir do Banco de Dados, todos os registros com o D_E_L_E_T_ preenchido.
Porém ter que ficar abrindo, tabela a tabela, e rodando o Pack, acaba ficando cansativo, pensando nisso, abaixo monto um pequeno exemplo, utilizando um Array e limpando os dados de várias tabelas.
//Adiciona as tabelas que irão sofrer o pack
aTabelas := {}
aAdd(aTabelas, "AAA")
aAdd(aTabelas, "BBB")
aAdd(aTabelas, "CCC")
aAdd(aTabelas, "DDD")
//Percorre as tabelas
For nAtual := 1 To Len(aTabelas)
	//Abre o alias da tabela
	DbSelectArea(aTabelas[nAtual])
	//Se conseguir abrir em modo exclusivo, limpa os deletados
    If OpenExclusivo(.T.)
    	MsgRun("Limpando registros - " + aTabelas[nAtual], "", {|| __dbPack(), DbCommitAll() })
	EndIf
	//Retorna no modo oritinal
	OpenExclusivo()
Next
Bom pessoal, por hoje é só.
Abraços e até a próxima.
 
 
 
Ola Atilio, sou fã dos seus Posts, sempre muito bons os artigos. VC teria algo parecido com este para o proprio usuário fazer backup de algumas tabelas?
Bom dia Abel.
Obrigado pelo comentário.
Para fazer Backup, você poderia usar a DBTblCopy, combinado com a lógica do exemplo no artigo – http://tdn.totvs.com/display/tec/DBTblCopy
Abraços.
boa tarde, da erro nesta funcao OpenExclusivo(.T.)
Você poderia mandar o error log?
Pois se eu não me engano, a função pode ter sido descontinuada nas versões mais novas do Protheus.
Exception: InterFunctionCall: cannot find function OPENEXCLUS in AppMap (58)
Essa mensagem é de que ele não encontrou a função no RPO.
Pode ser que realmente ela tenha sido descontinuada, ai no caso, você pode abrir um chamado na TOTVS perguntando se existe alguma outra função paliativa para ser usada no lugar.