Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao criar FK em tabela relacional Firebird 2.1


  • Este tópico foi criado há 2444 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Pessoal boa tarde.

Estou criando uma cheve estrangeria em uma tabela que já possui dados.

O erro retornado pelo firebird :

Citar

---------- STATEMENT ----------

alter table PE0100
add constraint FK_PE0100_4
foreign key (C_COD_EMPRESA,C_COD_CLIENTE)
references CC0100(C_COD_EMPRESA,C_COD_CLIENTE)


---------- ERROR MESSAGE ----------

violation of FOREIGN KEY constraint "".
violation of FOREIGN KEY constraint "PK_CC0100" on table "CC0100".
Foreign key reference target does not exist.
 

Porém já fiz o seguinte select :

Citar

select C_COD_PEDIDO, C_COD_CLIENTE, C_FONE1_CLIENTE, C_DATA_PEDIDO, C_PEDIDO_FECHADO, C_COD_OPERADOR
from PE0100
where C_COD_CLIENTE not in (select C_COD_CLIENTE from CC0100)

E não traz nenhum registro, pois não há referências em aberto entre elas.

Alguém já passou por uma situação dessas ?

Muito Obrigado desde já.

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

Link para o comentário
Compartilhar em outros sites

  • Consultores

A chave que você está criando é composta. Não deveria testar os dois valores no seu select?

1 hora atrás, Edevair Viesa Junior disse:

(C_COD_EMPRESA,C_COD_CLIENTE)

 

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Membros Pro
34 minutos atrás, EMBarbosa disse:

A chave que você está criando é composta. Não deveria testar os dois valores no seu select?

 

EMBarbosa, primeiramente obrigado pela resposta.

Em relação ao tópico, respondendo sua pergunta, poderia ser se no caso houvesse mais de uma empresa cadastrada no sistema, percorri todo o conteúdo de PE0100 e não tem nenhuma empresa a não ser a '001'

Porém pra desencargo de consciência eu rodei o seguinte select :

Citar

select C_COD_PEDIDO, C_COD_CLIENTE, C_FONE1_CLIENTE, C_DATA_PEDIDO, C_PEDIDO_FECHADO, C_COD_OPERADOR
from PE0100
where C_COD_CLIENTE not in (select C_COD_CLIENTE from CC0100) or C_COD_EMPRESA not in (select C_COD_EMPRESA from CC0100)

O mesmo também não retornou registros.

Ou deveria fazer outro select ?

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

Link para o comentário
Compartilhar em outros sites

  • Consultores
41 minutos atrás, Edevair Viesa Junior disse:

Ou deveria fazer outro select ?

Pelo que me parece, deveria ser outro select. O cliente deve existir na mesma empresa.

algo como:

select C_COD_PEDIDO, C_COD_CLIENTE, C_FONE1_CLIENTE, C_DATA_PEDIDO, C_PEDIDO_FECHADO, C_COD_OPERADOR
from PE0100 P
where not exists (select 1 from CC0100 C where (C.C_COD_CLIENTE = P.C_COD_CLIENTE) and (C.C_COD_EMPRESA = P.C_COD_EMPRESA))

 

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Membros Pro
2 minutos atrás, EMBarbosa disse:

Pelo que me parece, deveria ser outro select. O cliente deve existir na mesma empresa.

algo como:


select C_COD_PEDIDO, C_COD_CLIENTE, C_FONE1_CLIENTE, C_DATA_PEDIDO, C_PEDIDO_FECHADO, C_COD_OPERADOR
from PE0100 P
where not exists (select 1 from CC0100 C where (C.C_COD_CLIENTE = P.C_COD_CLIENTE) and (C.C_COD_EMPRESA = P.C_COD_EMPRESA))

 

Verdade, mesmo assim não retorna nenhum registro...

Deveria passar tranquilamente o FK não ??

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

Link para o comentário
Compartilhar em outros sites

  • Consultores

Parece, mas não estou certo.

Pode ser que tenha algum problema nos índices e o registro não está sendo exibido.

Pode ser que tenha alguma inconsistência na tabela CC0100 (já que a PK dela é mencionada no erro: violation of FOREIGN KEY constraint "PK_CC0100" on table "CC0100" ).

E parece que podem ser registros visíveis a outras transações. Nesse caso, você teria que colocar o banco offline ou reiniciar o servidor.

 

  • Obrigado 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Membros Pro
Em 25/08/2017 at 17:58, EMBarbosa disse:

Parece, mas não estou certo.

Pode ser que tenha algum problema nos índices e o registro não está sendo exibido.

Pode ser que tenha alguma inconsistência na tabela CC0100 (já que a PK dela é mencionada no erro: violation of FOREIGN KEY constraint "PK_CC0100" on table "CC0100" ).

E parece que podem ser registros visíveis a outras transações. Nesse caso, você teria que colocar o banco offline ou reiniciar o servidor.

 

Perfeito EMBarbosa...

Foi só reiniciar o servidor que funcionou...

Muito Obrigado !!

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

Link para o comentário
Compartilhar em outros sites

  • Consultores
6 horas atrás, Edevair Viesa Junior disse:

Perfeito EMBarbosa...

Foi só reiniciar o servidor que funcionou...

Muito Obrigado !!

De nada. Obrigado pelo retorno. :geek:

  • Obrigado 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2444 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.