GARANTIR DESCONTO

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


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

Lenasi

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:

 
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

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar