Limpando várias tabelas via AdvPL

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.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

6 Responses

  1. Abel disse:

    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?

  2. erick disse:

    boa tarde, da erro nesta funcao OpenExclusivo(.T.)

  3. erick disse:

    Exception: InterFunctionCall: cannot find function OPENEXCLUS in AppMap (58)

    • Dan_Atilio disse:

      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.

Deixe uma resposta