A manipulação de registros em lote em bancos de dados é uma prática comum para atender às demandas de aplicativos modernos.
procedure UpdateBatchRecords;
var
Query: TQuery;
begin
Query := TQuery.Create(nil);
try
Query.DatabaseName := 'ParadoxDB';
Query.SQL.Text := 'UPDATE NewTable SET Name = :NewName WHERE ID <= :MaxID';
Query.Params.ParamByName('NewName').AsString := 'Updated Name';
Query.Params.ParamByName('MaxID').AsInteger := 5;
Query.ExecSQL;
Writeln('Registros atualizados com sucesso!');
except
on E: Exception do
Writeln('Erro ao atualizar registros: ', E.Message);
end;
Query.Free;
end;
No Delphi, o componente TQuery permite implementar essa funcionalidade com flexibilidade e eficiência. Abaixo, exploramos o código para atualização de registros em lote e discutimos aplicações, melhores práticas e melhorias para aumentar a robustez do sistema.
procedure UpdateBatchRecords;varQuery: TQuery;beginQuery := TQuery.Create(nil);tryQuery.DatabaseName := 'ParadoxDB';Query.SQL.Text := 'UPDATE NewTable SET Name = :NewName WHERE ID <= :MaxID';Query.Params.ParamByName('NewName').AsString := 'Updated Name';Query.Params.ParamByName('MaxID').AsInteger := 5;Query.ExecSQL;Writeln('Registros atualizados com sucesso!');excepton E: Exception doWriteln('Erro ao atualizar registros: ', E.Message);end;Query.Free;end;
Aplicabilidade do Código
Este código realiza a atualização de registros em que o valor de ID é menor ou igual a um valor especificado (é 5, neste exemplo). As aplicações incluem:
Atualizações em Massa: Alterar informações de forma automatizada em registros selecionados.
Manutenção de Dados: Corrigir valores desatualizados ou incoerentes de acordo com regras de negócio.
Testes Automatizados: Preparar bancos de dados para testes controlados, garantindo que os dados sigam um padrão desejado.
Embora funcional, o código pode ser aprimorado para atender a boas práticas e facilitar manutenção e extensibilidade.
Melhoria 1: Garantir Liberação de Recursos com try..finally
A primeira melhoria é substituir o bloco try
simples pelo uso de try..finally
. Isso assegura que o recurso Query seja liberado mesmo em caso de erros:
procedure UpdateBatchRecords;varQuery: TQuery;beginQuery := TQuery.Create(nil);tryQuery.DatabaseName := 'ParadoxDB';Query.SQL.Text := 'UPDATE NewTable SET Name = :NewName WHERE ID <= :MaxID';Query.Params.ParamByName('NewName').AsString := 'Updated Name';Query.Params.ParamByName('MaxID').AsInteger := 5;Query.ExecSQL;Writeln('Registros atualizados com sucesso!');finallyQuery.Free;end;end;
Melhoria 2: Criação de Classe Helper para Reutilização
Abstrair a lógica de atualização para uma classe helper melhora a legibilidade e permite reutilização do código em outros contextos:
typeTDatabaseHelper = classpublicclass procedure ExecuteUpdate(const DatabaseName, SQLCommand: string; const Params: array of const);end;class procedure TDatabaseHelper.ExecuteUpdate(const DatabaseName, SQLCommand: string; const Params: array of const);varQuery: TQuery;i: Integer;beginQuery := TQuery.Create(nil);tryQuery.DatabaseName := DatabaseName;Query.SQL.Text := SQLCommand;for i := Low(Params) to High(Params) doQuery.Params[i].Value := Params[i].VInteger;Query.ExecSQL;Writeln('Operação concluída com sucesso!');finallyQuery.Free;end;end;procedure UpdateBatchRecords;beginTDatabaseHelper.ExecuteUpdate('ParadoxDB', 'UPDATE NewTable SET Name = :NewName WHERE ID <= :MaxID', [5]);end;
Clique aqui e nos contate via What's App para avaliarmos seus projetos
Série de Livros nut Project
Nenhum comentário:
Postar um comentário