Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alam Devis Cavalcante

Erro de Violação de Chave Primária

Recommended Posts

Alguém pode me informar como faço para corrigir o erro de KEY VIOLATION.

Entro no sistema vou no formulario de cadastro e começo a inserir registros finalizo a inserção salvo na tabela tudo tranquilo e saio do sistema. Quando entro novamente no sistema e tento inserir novamente registros ele aparece a mensagem acima.

Só consigo inserir novamente se eu deletar os registros da tabela no meu banco de dados.

Já usei refresh para atualizar ao sair e ao entrar no sistema e nada.

Também usei o applyUpdates e nada.

Alguém tem alguma solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra coisa, qual o código que está sendo usado? Verificou se não está tentando gravar algo com o mesmo código da chave primária já gravado?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Estou usando o código abaixo e os componentes ClientDataSet.


Só ocorre o erro ''KEY VIOLATION'' quando eu saio do sistema e logo novamente para inserir dados na tabela.


Estou usando o Delphi 2010 Banco IBExpress Firebird

TabSheet1.TabVisible:= true;

TabSheet2.TabVisible:= false;

TabSheet3.TabVisible:= false;

DM_Dados.ClientDataSetMesa.Open;

Dm_Dados.ClientDataSetMesa.Insert;

DM_Dados.ClientDataSetAuxCodMesa.Open;

DM_Dados.ClientDataSetAuxCodPedido.Open;

DM_Dados.ClientDataSetAuxCodMesa.Last;

DM_Dados.ClientDataSetAuxCodPedido.Last;

codautmesa:= DM_Dados.ClientDataSetAuxCodMesaCOD_MESA.Value + 1;

codautped:= DM_Dados.ClientDataSetAuxCodPedidoNUM_PEDIDO.Value + 1;

Dm_Dados.ClientDataSetMesaCOD_MESA.Value:= codautmesa;

DM_Dados.ClientDataSetMesaNUM_PEDIDO.Value:= codautped;

DM_Dados.ClientDataSetAuxCodMesa.Close;

DM_Dados.ClientDataSetAuxCodPedido.Close;

DM_Dados.ClientDataSetMesaDATA_MESA.Value:= date;

DM_Dados.ClientDataSetMesaHORA_MESA.Value:= time;

DM_Dados.ClientDataSetMesaNUM_MESA.Value:= 100;

DM_Dados.ClientDataSetMesaSTATUS_MESA.Value:= 'INICIADA';

DM_Dados.ClientDataSetMesaTIPO_MESA.Value:= 'Balcão';

DBEditStatusMesa.Color:= clLime;

DM_Dados.ClientDataSetMesa.Post;

DM_Dados.ClientDataSetPedido.Open;

Dm_Dados.ClientDataSetPedido.Insert;

DM_dados.ClientDataSetAuxCodItem.Open;

DM_dados.ClientDataSetAuxCodItem.Last;

codautitem:= DM_Dados.ClientDataSetAuxCodItemCOD_ITEM.Value + 1;

DM_Dados.ClientDataSetPedidoCOD_ITEM.Value:= codautitem;

DM_dados.ClientDataSetAuxCodItem.Close;

DM_Dados.ClientDataSetPedidoNUM_ITEM.Value:= 1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você já debugou seu código pra ver se os valores que está enviando para a chave primária da tabela não estão sendo valores já gravados? Porque este trecho que copiei abaixo não irá te garantir que está pegando no próximo código que gerar o último código gerado, se era essa a intenção por trás disto, salvo que esteja usando um order by na sua query de seleção pela chave correta. O ideal seria no momento da gravação você pegar o max(campo) e acrescentar +1, talvez seja aqui o seu problema....

 

 

DM_Dados.ClientDataSetAuxCodMesa.Last;
DM_Dados.ClientDataSetAuxCodPedido.Last;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.