U.F.O : Key Violation em chave estrangeira??? vc já viu?
Oi, A coisa é de loko:
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?
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
Curtidas 0
Respostas
Motta
29/06/2005
[quote:29e512e7ce=´DAniel S Martins´]... quando eu cadastro duas diciplinas com o mesmo professor ele me mostra o erro Key Violation....[/quote:29e512e7ce]
Professor não devia estar na PK ?!
Professor não devia estar na PK ?!
GOSTEI 0
Daniel Martins
29/06/2005
O CodProfessor é chave Estrangeira a tbl DiciplinaCurso tem ChaveComposta por: CodCurso, CodDiciplina
uso DBXpress para o Acesso no Banco IB6
uso DBXpress para o Acesso no Banco IB6
GOSTEI 0
Marlon Spiess
29/06/2005
Vc está usando table e datasource :?:
Vc está usando mastertable :?:
Vc está usando paradox :?:
Vc definiu na tables a foreingkey :?:
Um pouco mais de detalhes ajuda :!:
Vc está usando mastertable :?:
Vc está usando paradox :?:
Vc definiu na tables a foreingkey :?:
Um pouco mais de detalhes ajuda :!:
GOSTEI 0
Daniel Martins
29/06/2005
ok
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.
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
Daniel Martins
29/06/2005
Inclusive as Configurações do DataSetprovider...
GOSTEI 0
Jairroberto
29/06/2005
Olá, Daniel!
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:
Um abraço,
Jair
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
Daniel Martins
29/06/2005
Amigo, Compreendi completamente o qvc disse, porem o erro ocorre assim:
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.
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
Jairroberto
29/06/2005
Olá, Daniel!
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
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
Daniel Martins
29/06/2005
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
Luciohc
29/06/2005
Daniel,
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 ...
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
Daniel Martins
29/06/2005
Valeu, tentarei isso e depois digo se resolveu
obrigado pela dica
obrigado pela dica
GOSTEI 0
Daniel Martins
29/06/2005
Saudações!
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....
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
Ivanh
29/06/2005
na propriedade providerflags vc tem que dizer quem é chave primaria:
pfInKey := true
GOSTEI 0
Daniel Martins
29/06/2005
Ja tentei...
GOSTEI 0