foreign key no IBExpert

Firebird

12/02/2005

Agradeço a quem estiver familiarizado com o assunto e puder ajudar. (Firebird 1.5, ambiente de auto escola). Estou tentando definir uma tabela (Veiculo) a qual contém uma coluna chamada Instr_Resp (instrutor responsável) que, como o prórprio nome sugere, é o instrutor responsável pelo veículo. Esta fk referencia Cod_Instr que é a chave primária na tabela Instrutor. Consegui definir as tabelas Instrutor e Veiculo, com excessão da informação sobre a foreign key. O IBExpert apresenta na descrição da tabela uma coluna com o título fk. Porém não consegui marcar o campo Instr_Resp como fk. Tentei também uma query em SQL (Alter table ...) mas sempre acontece um erro. Gostaria que alguém pudesse me fornecer instruções ou, pelo menos, um exempo que eu possa usar como modelo. Estou parado há dias ´enganchado´ nesta dificuldade.
Saudações


Roberto Padilha

Roberto Padilha

Curtidas 0

Respostas

Afarias

Afarias

12/02/2005

alter table Veiculo add constraint fk_veiculo_resp
foreign key (Instr_Resp) references Instrutor (Cod_Instr);


se está dando erro, passe a mesangem para podermos ver qual o motivo.


T+


GOSTEI 0
Roberto Padilha

Roberto Padilha

12/02/2005

Copiei e colei o texto que o A. Farias me enviou. Executei a query e desta vez não deu erro. Porém depois disso acrescentei, após a última palavra do texto, a complementação ´on delete cascade´ que é necessária mas que eu havia me esquecido:

alter table Veiculo add constraint fk_veiculo_resp
foreign key (Instr_Resp) references Instrutor (Cod_Instr) on delete cascade;

Desta vez, ao executar a query ocorreu a mensagem de erro colada abaixo:

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´.

Agradeço ao A. Farias a presteza e propriedade com que ma ajudou anteriormente e recorro mais uma vez ao prestimoso moderador para saber como resolver o novo problema.


GOSTEI 0
Vinicius2k

Vinicius2k

12/02/2005

Colega,

Isto está ocorrendo pq já existe a constraint com o mesmo nome da que vc está tentando criar...
Para fazer a correção, acrescentando a ação, vc precisa ´dropar´ a constraint atual e recriar da forma correta :

´Dropar´:
alter table Veiculo drop constraint fk_veiculo_resp

E depois recriar :
alter table Veiculo add constraint fk_veiculo_resp 
foreign key (Instr_Resp) references Instrutor (Cod_Instr) on delete cascade;


T+


GOSTEI 0
Roberto Padilha

Roberto Padilha

12/02/2005

Tudo certinho agora. Obrgado Vinícius, obrigado A. Farias.


GOSTEI 0
POSTAR