Fórum Alterar Campo PrimaryKey com valores já existentes via códig #167638

03/07/2003

0

Amigos do fórum!

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

Leoback

Responder

Posts

03/07/2003

Rodrigo Ferreira

Ei colega instale o IBExpert, por ele vc podera realizar esta manutencao sem problema OK.

Rodrigo Ferreira


Responder

Gostei + 0

04/07/2003

Leoback

Ei colega instale o IBExpert, por ele vc podera realizar esta manutencao sem problema OK.

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


Responder

Gostei + 0

04/07/2003

Allan

Leo,

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar