Ir para conteúdo

POWERED BY:

Arquivado

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

kduzinh

Erro Pk

Recommended Posts

Boa noite amigos do forum,

 

Tenho uma duvida acredito q seja simples, como tratar erro de primary key usando dbexpress, exemplo em um cadastro de produtos tento inserir uma chave primaria que ja exista, quero que apareça um erro do tipo "Codigo ja registrado".

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer antes de salvar uma validação procurando no BD pelo código, caso encontre mostra a mensagem desejada, pode fazer isto no momento em que o usuário clica em salvar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite amigos do forum,

 

Tenho uma duvida acredito q seja simples, como tratar erro de primary key usando dbexpress, exemplo em um cadastro de produtos tento inserir uma chave primaria que ja exista, quero que apareça um erro do tipo "Codigo ja registrado".

Obrigado.

você usa firebird?

Eu uso uma query minha generica soh pra retornar o valor do generator, se quiser posso postar o codigo aqui,

basicamente tem uma funcao q eu passo o nome do GENERATOR q eu quero...

e ela retorna o codigo do proximo registro q sera inserido e jah incrementa o generator

 

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

LHAlmeida,

 

seria muito interessante e me ajudaria muito, se for possivel colocar o codigo.

Então vamos lá...

 

crie um ClientDataSet chamado genId,

ligue ele a um TDataSetProvider (mude a propriedade allowcommandtext:=true)

crie um TSQLQuery e ligue a sua SQLConnection

volte no seu TDataSetProvider criado duas linhas acima e conecte o seu TSQLQuery a ele.

 

 

 

no evento BeforePost do clientdataset que precisa recuperar o código a ser inserido coloque o seguinte codigo:

(o comando before post passa o objeto TDataset por parametro com o nome de DataSet ou seja, o dataset que chamou o evento, é ele que vamos utilizar)

 

//vamos supor que a sua tabela seja a famosa tabela de clientes rs

//verifica se o estado do dataset é de insert, ou seja, novo registro, você precisa gerar um novo codigo para ele

if(DataSet.State in [dsInsert])then

begin

//usando seu genID

with genId do

begin

Close;

CommandText:='';

//passa a sql pela commandText com o nome do seu generator criado para a tabela q estará em uso, no caso a de CLIENTES define um apelido para o valor retornado "ID", e já incrementa seu generator

CommandText:='select gen_id(GEN_CLIENTES_ID, 1) as ID from rdb$database';

//executa

Open;

//atribui o valor do ID retornado ao campo codigo da sua tabela

DataSet.FieldByName('CODIGO').AsInteger := FieldByName('ID').asinteger;

end;

end;

 

simples assim rs

 

tem outras formas de implementar isso, achei essa a mais facil de explicar aqui, aqui vai o codigo sem comentarios para um melhor entendimento:

CODE

if(DataSet.State in [dsInsert])then

begin

with genId do

begin

Close;

CommandText:='';

CommandText:='select gen_id(GEN_CLIENTES_ID, 1) as ID from rdb$database';

Open;

DataSet.FieldByName('CODIGO').AsInteger := FieldByName('ID').asinteger;

end;

end;

não se esqueça de verificar o generator q esta usando,

 

espero que tenha ajudado

 

abraço

 

Lucas

Compartilhar este post


Link para o post
Compartilhar em outros sites

vlw LHAlmeida, vou dar uma olhada no codigo depois vlw pela ajuda.

que isso amigo, pode contar sempre

 

abraço

 

Lucas

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.