Skip to main content

Alteração de Registros em Massa na Atualização

Sempre que houver a necessidade de realizar alterações em massa nos registros de uma tabela durante o processo de atualização do sistema, utilizamos as rotinas de atualização controladas por versão.

Cada módulo do sistema possui uma unit específica para essa finalidade, nomeada como uAtualizaCampoNulo__.pas (onde o sufixo corresponde à sigla do módulo, ex: uAtualizaCampoNuloCC.pas).


Estrutura de Versionamento

As atualizações são encapsuladas dentro de condicionais que validam a versão atual do banco de dados (AVersaoDasTabelas). Isso garante que a rotina seja executada apenas uma vez, exatamente no momento em que o cliente atinge a versão estipulada.

Exemplo de Estrutura:
if (AVersaoDasTabelas < 5.185) then
begin
  // Executa o método padrão de atualização de campos
  TAtualizaCampoNulo.Atualizar('PARAMCC', 'BloqueiaNumOC', 'S', 'N');
  
  // Executa uma procedure customizada para ajustes complexos
  CorrigirCodClasse();
end;

Neste exemplo, ao atualizar o sistema para a versão 5.185:

  • O método TAtualizaCampoNulo.Atualizar será disparado para alterar os registros do campo BloqueiaNumOC na tabela PARAMCC, substituindo os valores 'S' por 'N'.
  • A procedure customizada CorrigirCodClasse() será chamada para executar comandos SQL adicionais.

Implementação de Procedures Customizadas

Para cenários onde o método TAtualizaCampoNulo.Atualizar não é suficiente (como atualizações que exigem regras de negócio mais complexas ou manipulação de strings), deve-se criar uma procedure interna isolada utilizando TFDQuery.

Exemplo de Procedure Customizada:
procedure CorrigirCodClasse();
var
  LQAux: TFDQuery;
begin
  LQAux := CriarFDQuery(nil);
  try
    LQAux.SQL.Clear();
    LQAux.SQL.Add('UPDATE NFReceb');
    LQAux.SQL.Add('   SET CodClasse = LPAD(CodClasse, 2, "0")');
    LQAux.SQL.Add(' WHERE CodClasse <> ""');
    LQAux.ExecutarSQL();
  finally
    FreeAndNil(LQAux);
  end;
end;