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

Paulo S X Soares paulosoares.br em gmail.com
Ter Jan 29 11:52:44 -03 2008


Eu não sei a solução, mas tenho uma sugestão. Em vez de trabalhar com cache,
usar status. Ou seja, a cada item inserido, gravar na base mesmo, mas com um
campo Confirmado='N'. Isso tem duas vantagens imediatas:
1) Caso o sistema seja interrompido no meio da inclusão dos itens, ao
acessar o programa os itens inseridos já estarão lá.
2) Ao salvar (confirmar) a nota, basta um update para Confirmado='S'.

*** Tópico repetido, post repetido.


Em 25/01/08, Reijanio Nunes Ribeiro <rnribeiro em gmail.com> escreveu:
>
> 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
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
___________________________________
*** Paulo Sergio Xavier Soares ***
Skype: Allumo, E-mail: paulosoares.br em gmail.com, MSN: paulosxs em yahoo.com.br
Consultor em Informatica
Matematica - UEM

Obs: Se o seu leitor de e-mail não estiver configurado para emitir resposta
automática do recebimento, favor responder essa mensagem para o confirmar.



Mais detalhes sobre a lista de discussão lista