[firebase-br] RES: Atualizacao de pdvs

Felix - SOL Informática felix em solsistemas.com
Qua Fev 13 23:03:41 -03 2013


Use uma trigger com before insert / update

Algo do tipo:

SET TERM ^ ;
CREATE TRIGGER xATUALIZACAO FOR CADPRODUTO ACTIVE
BEFORE INSERT OR UPDATE OR DELETE POSITION 25
AS BEGIN 
    IF  (INSERTING) THEN 
	INSERT INTO TABELA(PROCESSAMENTO,CODIGOPRO,PRECO)
VALUES("I",NEW.CODIGOPRO,NEW.PRECO);
    IF  (UPDATING) THEN 
	INSERT INTO TABELA(PROCESSAMENTO,CODIGOPRO,PRECO)
VALUES("A",NEW.CODIGOPRO,NEW.PRECO); 
    IF  (DELETING) THEN
	INSERT INTO TABELA(PROCESSAMENTO,CODIGOPRO,PRECO)
VALUES("E",OLD.CODIGOPRO,0);
END^
SET TERM ; ^

Nesse exemplo o banco vai criar um registro em TABELA sempre que houver uma
mudança em CADPRODUTO; OBSERVE que TODA mudança em CADPRODUTO irá gerar um
registro! Não vai servir se CADPRODUTO for atualizada a quantidade do item
após a venda, por exemplo.

Francisco Felix
www.solsistemas.com

-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Eliseu Schneider
Enviada em: quarta-feira, 13 de fevereiro de 2013 21:41
Para: FireBase
Assunto: [firebase-br] Atualizacao de pdvs

Ola... trabalho com bancos paralelos, tabelas identicas, retaguarda e pdvs. 
Necessito atualizar os pdvs com a tabela produtos sempre que for criado um
registro novo ou alterada alguma informacao no cadastro da retaguarda.
Quando isto acontece, mando o codigo do produto para uma tabela paralela
para posterior atualizacao nos pdvs. Como poderia fazer isto pelo banco...

Seria atraves de update ou insert... se poderem me colocar um exemplo,
agradeco...

Sds,
Eliseu
Modulo Info
Porto Alegre / RS


-----Mensagem Original-----
From: Tecnobyte Informática
Sent: Thursday, October 25, 2012 5:52 PM
To: FireBase
Subject: Re: [firebase-br] RES: Log de transações

Não é o caso. Não existe nenhum campo calculado na tabela onde estou
tentando executar INSERT e UPDATE.

Atenciosamente.

Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br

-----Mensagem Original-----
From: Zottis
Sent: Thursday, October 25, 2012 3:30 PM
To: 'FireBase'
Subject: [firebase-br] RES: Log de transações

Vê se você está tentando gravar em campos calculados


-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Tecnobyte
Informática Enviada em: quinta-feira, 25 de outubro de 2012 17:21
Para: lista em firebase.com.br
Assunto: [firebase-br] Log de transações

Boa tarde

Estou precisando fazer um log de todas as transações executadas no banco de
dados (Firebird 2.5.1). O código abaixo executa normalmente, mas em seguida,
quando vou iniciar uma nova transação, ocorre este erro:

attempted update during read-only transaction At trigger
'TG_TRANSACTION_START' line: 3, col: 3

Tentei usar transação autônoma para gravar o log, mas também não deu certo.

Alguém sabe como resolver este problema?
-- 

CREATE TABLE MON_TRANSACTIONS
(
  ID                     INTEGER,
  MON_TRANSACTION_ID       INTEGER,
  MON_ATTACHMENT_ID         INTEGER,
  MON_STATE                 INTEGER,
  MON_START_TIMESTAMP    TIMESTAMP,
  MON_COMMIT_TIMESTAMP   TIMESTAMP,
  MON_TOP_TRANSACTION       INTEGER,
  MON_OLDEST_TRANSACTION INTEGER,
  MON_OLDEST_ACTIVE         INTEGER,
  MON_ISOLATION_MODE       SMALLINT,
  MON_LOCK_TIMEOUT         SMALLINT,
  MON_READ_ONLY             SMALLINT,
  MON_AUTO_COMMIT           SMALLINT,
  MON_AUTO_UNDO             SMALLINT,
  CONSTRAINT PK_MON_TRANSACTIONS PRIMARY KEY(ID) );

CREATE SEQUENCE SQ_MON_TRANSACTIONS_ID;

SET TERM ^ ;

CREATE OR ALTER TRIGGER TG_TRANSACTION_START ON TRANSACTION START AS BEGIN
  INSERT INTO MON_TRANSACTIONS(
    ID,
    MON_TRANSACTION_ID,
    MON_ATTACHMENT_ID,
    MON_STATE,
    MON_START_TIMESTAMP,
    MON_TOP_TRANSACTION,
    MON_OLDEST_TRANSACTION,
    MON_OLDEST_ACTIVE,
    MON_ISOLATION_MODE,
    MON_LOCK_TIMEOUT,
    MON_READ_ONLY,
    MON_AUTO_COMMIT,
    MON_AUTO_UNDO)
  SELECT
    NEXT VALUE FOR SQ_MON_TRANSACTIONS_ID,
    MON$TRANSACTION_ID,
    MON$ATTACHMENT_ID,
    MON$STATE,
    CURRENT_TIMESTAMP,
    MON$TOP_TRANSACTION,
    MON$OLDEST_TRANSACTION,
    MON$OLDEST_ACTIVE,
    MON$ISOLATION_MODE,
    MON$LOCK_TIMEOUT,
    MON$READ_ONLY,
    MON$AUTO_COMMIT,
    MON$AUTO_UNDO
  FROM MON$TRANSACTIONS
  WHERE MON$TRANSACTION_ID = CURRENT_TRANSACTION; END^

CREATE OR ALTER TRIGGER TG_TRANSACTION_COMMIT ON TRANSACTION COMMIT AS BEGIN
  UPDATE MON_TRANSACTIONS SET
    MON_COMMIT_TIMESTAMP = CURRENT_TIMESTAMP
  WHERE MON_TRANSACTION_ID = CURRENT_TRANSACTION; END^


Atenciosamente.

Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br


______________________________________________
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 


______________________________________________
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