Erro ao criar Segunda Chave Estrangeira
Olá pessoal, tudo bem? Espero q sim..
Estou usando o Firebird 1.5 e criando e modificando minha tabela pelo IbExpert, aquela versão free.. o problema acontece sempre q eu tento criar uma segunda regra pra deletar registros, q é assim:
Tabela Grupos Tabela SubGrupos Tabela Revistas
PkCod_Grupo PkCod_SubGrupo PkCod_Revista
Nome FkCod_Grupo FkCod_Grupo
Nome FkCod_SubGrupo
Nome
Basicamente é isso.. o q quero é o seguinte, quando eu deletar um Grupo, q o programa delete também o SubGrupo e a Revista ligado a ele.. isso eu consigo, botando o código na Tabela Revistas pra ´apagar em cascata´.. só q, se eu tento colocar outro código pra q a revista seja apagada se for deletado um SubGrupo, o programa dá o erro abaixo, e nao deixa eu gerar esse scrip.. o q será q pode ser?
Allan Elias Ramos :?:
Estou usando o Firebird 1.5 e criando e modificando minha tabela pelo IbExpert, aquela versão free.. o problema acontece sempre q eu tento criar uma segunda regra pra deletar registros, q é assim:
Tabela Grupos Tabela SubGrupos Tabela Revistas
PkCod_Grupo PkCod_SubGrupo PkCod_Revista
Nome FkCod_Grupo FkCod_Grupo
Nome FkCod_SubGrupo
Nome
Basicamente é isso.. o q quero é o seguinte, quando eu deletar um Grupo, q o programa delete também o SubGrupo e a Revista ligado a ele.. isso eu consigo, botando o código na Tabela Revistas pra ´apagar em cascata´.. só q, se eu tento colocar outro código pra q a revista seja apagada se for deletado um SubGrupo, o programa dá o erro abaixo, e nao deixa eu gerar esse scrip.. o q será q pode ser?
This operation is not defined for system tables. unsuccessful metadata update. STORE RDB$INDICES failed. attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_5".
Allan Elias Ramos :?:
Aersoftware
Curtidas 0
Respostas
Fsflorencio
09/11/2004
Não sei se entendí o problema: Ele ocorre quando você tenta manipular os dados ou quando você tenta rodar um script?
ps. Se puder, coloque os scripts de criação das chaves primárias e estrangeiras pra nós darmos uma olhada.
ps. Se puder, coloque os scripts de criação das chaves primárias e estrangeiras pra nós darmos uma olhada.
GOSTEI 0
Aersoftware
09/11/2004
Desculpe, acho q minha explicação ficou meio confusa mesmo.. é o seguinte, tirei alguns prints pra demonstrar..
Tenho 3 Tabelas:
Grupos
SubGrupos
Revistas
Sou [b:739ca452af]obrigado[/b:739ca452af] a ter um Grupo e um SubGrupo pra ter uma revista.. mas no caso, um Grupo pode ter muitos SubGrupos, e um SubGrupo pode ter muitas Revistas..
Neste print, o q eu quero fazer funciona, q é, quando deletar um Grupo, deletar tb todos Grupos e Revistas ligado nele..
[url]www.multiversox.com/phpteste/ChaveEstrangeiraGrupos.JPG[/url]
Neste segundo print, o q tento fazer é colocar tb, pra quando eu deletar um SubGrupo, deletar todas revistas contidas nele..
[url]www.multiversox.com/phpteste/ChaveEstrangeiraSubGrupos.JPG[/url]
só q quando boto pra rodar esse script, ele da o seguinte..
[url]www.multiversox.com/phpteste/ChaveEstrangeiraSubGruposErro.JPG[/url].
Isso q nao entendo pq.. :cry:
Allan Elias Ramos :cry:
Tenho 3 Tabelas:
Grupos
SubGrupos
Revistas
Sou [b:739ca452af]obrigado[/b:739ca452af] a ter um Grupo e um SubGrupo pra ter uma revista.. mas no caso, um Grupo pode ter muitos SubGrupos, e um SubGrupo pode ter muitas Revistas..
Neste print, o q eu quero fazer funciona, q é, quando deletar um Grupo, deletar tb todos Grupos e Revistas ligado nele..
[url]www.multiversox.com/phpteste/ChaveEstrangeiraGrupos.JPG[/url]
Neste segundo print, o q tento fazer é colocar tb, pra quando eu deletar um SubGrupo, deletar todas revistas contidas nele..
[url]www.multiversox.com/phpteste/ChaveEstrangeiraSubGrupos.JPG[/url]
só q quando boto pra rodar esse script, ele da o seguinte..
[url]www.multiversox.com/phpteste/ChaveEstrangeiraSubGruposErro.JPG[/url].
Isso q nao entendo pq.. :cry:
Allan Elias Ramos :cry:
GOSTEI 0
Fsflorencio
09/11/2004
O erro está ocorrendo pq vc está tentando criar duas constraints com o mesmo nome: FK_TBREVNACIONAIS. As constraints (ou restrições) devem ter nomes diferentes.
O q eu não entendí, é que na figura aparecem duas constraints com o mesmo nome. Foi feita alguma montagem?
O q eu não entendí, é que na figura aparecem duas constraints com o mesmo nome. Foi feita alguma montagem?
GOSTEI 0
Aersoftware
09/11/2004
Hmmm.. entendi.. mas eu posso entao colocar o nome da outra constrains como FK_TBREVNACIONAIS1 por exemplo q funciona normal??
A figura ta daquele jeito pq eu nao salvei as alterações.. o programa deixa eu fazer, mas quando dou o Commit, ele gera o erro da 3ª figura..
Allan Elias Ramos :roll:
A figura ta daquele jeito pq eu nao salvei as alterações.. o programa deixa eu fazer, mas quando dou o Commit, ele gera o erro da 3ª figura..
Allan Elias Ramos :roll:
GOSTEI 0
Fsflorencio
09/11/2004
Pode.
A dica que te dou é a seguinte:
No nome da constraint colocar o nome das duas tabelas, por ex: FK_CONTAS_RECEBER_CLIENTES, ITENS_PEDIDOS_PRODUTOS.
Desta forma, quando ocorrer algum erro na aplicação envolvendo estas chaves, de cara já dá pra descobrir quais são as tabelas envolvidas sem haver necessidade de abrir o banco.
A dica que te dou é a seguinte:
No nome da constraint colocar o nome das duas tabelas, por ex: FK_CONTAS_RECEBER_CLIENTES, ITENS_PEDIDOS_PRODUTOS.
Desta forma, quando ocorrer algum erro na aplicação envolvendo estas chaves, de cara já dá pra descobrir quais são as tabelas envolvidas sem haver necessidade de abrir o banco.
GOSTEI 0
Aersoftware
09/11/2004
Certo, valeu fsflorencio, vou fazer essas modificações. obrigado. Abraços..
Allan Elias Ramos :roll:
Allan Elias Ramos :roll:
GOSTEI 0
Aersoftware
09/11/2004
Só mais uma perguntinha.. se eu modificar o nome de uma constraints já criada, eu tenho q ´autalizar´ a conexao do banco com o delphi? Pelo q me lembro, se eu modifcar um campo texto por exemplo, aumentando o tamanho dele, tenho q atualizar a conexao pra ele atualizar o campo no delphi.. isso deve ser feito tb com a constraints?
Allan Elias Ramos :wink:
Allan Elias Ramos :wink:
GOSTEI 0
Gandalf.nho
09/11/2004
Só mais uma perguntinha.. se eu modificar o nome de uma constraints já criada, eu tenho q ´autalizar´ a conexao do banco com o delphi? Pelo q me lembro, se eu modifcar um campo texto por exemplo, aumentando o tamanho dele, tenho q atualizar a conexao pra ele atualizar o campo no delphi.. isso deve ser feito tb com a constraints?
Não.
GOSTEI 0