[firebase-br] MEIO OFF: erro ao inserir registros(violação de chave primária)

Reijanio Nunes Ribeiro rnribeiro em gmail.com
Sex Jan 25 10:22:11 -03 2008


bom dia a todos estou com um pequeno problema em um projeto meu onde tenho
um form de entrda de produtos
e estou trabalhando com dataset temporário: pra inserir no datasetr
tempo´rario ta tudo normal
agora o problema vem ao finalizar a nota ao salvar e enviar os registros do
dataset temporário para a tabela no Bd se inserir so um item funciona blz
aogar se inserir mais de um item ao danou-se da violação de chave primária
estou ficando maluco de tanto tentar alternativas e não da certo poderiam me
ajudar pois ao tirar o achave primaria funciona mais duplica os códigos  que
deveriam ser auto numerados, parece que a trigger não dispara a auto
numeração bom antes de tudo lembro aos amigos que o campo código esta setado
como required=false atualmente mais ja tentei da um select max no on new
record do clientadaset e é sempre a mesma coisa se inserir só um item
funciona blz mais mais de um da o erro , segue o codigo pra copiar a tabela
e a trigger e o generator e :

procedure que faz o envio dos registro da tabela
temporária(clientdataset)pra definitiva

procedure T_NFentrada.copiaregistro
begin
d_nfentradalocal.Edit; //dataset temporário
d_nfentradalocal.Last;
d_nfentradalocal.First;
    while not d_nfentradalocal.Eof do begin
dmdados.D_NFentrada.Open;
dmdados.D_NFentrada.Active = True;
dmdados.D_NFentrada.Insert;

dmdados.D_NFentradaNUMNOTA.value :=  d_nfentradalocalNUMNOTA.value;
dmdados.D_NFentradaCODPROD.value :=  d_nfentradalocalCODPROD.value;
dmdados.D_NFentradaQTDE.value :=  d_nfentradalocalQTDE.value;
dmdados.D_NFentradaVLRUNITARIO.value :=  d_nfentradalocalVLRUNITARIO.value;
dmdados.D_NFentradaVLRTOTAL.value :=  d_nfentradalocalVLRTOTAL.value;
dmdados.D_NFentradaIPI.value :=  d_nfentradalocalIPI.value;
dmdados.D_NFentradaVLRIPI.value :=  d_nfentradalocalVLRIPI.value;
dmdados.D_NFentrada.Post ;
d_nfentradalocal.Next;
end;
    d_nfentradalocal.EmptyDataset;
    dmdados.D_NFentrada.ApplyUpdates(0);
    dmdados.D_NFentrada.Close;
---------------------------------------------------------------------
codigo pra gerar auto numeração no firebird

create generator gen_d_nfentrada_id;

set term ^;

create trigger d_nf_entrada_bi for d_nfentrada
active before insert position 0
as
    begin
    if (new.codigo is null) then
    new.codigo = gen_id(gen_d_nfentrada_id,1);
end^
set term;^

podem me ajudar não sei mais o que fazer



Mais detalhes sobre a lista de discussão lista