[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