RES: [firebase-br] depurar SQL, tem como ?

Adilson B. Cápua Jr. juniorcapua em yahoo.com.br
Dom Fev 20 00:25:08 -03 2005


Certa vez fiquei uma cara tentando resolver um problema parecido com o seu!
Depois de muito quebrar a piolhenta, descobrir que o erro era de lógica do
meu programa, que adicionava um dado errado e a trigger (corretamente) não
funcionava, pois uma condição imposta não era confirmada!!!

Provavelmente, se no IB-Expert está funcionando, então o problema é mesmo
com a sua aplicação, algum dado errado, sei lá... Olhe com mais calma, faça
diversos testes, inclua registros que satisfaçam (e também não) as condições
para os updates e para os deletes...

[]'s


________________________________
Adilson Bragança Cápua Jr.
Linhares - ES             Brasil

mailto: juniorcapua em yahoo.com.br
        juniorcapua em gmail.com
  
http://www.dellas.rg3.net

"Save a tree. Send an e-mail"

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de auristonlopes
Enviada em: sábado, 19 de fevereiro de 2005 21:56
Para: cflp_suporte em yahoogrupos.com.br; delphi-br em yahoogrupos.com.br;
DTDelphi em yahoogrupos.com.br; lista em firebase.com.br;
DelphiRio_DUGRJ em yahoogrupos.com.br
Assunto: [firebase-br] depurar SQL, tem como ?

dados os codigos abaixo pergunto: 

CREATE TRIGGER MovprodBI FOR Movprod ACTIVE BEFORE INSERT POSITION 0 AS
declare variable ES Varchar(1); declare variable MOVIES Varchar(1); declare
variable CANCELADA Varchar(1); BEGIN 
    Select ES,MOVIES,CANCELADA from MOVPROD where COD_MAT = NEW.COD_MAT INTO
:ES, :MOVIES, :CANCELADA; 
    IF ((CANCELADA = 'N') AND (MOVIES = 'S') AND (ES = 'S')) THEN 
       BEGIN 
          UPDATE ESTOQUE SET ESTOQUE = (ESTOQUE - NEW.SAIDAS) WHERE CODIGO =
NEW.COD_MAT; 
       END 
    ELSE 
       IF ((CANCELADA = 'N') AND (MOVIES = 'S') AND (ES = 'E')) THEN 
          BEGIN 
             UPDATE ESTOQUE SET ESTOQUE = (ESTOQUE + NEW.ENTRADAS) WHERE
CODIGO = NEW.COD_MAT; 
          END
END 

CREATE TRIGGER MovprodBU FOR Movprod ACTIVE BEFORE UPDATE POSITION 0 AS
declare variable ES Varchar(1); declare variable MOVIES Varchar(1); declare
variable CANCELADA Varchar(1); BEGIN 
    Select ES,MOVIES,CANCELADA from MOVPROD where COD_MAT = OLD.COD_MAT INTO
:ES, :MOVIES, :CANCELADA; 
    IF ((CANCELADA = 'N') AND (MOVIES = 'S') AND (ES = 'S')) THEN 
       BEGIN 
          UPDATE ESTOQUE SET ESTOQUE = (ESTOQUE + OLD.SAIDAS) - NEW.SAIDAS
WHERE CODIGO = NEW.COD_MAT; 
       END 
    ELSE 
       IF ((CANCELADA = 'N') AND (MOVIES = 'S') AND (ES = 'E')) THEN 
          BEGIN 
             UPDATE ESTOQUE SET ESTOQUE = (ESTOQUE - OLD.ENTRADAS) +
NEW.ENTRADAS WHERE CODIGO = NEW.COD_MAT; 
          END
END 

CREATE TRIGGER MovprodBD FOR Movprod ACTIVE Before DELETE POSITION 0 AS
declare variable ES Varchar(1); declare variable MOVIES Varchar(1); declare
variable CANCELADA Varchar(1); BEGIN 
    Select ES,MOVIES,CANCELADA from MOVPROD where COD_MAT = OLD.COD_MAT INTO
:ES, :MOVIES, :CANCELADA; 
    IF ((CANCELADA = 'N') AND (MOVIES = 'S') AND (ES = 'S')) THEN 
       BEGIN 
          UPDATE ESTOQUE SET ESTOQUE = ESTOQUE + OLD.SAIDAS WHERE CODIGO =
OLD.COD_MAT; 
       END 
    ELSE 
       IF ((CANCELADA = 'N') AND (MOVIES = 'S') AND (ES = 'E')) THEN 
          BEGIN 
             UPDATE ESTOQUE SET ESTOQUE = ESTOQUE - OLD.ENTRADAS WHERE
CODIGO = OLD.COD_MAT; 
          END
END^
SET TERM ;^ 

por que o evento delete funciona e os outros nao funciona, se alguem puder
me ajudar, me socorra. 
fiz um teste com o ibexpert e os eventos funcionaram, so nao funciona na
minha aplicacao, sera que tem uma maneira de depurar estes codigos, para que
eu veja se ele realmente estao sendo chamados pelo BD ??? 
sds
auriston 







Mais detalhes sobre a lista de discussão lista