Chave primaria erro
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
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
Curtidas 0
Respostas
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.
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
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
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
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
22/04/2010
Qual banco de dados você utiliza?
GOSTEI 0
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
22/04/2010
Eu aconselho a utilizar o GENERATOR. É uma ótima maneira de se fazer isto.
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0
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
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
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
22/04/2010
Resolvido ?
GOSTEI 0