Então, tenta passar o gfix, verifique se os dados incluindo o charset são os mesmos e se na sua aplicação, vc chama com o charset correto do banco. Não sei o pq, mas o firebird 2.1 está dando estes problemas, inclusive usando trigger, pode ser algum problema da versão, nao tenho certeza do que estou falando, seria interessante procurar o fórum do firebase.com.br para ver sobre isso.
Obrigado, Fabiano Em 24 de maio de 2010 15:41, Iran Lima <i...@sgisolution.com.br> escreveu: > 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] > > > > ------------------------------------ > > -- > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> > > > > [As partes desta mensagem que não continham texto foram removidas]