GARANTIR DESCONTO

Fórum Alterar Chave Extrangeira para On Update cascade #42588

25/02/2004

0

Pessoal,

Preciso alterar as chaves extrangeiras das minhas tabelas colocando ON UPDATE CASCADE ON DELETE CASCADE.
Meu script inicial é:

ALTER TABLE "TBITENSCPAGAR" ADD FOREIGN KEY ("ICPCPAGAR_ID") REFERENCES TBCPAGAR ("ID");

Foi assim q construi as FK.
Percebendo que preciso colocar as regras de negocio, quero q fique:

ALTER TABLE "TBITENSCPAGAR"
  ADD CONSTRAINT "FK_ITENSCPAGAR_CPAGAR" FOREIGN KEY ("ICPCPAGAR_ID") REFERENCES TBCPAGAR ("ID")
  ON UPDATE CASCADE ON DELETE CASCADE;


Se eu jogar o código acima, a tabela é atualizada, mas fica uma espécie de lixo, ou seja, o código acima é adicionado no script, mas o anterior continua! O que eu quero é atualizar a tabela de forma q o script não fique com esse lixo, e sim, apenas a FK atual!

Já tentei fazer assim:

ALTER TABLE "TBITENSCPAGAR"
  ALTER CONSTRAINT "FK_ITENSCPAGAR_CPAGAR" FOREIGN KEY ("ICPCPAGAR_ID") REFERENCES TBCPAGAR ("ID")
  ON UPDATE CASCADE ON DELETE CASCADE;


Mas não funciona!
Alguem tem alguma sugestão!?!?


Rafaelunp

Rafaelunp

Responder

Post mais votado

25/02/2004

apenas DROPe a constraint anterior:


ALTER TABLE ´TBITENSCPAGAR´ DROP CONSTRAINT nome_da_constraint;


T+


Afarias

Afarias
Responder

Gostei + 1

Mais Posts

25/02/2004

Rafaelunp

apenas DROPe a constraint anterior: ALTER TABLE ´TBITENSCPAGAR´ DROP CONSTRAINT nome_da_constraint; T+


Afarias,

´Dropei´ as FK, mas na hora de criar uma nova, dá erro!

Unsuccessful metadata update
Unknown columns in index RDB$FOREIGN10
Statement: ALTER TABLE "TBAPTOESTOQUE"
 ADD CONSTRAINT "FK_APESTOQUE_APTO" FOREIGN KEY ("AEAPTO_ID") REFERENCES TBAPTO ("ID")
 ON UPDATE CASCADE ON DELETE CASCADE


Já reiniciei o BD, para ver se não é nada na memoria, mas nao funcionou!


Responder

Gostei + 0

26/02/2004

Rafaelunp

Tá ficando dificil...


Responder

Gostei + 0

26/02/2004

Afarias

Realmente difícil... se vc fez tudo certo realmente -- não sei o q pode estar acontecendo, pois faço isso tranquilamente, e nunca ocorreram erros.!

A idéia q passa é q vc está passando o nome da coluna errado! De uma olhadinha ai... principalmente q vc usa os nomes entre aspas -- dai, tem de se observar maiúsculas e minúsculas -- exatamente como foi criado!


T+


Responder

Gostei + 0

26/02/2004

Logado

se vc estiver usando o ibexpert e facil

viasualize a tabela rdb$relations ou alo parecido q vc vai encontrar o indice q vc acabou de deletar la, apaue-o e tente cria-lo de novo...

meu teclado ta f.....


Responder

Gostei + 0

26/02/2004

Rafaelunp

Realmente difícil... se vc fez tudo certo realmente -- não sei o q pode estar acontecendo, pois faço isso tranquilamente, e nunca ocorreram erros.! A idéia q passa é q vc está passando o nome da coluna errado! De uma olhadinha ai... principalmente q vc usa os nomes entre aspas -- dai, tem de se observar maiúsculas e minúsculas -- exatamente como foi criado! T+


Pessoal,

realmente tenho que insistir nesta ajuda... Seguinte...

Quando criei a tabela, criei a FK assim:

ALTER TABLE "TBAPTOESTOQUE" ADD FOREIGN KEY ("AEAPTO_ID") REFERENCES TBAPTO ("ID");


Ai, adicionei uma nova com o On Delete no final. o meu codigo (Meta Data) ficou assim:

ALTER TABLE "TBAPTOESTOQUE" ADD FOREIGN KEY ("AEAPTO_ID") REFERENCES TBAPTO ("ID") ON DELETE CASCADE;
ALTER TABLE "TBAPTOESTOQUE" ADD FOREIGN KEY ("AEAPTO_ID") REFERENCES TBAPTO ("ID");


Eu simplesmente preciso, excluir esse lixo!
ALTER TABLE "TBAPTOESTOQUE" ADD FOREIGN KEY ("AEAPTO_ID") REFERENCES TBAPTO ("ID");


Faço isso conforme orientação:

ALTER TABLE "TBAPTOESTOQUE" DROP CONSTRAINT AEAPTO_ID;


Sendo que dá esse erro:

Unsuccessful metadata update
CONSTRAINT AEAPTO_ID does not exist
Statement: ALTER TABLE "TBAPTOESTOQUE" DROP CONSTRAINT AEAPTO_ID


E ai!?!?
Preciso realmente da ajuda de voces!!


Responder

Gostei + 0

27/02/2004

Afarias

|Quando criei a tabela, criei a FK assim:

Ahhhhhhh.... vc quando criou a constraint, não definiu seu NOME -- sendo assim o IB colocou um nome qualquer gerado por ele.

Note q na orientação, informa q para dropar uma constraint vc deve passar o NOME da mesma! E *não* é isso q vc está fazendo!

Primeiro veja qual o nome da constraint (dado pelo IB -- algo tipo ´INTEG_n´) e então use o comando:

ALTER TABLE nome_tabela DROP CONSTRAINT nome_constraint;


Para saber o nome da constraint, vai depender da ferramenta q vc está usando, mas tenho certeza que vc não terá dificuldade.

Se vc usa o ISQL, basta usar o comando

SHOW TABLE nome_da_tabela;

e vc terá alem da lista de campos, a lista de constraints da tabela.



T+


Responder

Gostei + 1

28/02/2004

Rafaelunp

Perfeito, Afarias!!!!

Muito Obrigado! :lol:


Responder

Gostei + 0

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

Aceitar