Fórum Mensagem de Erro : ´Key Violation´ #373818
19/08/2009
0
Caros Amigos.
Estou com um probleminha que estou quebrando a cabeça...
Tenho um Form padrão, e dele vários cadastros... até ai blz!!!
Mas ao testar a inclusão, o primeiro dá certo, ao tentar incluir outro registro, ao gravar da a mensagem de KEY VIOLATION...
Andei refazendo algumas tabelas e até mesmo desabilitando algumas funções que verificam se o campo está vazio, outra que pinto o campo em foco, etc...
Bem, o cadastro de usuário, mais complexo, foi resolvido (não me pergunta como.. rsrsrs), achando que o outro cadastro por ser herdado do mesmo FORM, fosse dá certo, infelizmente continua..
Só que este cadastro é mais simples ainda do que o de usuários, apenas um campo...
Será a forma de criação do banco, os PK, FK...
Segue scripts completo da tabela criada a qual continua dando erro.:
Muito obrigado.
Lenasi
RAD 2007
FIREBIRD 2.1
Estou com um probleminha que estou quebrando a cabeça...
Tenho um Form padrão, e dele vários cadastros... até ai blz!!!
Mas ao testar a inclusão, o primeiro dá certo, ao tentar incluir outro registro, ao gravar da a mensagem de KEY VIOLATION...
Andei refazendo algumas tabelas e até mesmo desabilitando algumas funções que verificam se o campo está vazio, outra que pinto o campo em foco, etc...
Bem, o cadastro de usuário, mais complexo, foi resolvido (não me pergunta como.. rsrsrs), achando que o outro cadastro por ser herdado do mesmo FORM, fosse dá certo, infelizmente continua..
Só que este cadastro é mais simples ainda do que o de usuários, apenas um campo...
Será a forma de criação do banco, os PK, FK...
Segue scripts completo da tabela criada a qual continua dando erro.:
CREATE GENERATOR GEN_PNEU_FABRICANTE_ID; CREATE TABLE PNEU_FABRICANTE ( PNFB_ID INTEGER NOT NULL, PNFB_DESCRICAO DM_TEXTPM NOT NULL /* DM_TEXTPM = VARCHAR(15) */ ); ALTER TABLE PNEU_FABRICANTE ADD CONSTRAINT PK_PNEU_FABRICANTE PRIMARY KEY (PNFB_ID); CREATE OR ALTER TRIGGER PNEU_FABRICANTE_BI FOR PNEU_FABRICANTE ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF (NEW.PNFB_ID IS NULL) THEN NEW.PNFB_ID = GEN_ID(GEN_PNEU_FABRICANTE_ID,1); END
Muito obrigado.
Lenasi
RAD 2007
FIREBIRD 2.1
Lenasi
Curtir tópico
+ 0
Responder
Posts
19/08/2009
Daniel Martins
Olá Amigo.
a Mensagem Key violation ocorre quando existe 2 chaves primarias iguais.
por exemplo, Quando você adiciona o primeiro registro o campo PNFB_ID recebe 1, no segundo registro o campo PNFB_ID também está recebendo 1 ou um valor semelhante ao registro anterior.
Isso pode ser resolvido assim:
caso esteja usando um ClientDataSet, no evento AfterPost, coloque o coódigo adaptado as suas necessidades:
Você também pode Alterar para ´False´ a propriedade Required do campo PNFB_ID no clientDataSet.
isso faz com que ao savar, as mudanças são aplicadas diretamente ao banco de dados, e logo após atualizamos a cache com informações novas.
espere ter ajudado ..\/ ^.^
a Mensagem Key violation ocorre quando existe 2 chaves primarias iguais.
por exemplo, Quando você adiciona o primeiro registro o campo PNFB_ID recebe 1, no segundo registro o campo PNFB_ID também está recebendo 1 ou um valor semelhante ao registro anterior.
Isso pode ser resolvido assim:
caso esteja usando um ClientDataSet, no evento AfterPost, coloque o coódigo adaptado as suas necessidades:
clientdataset1.applyUpdates(0); clientdataset1.refresh; ou clientdataset1.close; clientdataset1.open;
Você também pode Alterar para ´False´ a propriedade Required do campo PNFB_ID no clientDataSet.
isso faz com que ao savar, as mudanças são aplicadas diretamente ao banco de dados, e logo após atualizamos a cache com informações novas.
espere ter ajudado ..\/ ^.^
Responder
Gostei + 0
19/08/2009
Lenasi
[quote:f0725e5817=´DAniel S Martins´]Olá Amigo.
caso esteja usando um ClientDataSet, no evento AfterPost, coloque o coódigo adaptado as suas necessidades:
[/quote:f0725e5817]
Está dentro da Unit o comando...digo fora do AfterPost, no procedure Gravar
Já estava como FALSE....
Amigo. obrigado.
Deu certo.
Mas porque num Cadastro de usuário utilizando o mesmo FORMPADRÂO, não estava dando erro?
caso esteja usando um ClientDataSet, no evento AfterPost, coloque o coódigo adaptado as suas necessidades:
[/quote:f0725e5817]
Está dentro da Unit o comando...digo fora do AfterPost, no procedure Gravar
Você também pode Alterar para ´False´ a propriedade Required do campo PNFB_ID no clientDataSet.
espere ter ajudado ..\/ ^.^
Já estava como FALSE....
Amigo. obrigado.
Deu certo.
Mas porque num Cadastro de usuário utilizando o mesmo FORMPADRÂO, não estava dando erro?
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)