# 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:

```pascal
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.

<p class="callout info">[Como Identificar o Número da Versão de um Módulo](https://wiki.supersoft.com.br/books/padroes-de-codigo/page/como-identificar-o-numero-da-versao-de-um-modulo "Como Identificar o Número da Versão de um Módulo")</p>

---

## 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:

```pascal
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;
```