Opa foi mau ai.....
Seguinte... ta corrompendo apenas a tabela de movimentação do produto, nela tem as triggers que alteram o estoque, e ela é povoada com SP que pegam o pedido passado por parâmetro, e lança o movimento de estoque, é simples, já tenhu outros bancos q funcionam assim e não da problema, só que neste após ums 50 registros na tabela de movimento ela corrompe. Quando corrompe so da pra recuperar com gbak se eu excluir a tabela. De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em nome de Roni Rodrigo Enviada em: sábado, 22 de maio de 2010 19:20 Para: delphi-br@yahoogrupos.com.br Assunto: Re: [delphi-br] Firebird Corrompendo apos criar SP e Tiggers mas tem q ter tempo pra ler td isso né?? pq vc nao manda soh a procedure ou trigger q ta dando problema... e explica direito esse negócio de corrompendo.. corromprendo como? o problema é com a integridade dos dados ou com a estrutura da tabela?? o/ Em 22/05/2010 10:56, Iran Lima escreveu: > Olá Pessoal, > > Estou com um problema aqui que começou após criar umas Procedures e > Triggers > para controle de Estoque. > > Criei uma tabela de movimentação de produtos e nela as triggers de > atualização de estoque na tabela do produto. > > Para gravar a movimentação do produto uso uma SP que passado um pedido > como > parâmetro lança todos os itens do mesmo na tabela de movimentação > > Funcionou tudo certo como eu desejava porem a tabela de movimentação do > produto começou a corromper. > > Se alguém poder me ajudar serei muito grato. > > /*************************************************************************** > ***/ > > /**** Stored Procedures > ****/ > > /*************************************************************************** > ***/ > > CREATE PROCEDURE SP_EXTB_COMPRA ( > > NR_DOC VARCHAR(10), > > COD_FORN VARCHAR(5)) > > AS > > BEGIN > > EXIT; > > END^ > > CREATE PROCEDURE SP_EXTB_LOTE ( > > COD_EMP INTEGER, > > COD_LOTE VARCHAR(6)) > > AS > > BEGIN > > EXIT; > > END^ > > CREATE PROCEDURE SP_EXTB_VENDA ( > > COD_EMP INTEGER, > > COD_PED INTEGER) > > AS > > BEGIN > > EXIT; > > END^ > > CREATE PROCEDURE SP_MOVB_COMPRA ( > > NR_DOC VARCHAR(10), > > COD_FORN VARCHAR(5)) > > AS > > BEGIN > > EXIT; > > END^ > > CREATE PROCEDURE SP_MOVB_LOTE ( > > COD_EMP INTEGER, > > COD_LOTE VARCHAR(6)) > > AS > > BEGIN > > EXIT; > > END^ > > CREATE PROCEDURE SP_MOVB_VENDA ( > > COD_EMP INTEGER, > > COD_PED INTEGER) > > AS > > BEGIN > > EXIT; > > END^ > > SET TERM ; ^ > > /*************************************************************************** > ***/ > > /**** Tables > ****/ > > /*************************************************************************** > ***/ > > CREATE TABLE MOV_B ( > > COD_MPROD INTEGER NOT NULL, > > COD_PROD VARCHAR(5) NOT NULL, > > TELA CHAR(1) NOT NULL, > > DATA_MOVI TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, > > QTD_MOV NUMERIC(12,3) DEFAULT 0 NOT NULL, > > COD_EMP INTEGER NOT NULL, > > COD_PED INTEGER, > > COD_FORN VARCHAR(5), > > NR_DOC VARCHAR(10), > > NR_PRO VARCHAR(6), > > COD_DEV VARCHAR(5), > > TIPO_SAI CHAR(1), > > COD_LOTE VARCHAR(6) > > ); > > /*************************************************************************** > ***/ > > /**** Triggers for tables > ****/ > > /*************************************************************************** > ***/ > > /* Trigger: TG_ADD_ESTOQUE */ > > CREATE TRIGGER TG_ADD_ESTOQUE FOR MOV_B > > ACTIVE BEFORE INSERT POSITION 0 > > AS > > declare variable VQTDE NUMERIC(12,3); > > begin > > /* Adiciona Movimento ao estoque */ > > IF(NEW.TIPO_SAI = 'S') THEN > > VQTDE = -NEW.QTD_MOV; > > ELSE IF(NEW.TIPO_SAI = 'E') THEN > > VQTDE = +NEW.QTD_MOV; > > IF ((NEW.TIPO_SAI = 'S') OR (NEW.TIPO_SAI = 'E')) THEN > > UPDATE EST_PROD SET > > QTD_ATU_B = QTD_ATU_B + :VQTDE > > WHERE COD_PROD = NEW.COD_PROD; > > end > > ^ > > /* Trigger: TG_REM_ESTOQUE */ > > CREATE TRIGGER TG_REM_ESTOQUE FOR MOV_B > > ACTIVE AFTER DELETE POSITION 0 > > AS > > declare variable VQTDE NUMERIC(12,3); > > begin > > /* Adiciona Movimento ao estoque */ > > IF(OLD.TIPO_SAI = 'S') THEN > > VQTDE = +OLD.QTD_MOV; > > ELSE IF(OLD.TIPO_SAI = 'E') THEN > > VQTDE = -OLD.QTD_MOV; > > IF ((OLD.TIPO_SAI = 'S') OR (OLD.TIPO_SAI = 'E')) THEN > > UPDATE EST_PROD SET > > QTD_ATU_B = QTD_ATU_B + :VQTDE > > WHERE COD_PROD = OLD.COD_PROD; > > end > > ^ > > SET TERM ; ^ > > /*************************************************************************** > ***/ > > /**** Stored Procedures > ****/ > > /*************************************************************************** > ***/ > > SET TERM ^ ; > > ALTER PROCEDURE SP_EXTB_COMPRA ( > > NR_DOC VARCHAR(10), > > COD_FORN VARCHAR(5)) > > AS > > BEGIN > > /* Deleta Movimento de Venda */ > > DELETE FROM MOV_B > > WHERE NR_DOC = :NR_DOC AND COD_FORN = :COD_FORN AND TELA = 'C'; > > END > > ^ > > ALTER PROCEDURE SP_EXTB_LOTE ( > > COD_EMP INTEGER, > > COD_LOTE VARCHAR(6)) > > AS > > BEGIN > > /* Deleta Movimento de Lote */ > > DELETE FROM MOV_B > > WHERE COD_EMP = :COD_EMP AND COD_LOTE = :COD_LOTE AND TELA = 'L'; > > END > > ^ > > ALTER PROCEDURE SP_EXTB_VENDA ( > > COD_EMP INTEGER, > > COD_PED INTEGER) > > AS > > BEGIN > > /* Deleta Movimento de Venda */ > > DELETE FROM MOV_B > > WHERE COD_EMP = :COD_EMP AND COD_PED = :COD_PED AND TELA = 'V'; > > END > > ^ > > ALTER PROCEDURE SP_MOVB_COMPRA ( > > NR_DOC VARCHAR(10), > > COD_FORN VARCHAR(5)) > > AS > > BEGIN > > /* Deleta Movimento de Venda */ > > DELETE FROM MOV_B > > WHERE NR_DOC = :NR_DOC AND COD_FORN = :COD_FORN AND TELA = 'C'; > > /* Inclui Movimento de Venda */ > > INSERT INTO MOV_B > > (COD_MPROD, COD_PROD, TELA, DATA_MOVI, QTD_MOV, COD_EMP, NR_DOC, COD_FORN, > TIPO_SAI) > > SELECT GEN_ID (GEN_MOV_B, 1), ITN.COD_PROD, 'C', CURRENT_TIMESTAMP, > ITN.QTD_02, CAB.COD_EMP, ITN.NR_DOC, ITN.COD_FORN, IIF(CFO.TIPO_E_S = '1', > 'E', iif(CFO.TIPO_E_S = '2', 'S', 'N')) > > FROM ENT_ITN ITN > > LEFT OUTER JOIN ENT_CAB CAB ON (CAB.NR_DOC = ITN.NR_DOC AND > CAB.COD_FORN = ITN.COD_FORN) > > LEFT OUTER JOIN CFOP CFO ON (CFO.CFOP = CAB.CFOP) > > WHERE ITN.NR_DOC = :NR_DOC AND ITN.COD_FORN = :COD_FORN; > > END > > ^ > > ALTER PROCEDURE SP_MOVB_LOTE ( > > COD_EMP INTEGER, > > COD_LOTE VARCHAR(6)) > > AS > > BEGIN > > /* Deleta Movimento de Lote */ > > DELETE FROM MOV_B > > WHERE COD_EMP = :COD_EMP AND COD_LOTE = :COD_LOTE AND TELA = 'L'; > > /* Inclui Movimento de Lote */ > > INSERT INTO MOV_B > > (COD_MPROD, COD_PROD, TELA, DATA_MOVI, QTD_MOV, COD_EMP, COD_LOTE, > TIPO_SAI) > > SELECT GEN_ID (GEN_MOV_B, 1), ITN.COD_PROD, 'L', CURRENT_TIMESTAMP, > ITN.QTD, > ITN.COD_EMP, ITN.COD_LOTE, CAB.TIPO > > FROM LOTE_ITN ITN > > LEFT OUTER JOIN LOTE_CAB CAB ON (CAB.COD_EMP = ITN.COD_EMP AND > CAB.COD_LOTE = ITN.COD_LOTE) > > WHERE ITN.COD_EMP = :COD_EMP AND ITN.COD_LOTE = :COD_LOTE; > > END > > ^ > > ALTER PROCEDURE SP_MOVB_VENDA ( > > COD_EMP INTEGER, > > COD_PED INTEGER) > > AS > > BEGIN > > /* Deleta Movimento de Venda */ > > DELETE FROM MOV_B > > WHERE COD_EMP = :COD_EMP AND COD_PED = :COD_PED AND TELA = 'V'; > > /* Inclui Movimento de Venda */ > > INSERT INTO MOV_B > > (COD_MPROD, COD_PROD, TELA, DATA_MOVI, QTD_MOV, COD_EMP, COD_PED, > TIPO_SAI) > > SELECT GEN_ID (GEN_MOV_B, 1), ITN.COD_PROD, 'V', CURRENT_TIMESTAMP, > ITN.QTD_01, ITN.COD_EMP, ITN.COD_PED, IIF(CFO.TIPO_E_S = '1', 'E', > iif(CFO.TIPO_E_S = '2', 'S', 'N')) > > FROM SAI_ITN ITN > > LEFT OUTER JOIN SAI_CAB CAB ON (CAB.COD_EMP = ITN.COD_EMP AND > CAB.COD_PED = ITN.COD_PED) > > LEFT OUTER JOIN CFOP CFO ON (CFO.CFOP = CAB.CFOP) > > WHERE ITN.COD_EMP = :COD_EMP AND ITN.COD_PED = :COD_PED; > > END > > ^ > > SET TERM ; ^ [As partes desta mensagem que não continham texto foram removidas]