Chave primaria erro

Firebird

22/04/2010

O novato e esquecido aqui, não criou a chave primaria da tabela produto, e estou tentando cria-la com o seguinte comando:   ALTER TABLE "TBL_PRODUTO" ADD CONSTRAINT "PRODUTO_PK" PRIMARY KEY ("PRO_CODIGO");   e me aparece o seguinte erro:   Attempt to store duplicate value (visible to active transactions) in unique index "RDB$PRIMARY9"
Statement: ALTER TABLE "TBL_PRODUTO" ADD CONSTRAINT "PRODUTO_PK" PRIMARY KEY ("PRO_CODIGO")
  A tabela não tem nenhum registro gravado e pelo que parece está dizendo que existe codigo duplicado, mas se naum tem nenhum registro como é possivel??? e outra coisa aproveitando como faço pra criar um criador automatico de codigo?? mas tem um problema, com esse criador automatico se eu excluir o ultimo registro ele vai criar um codigo acima ou o codigo que foi excluido??? Pois como eu estou criando o programa coloco uns registros para testar e gostaria que na hora que eu terminar o programa ele comece do codigo 1 em diante     André Batista
Andre Batista

Andre Batista

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

22/04/2010

O banco está lhe informando que já existe um CONSTRAINT com o nome "PRODUTO_PK".
Em último caso, se a tabela não possui nenhum registro, como você disse, exclua a tabela e a crie novamente.

Espero ter colaborado.
GOSTEI 0
Andre Batista

Andre Batista

22/04/2010

Eu num tinha pensado nisso em excluir a tabela e cria-la de novo já com a chave primaria, deu certo, mas agora e a segunda parte da pergunta, como criar um gerador de codigo automatico e vou conseguir depois de criar uns registros e exclui-los que o gerador comece do inicio???? pois agora esta tudo em faze de experimento, mas quando terminar o sistema quero q os codigos sejam desde o principio     valeu   André Batista
GOSTEI 0
Wilson Junior

Wilson Junior

22/04/2010

Depende de como você está fazendo este seu gerardo r de código automático, explique como você está fazendo?
GOSTEI 0
Andre Batista

Andre Batista

22/04/2010

Ae eh q esta o problema num tenhu nem ideia de como fazer isso, mas tipo, se eu criar um vou poder depois dele funcionando criar codigos que ja exitiram e foram excluidos??? e vc pode me dar +o- a ideias de como fazer???
GOSTEI 0
Wilson Junior

Wilson Junior

22/04/2010

Qual banco de dados você utiliza?
GOSTEI 0
Andre Batista

Andre Batista

22/04/2010

Eu uso o Interbase 6, desculpe a demora na resposta, sou um cara taum sortudo que deu pau no meu micro de casa, e quando fui fazer backup dele no meu note, deu pau tmb no note, perdi tudo dos 2, vou ter q começar tudo denovo, afff, mas valeu, se vc puder me ajudar Wilson eu agradeço e a partir de agora vou faer backup no meu hd virtual tmb, pra garantir, auhhuahua   Valeu   André Batista
GOSTEI 0
Wilson Junior

Wilson Junior

22/04/2010

Eu aconselho a utilizar o GENERATOR. É uma ótima maneira de se fazer isto.

Espero ter colaborado.
GOSTEI 0
Andre Batista

Andre Batista

22/04/2010

Naum conheço esse GENERATOR, mas vou procurar saber o que é e como utiliza, logo logo eu falo se funcionou ou naum, valeu Wilson     André Batista
GOSTEI 0
Carlos Mazzi

Carlos Mazzi

22/04/2010

Use ou baixe a versao free do IBEXPERT, é mais simples  de se criar, tabelas, visualizar erros, criar indices, criar chaves e os generators .   Mas caso queira criar na mao mesmo assim:   1-crie a tabela:   2-crie um generator:   3-crie uma trigger:   4-crie uma storeprocedure:   Exemplo de uma tabela chama A_TESTE:   ----------------------- CREATE TABLE A_TESTE (
    CODIGO INTEGER NOT NULL,
    NOME VARCHAR(50));
alter table A_TESTE
add constraint PK_A_TESTE
primary key (CODIGO);
CREATE SEQUENCE GEN_A_TESTE_ID;   //sequence
SET TERM ^ ; create trigger a_teste_bi for a_teste
active before insert position 0
as
begin
  if (new.codigo is null) then
    new.codigo = gen_id(gen_a_teste_id,1);
end
^ SET TERM ; ^     SET TERM ^ ; create procedure sp_gen_a_teste_id
returns (id integer)
as
begin
  id = gen_id(gen_a_teste_id, 1);
  suspend;
end
^ SET TERM ; ^     é isso ae
GOSTEI 0
Carlos Mazzi

Carlos Mazzi

22/04/2010

Resolvido ?
GOSTEI 0
POSTAR