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.Atualizarserá disparado para alterar os registros do campoBloqueiaNumOCna tabelaPARAMCC, 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;
No Comments