[firebase-br] gen_id retornando valor antigo ao vigente

Gugui suporte em emar.com.br
Sex Out 10 17:49:13 -03 2014


Olá, eu faço um backup e restore todo dia a noite no banco, se tivesse 
corrompido ele normalmente abortaria o restore ou não necessariamente ?

a minha procedure:

SET TERM ^ ;
ALTER PROCEDURE IUD_REQUISICAO (
     IDREQUISICAO integer,
     IDMATERIAL integer,
     IDSTATUS integer,
     IDUSUARIO_SOLICITANTE integer,
     DESCRICAO_MATERIAL varchar(120),
     QTDE DMNMOED1 DEFAULT 0,
     UNIDADE varchar(10),
     PRAZO_REQUISICAO date,
     OBSERVACAO blob sub_type 1,
     IDUP_1 char(1),
     IDUP_2 char(1),
     IDUP_3 char(1),
     IDUP_4 char(1),
     IDUP_5 char(1),
     IDUP_6 char(1),
     IDUP_7 char(1),
     OPC char(1),
     MS char(1),
     SOLICITANTE varchar(20) )
RETURNS (
     V_IDREQUISICAO integer )
AS
BEGIN
   V_IDREQUISICAO = 0;
   IF(OPC = 'D') then
      UPDATE REQUISICAO SET EXCLUIDO = 'T' WHERE IDREQUISICAO = 
:IDREQUISICAO;

   IF(OPC = 'U') then
   begin
     UPDATE REQUISICAO a
     SET
     a.IDMATERIAL = :IDMATERIAL,
     a.IDUSUARIO_SOLICITANTE = :IDUSUARIO_SOLICITANTE,
     a.DH = 'now',
     a.DESCRICAO_MATERIAL = :DESCRICAO_MATERIAL,
     a.QTDE = :QTDE,
     a.UNIDADE = :UNIDADE,
     a.PRAZO_REQUISICAO = :PRAZO_REQUISICAO,
     a.OBSERVACAO = :OBSERVACAO,
     a.IDUP_1 = :IDUP_1,
     a.IDUP_2 = :IDUP_2,
     a.IDUP_3 = :IDUP_3,
     a.IDUP_5 = :IDUP_5,
     a.IDUP_6 = :IDUP_6,
     a.IDUP_7 = :IDUP_7,
     A.SOLICITANTE = :SOLICITANTE,
     A.IDSTATUS = :IDSTATUS,
     a.UPDATED_AT = 'now'
     WHERE
     a.IDREQUISICAO = :IDREQUISICAO;
   end

   IF(OPC = 'I') then
   BEGIN
     INSERT INTO REQUISICAO (IDMATERIAL, IDSTATUS,
     IDUSUARIO_SOLICITANTE, DH, DESCRICAO_MATERIAL, QTDE, UNIDADE, 
PRAZO_REQUISICAO,
     OBSERVACAO, IDUP_1, IDUP_2, IDUP_3, IDUP_5, IDUP_6, IDUP_7, MS, 
SOLICITANTE)
     VALUES (
     :IDMATERIAL,
     :IDSTATUS,
     :IDUSUARIO_SOLICITANTE,
     'NOW',
     :DESCRICAO_MATERIAL,
     :QTDE,
     :UNIDADE,
     :PRAZO_REQUISICAO,
     :OBSERVACAO,
     :IDUP_1,
     :IDUP_2,
     :IDUP_3,
     :IDUP_5,
     :IDUP_6,
     :IDUP_7,
     :MS,
     :SOLICITANTE
     );
     V_IDREQUISICAO = gen_id(REQUISICAO_GEN,0);
   END

   SUSPEND;

END^
SET TERM ; ^

a trigger:

SET TERM ^ ;
ALTER TRIGGER INC_REQUISICAO ACTIVE
BEFORE INSERT POSITION 0
AS
BEGIN
     NEW.IDREQUISICAO = GEN_ID(REQUISICAO_GEN,1);
END^
SET TERM ; ^





On 10-10-2014 17:20, Carlos H. Cantu wrote:
> Ou tem alguma falha de lógica no seu sistema (procedures, etc) que
> você ainda não identificou, ou seu banco pode estar corrompido,
> afinal, generators ficam fora do contexto transacional, portanto,
> nunca repetem o valor (a não ser que vc volte o valor do generator
> manualmente).
>
> Não acredito que o problema esteja relacionado a um usuário
> especificamente, mas talvez possa estar relacionado ao que esse
> usuário específico faz de diferente dos outros.
>
> []s
> Carlos H. Cantu
> www.FireBase.com.br - www.firebirdnews.org
> www.warmboot.com.br - blog.firebase.com.br
>
> G> olá,
> G> tem um erro me deixando sem cabelo
> G> tenho um sistema q faz +- 500 registros/mes (+ de 20 usuarios usam)
> G> e acontece com 1 usuario somente (até agora), de vez em qdo, de ele
> G> fazer um lançamento e
> G> o banco retornar o registro na grid q ele inseriu, certinho, mas com um
> G> id mais antigo (ja usado por outro lançamento) ao q esta em vigor no
> G> sistema !
> G> se ele insere outro registro ele continua na sequencia errada, trazendo
> G> todos os campos q ele digitou certinho na grid sem erro !
> G> se fecha o sistema e abre novamente, todos os lançamentos q ele fez
> G> desaparece e ao fazer um lançamento retorna o id correto !
> G> é como se ele trabalhasse em outro banco de dados mais antigo! e depois
> G> voltasse para o banco em produção !
>
> G> ja troquei a maquina dele,
> G> ja pinguei o dia inteiro a maquina, não perde nada !
> G> não sei mais o q pode ser !
>
> G> vamos à parte técnica:
>
> G> Estação:
> G> Linux CentOS 6.4 -  2.6.32-431.29.2.el6.x86_64
>
> G> Sistema feito em Lazarus 1.2.2 com Zeos 7.1
>
> G> Server:
> G> Linux Debian GNU/Linux 7 (wheezy) 64
> G> firebird2.5-superclassic 2.5.2~svn+54698.d amd64
>
> G> o sistema roda uma StoredProcedure q faz o insert e retorna o
> G> GEN_ID(REQUISICAO_GEN,0) da tabela.
> G> o campo chave primaria da tabela é incrementada atraves de uma trigger
> G> com before insert
> G> NEW.IDREQUISICAO = GEN_ID(REQUISICAO_GEN,1);
>
> G> alguma luz pra descobrir isso ?
> G> grato qq ajuda
>
>
>
>
>
>
>
>
>
> G> ______________________________________________
> G> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> G> Para saber como gerenciar/excluir seu cadastro na lista, use:
> G> http://www.firebase.com.br/fb/artigo.php?id=1107
> G> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> 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
>





Mais detalhes sobre a lista de discussão lista