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]

Responder a