[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