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.