[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