Fórum Alterar Campo PrimaryKey com valores já existentes via códig #167638
03/07/2003
0
Tenho uma tabela(empresas) em Interbase com o campo IDEMPRESA,(integer) cujos valores não são sequenciais (ex: 1,5,9,27,etc). Gostaria de saber se alguem tem algum código em Delphi onde eu pudesse substituir todos esses valores por valores sequenciais(ex: 1,2,3,4...).
Utilizei o código abaixo mas occorre uma exceção do tipo ´Violation of primary or Unique Key Contraint PK_EMPRESA on Table EMPRESA´.
procedure TForm1.Button1Click(Sender: TObject);
var
proxnum:integer;
begin
IBDataSet1.First;
while(not IBDataSet1.Eof) do
begin
IBDataSet1.Edit;
proxnum:=IBDataSet1.RecNo;
IBDataSet1IDEMPRESA.Value:=proxnum;
Label1.Caption:=IntToStr(proxnum);
IBDataSet1.Next;
end;
end;
Agradeço qualquer ajuda ou comentário
Leo(leoback@hotmail.com)
Leoback
Curtir tópico
+ 0Posts
03/07/2003
Rodrigo Ferreira
Rodrigo Ferreira
Gostei + 0
04/07/2003
Leoback
Rodrigo Ferreira
Olá Rodrigo,
Primeiramente agradeço a atenção que vc dispensou a minha dúvida... porém não entendí como o IBExpert poderá me ajudar... ele tem alguma função ou procedimento padrão para substituir os valores já existentes em um campo primary_Key por exemplo? Eu tenho instalado aqui o EMS Interbase & Firebird Manager 3 e não conseguí fazer isso. Mas valeu pela dica! Vou tentar o IBExpert.
Um abraço
Leo
Gostei + 0
04/07/2003
Allan
Pelo que vi o problema é que vc está alterando um campo id da tabela de empresa, e vc tem outras tabelas filhas que dependem desse campo para relacionamento.
A minha sugestão é no seu loop, identificar o id atual, e fazer um update em todas as tabelas que fazem relacionamento com ela, passando como novo id , e depois disso atualizar sua tabela de empresas , algo como :
update tab_filial set idempresa = novoidempresa
where idempresa = idatual
e depois vc atualizar a tabela de empresa.
Allan
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)