Fórum Reordear registros de uma tabela #382545
30/07/2010
0
Tenho três tabelas relacionadas entre si: Artigos, Processos e Roteiro.
Cada artigo possui um roteiro de processos a ser seguido na produção. Esse roteiro deve ser seguido conforme o campo ORDEM_ROTEIRO. MAS essa sequência pode ser alterada pelo usuário e para que ele não precise ir registro por registro alterando o número da sequência, quero fazer um rotina no delphi ou no banco de dados(Trigger/Procedure) para automatizar esse processo. Exemplo 1: Tenho os registros com a sequência (1, 2, 3, 4, 5, 6, 7) ai deleto o registro cuja a ORDEM_ROTEIRO é 4 ai a sequência fica (1, 2, 3, 5, 6, 7), porém preciso que fique (1, 2, 3, 4, 5, 6)
Exemplo 2: Tenho os registros com a sequência (1, 2, 3, 4, 5, 6, 7) ai insiro um registro cuja a ORDEM_ROTEIRO deverá ser 3, ai a sequência fica (1, 2, 3, 3, 4, 5, 6, 7), porém preciso que fique (1, 2, 3, 4, 5, 6, 7, 8).
Se alguém tiver uma rotina que reordene essa listagem automaticamente ficarei muito grato. Desde já agradeço a ajuda.
Estou usando Delphi 7, DBExpress, Firebird 2.1.3.
Valeu.
Carlos Heidrich
Curtir tópico
+ 0Posts
30/07/2010
Wilson Junior
UPDATE ORDEM_ROTEIRO SET Ordem = Ordem - 1 WHERE Ordem > 4
Exemplo 2
Antes de gravar o novo registro de ordem 3, faça:
UPDATE ORDEM_ROTEIRO SET Ordem = Ordem + 1 WHERE Ordem >= 3
Lembrando, abra uma transação para Apagar e depois efetuar o UPDATE e o mesmo para gravar.
Exemplo:
try
Inicia_Transacao;
ApagaRegistro_4;
ExecutaUpdateRegistro_4;
Grava_Transacao;
except
Cancela_Transacao;
raise;
end;
try
Inicia_Transacao;
ExecutaUpdateRegistro_3;
GravaRegistro_3;
Grava_Transacao;
except
Cancela_Transacao;
raise;
end;
Espero ter colaborado.
Gostei + 0
19/08/2010
Carlos Heidrich
Existe um método de ordenação que os professores ensinam para situações como essa, mas agora não me recordo como se faz(já faz um tempinho que tranquei a faculdade) . O método possui uns 3 ou 4
for
while
Gostei + 0
20/08/2010
Eriley Barbosa
Gostei + 0
23/08/2010
Carlos Heidrich
Gostei + 0
23/08/2010
Eriley Barbosa
Qry: TSQLQuery;
begin
if not(SeuClientDataset.IsEmpty) then
begin
Qry := TSQLQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.SQLConnection := SeuSQLConnection;
Qry.SQL.Add('SELECT ORDEM_ROTEIRO FROM ROTEIRO WHERE COD_ARTIGO = ' +
SeuClientDataset.FieldByName('COD_ARTIGO').AsString
' AND COD_PROCESSO = ' + SeuClientDataset.FieldByName('COD_PROCESSO').AsString + ')';
Qry.Open;
if not(Qry.Fields[0].IsNull) then
OrdemIns := Qry.Fields[0].AsInteger;
finally
FreeAndNil(Qry); {: libera o objeto da memória}
end;
end;
end; Quanto ao Update, explique melhor.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)