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. Como Identificar o Número da Versão de um Módulo 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;