Fórum U.F.O : Key Violation em chave estrangeira??? vc já viu? #286401
29/06/2005
0
Numca vi um erro de Key violation em Chave estrangeira, pois esse é o erro q ta dando na tbl.
eu tenho uma tbla Dtail de Diciplinas do Curso, a estrutura é assim:
**codCurso,**CodDiciplina,NomeDiciplina,*CodProfessor,Cargahoraria
**= Chave Primaria
* = Chave Estrangeira
quando eu cadastro duas diciplinas com o mesmo professor ele me mostra o erro Key Violation.
Como se resolve isso?
Daniel Martins
Curtir tópico
+ 0Posts
29/06/2005
Motta
Professor não devia estar na PK ?!
Gostei + 0
29/06/2005
Daniel Martins
uso DBXpress para o Acesso no Banco IB6
Gostei + 0
29/06/2005
Marlon Spiess
Vc está usando mastertable :?:
Vc está usando paradox :?:
Vc definiu na tables a foreingkey :?:
Um pouco mais de detalhes ajuda :!:
Gostei + 0
29/06/2005
Daniel Martins
estou usando os componentes:
SQLQuery1, DataSetProvider1, ClientDataSet1, DataSource1
todos com as suas respectivas conexoes. no componente SQLQuery1 uso o sql:
SELECT DC.*,
(SELECT P.NM_PROFESSOR FROM PROFESSOR P WHERE P.ID_PROFESSOR = DC.ID_PROFESSOR) AS PROFESSOR
FROM DICIPLINA_CURSO DC
WHERE DC.ID_CURSO =:CODCURSO
a estrutura das telas e conexoes e configuração dos componentes é a mesma do artigo de capa da edição 61 da Clube Delphi...
Pra quem ja leu, eu Utilizei todas as dicas q foram mostradas.
Gostei + 0
29/06/2005
Daniel Martins
Gostei + 0
29/06/2005
Jairroberto
Esse ´key violation´ a que você se refere deve ser ´violation of primary key´, pois como disse o Motta, se você não colocar o ID_PROFESSOR na chave primária e incluir dois ID_DISCIPLINA iguais para dois ID_CURSO iguais, seja qual for o professor, vai violar a chave primária. Veja:
Curso Disciplina Professor 1 1 1 1 1 2 -> Violação (Curso=1 e Disciplina=1)
Um abraço,
Jair
Gostei + 0
30/06/2005
Daniel Martins
Curso Diciplina Nome Professor
1 1 teste 1
1 2 teste2 2
1 3 teste3 1 =>Key Violation (Duas materias com o mesmo professor)
o ID_PROFESSOR num ta na chave primaria por que ele é chave estrangeira.
Gostei + 0
30/06/2005
Jairroberto
Qual é exatamente a mensagem de erro que você está recebendo?
Obs.: um campo que pertence a uma chave estrangeira também pode pertencer à chave primária.
Um abraço,
Jair
Gostei + 0
01/07/2005
Daniel Martins
Tabela Curso **CodCurso |NomeCurso 1 Cuspe a Distancia ______________________________________________ Tabela Diciplinas do Curso: **CodCurso | **CodDiciplina | Nome | CodProfessor 1 1 Técnicas de cuspe 1 1 2 Tipos de Cuspe 2 1 3 Tipo de Alvos 1 =>(Key V) _ _____________________________________________ Tabela Professor: **CodProfessor | NomeProfessor 1 Fulano 2 Beltrano 3 Ciclana ... ...
A Estrutura das Tabelas informadas acima mostra o como esta o programa e onde realmente da o erro.
Qdo é Cadastrado uma 2 diciplinas Diferentes, mas com o mesmo professor ele da esse erro, isso é um problema por q , pode um professor dar duas diciplinas diferentes....
Deu entender?
A coisa é estranha mesmo...
na verdade eu acho que o problema pode ser no SqL...
Obs: o DataSetProvider esta Configurado como´ whereKeyOnly´
Gostei + 0
01/07/2005
Luciohc
Já vi esse erro e demorei para achar uma solução, mas encontrei.
Não sei se vai ser útil a você, vamos lá.
A minha solução foi setar a propriedade INKEY do SQLDATASET E CLIENTDATASET PARA FALSE. Campos que repetem os dados não podem ter INKEY = true. No meu caso resolveu, espero que te ajude.
Lúcio ...
Gostei + 0
02/07/2005
Daniel Martins
obrigado pela dica
Gostei + 0
05/07/2005
Daniel Martins
Escrevo para dizer o q fiz para resolver o meu problema....
eu disse que tinha a query
Qry1:
SELECT DC.*,
(SELECT P.NM_PROFESSOR FROM PROFESSOR P WHERE P.ID_PROFESSOR = DC.ID_PROFESSOR) AS PROFESSOR
FROM DICIPLINA_CURSO DC
WHERE DC.ID_CURSO =:CODCURSO
Com esse Sql dava o erro Key Violation qdo a variavel ID_PROFESSOR era preenchida...
fiz uma outra Query com o sql:
Qry2:
SELECT DC.*,
FROM DICIPLINA_CURSO DC
WHERE DC.ID_CURSO =:CODCURSO
deforma q so listaria as variaveis: IdCurso,IdDiciplina,IdProfessor
Ao Salvar o Novo Registro Preencho estas variaveis na Qry2 e salvo.
e Atualizo a Qry1 para o Usuario.
Resumo:
Utilizei 2 Querys. 1 para o Cadastro e Outra para a Listagem....
Lokura né?? mas resolveu....
Gostei + 0
05/07/2005
Ivanh
pfInKey := true
Gostei + 0
10/07/2005
Daniel Martins
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)