Pessoal uma força neste trigger ?

Delphi

04/04/2005

Estou usando o trigger abaixo p/ saber se o produto é atualizado
para ou p/ menos, só que tambem quando o preco for igual queria colocar um sinal de = signifacaria que ele não sofre reajuste + quando coloco este if a mais da problema
 if (New.preco_venda = Old.preco_venda) then
     begin
       Update produtos
       Set PrAlterado =´=´ Where Codigo =New.codigo;
     end


Error Message:
----------------------------------------
Too many concurrent executions of the same request
.
Too many concurrent executions of the same request.


CREATE TRIGGER TGPRECO FOR PRODUTOS 
ACTIVE AFTER UPDATE POSITION 0
AS
begin
  if (Old.preco_venda <> New.preco_venda) then
   begin
       if (New.preco_venda > Old.preco_venda) then
         begin
           Update produtos
           Set PrAlterado =´+´ Where Codigo =New.codigo;
        end
       if (New.preco_venda < Old.preco_venda) then
        begin
           Update produtos
           Set PrAlterado =´-´ Where Codigo =New.codigo;
        end
      end
    if (New.preco_venda = Old.preco_venda) then
     begin
       Update produtos
       Set PrAlterado =´=´ Where Codigo =New.codigo;
     end
 end
 ^

COMMIT WORK ^
SET TERM ;^



Essistemas

Essistemas

Curtidas 0

Respostas

Maicongabriel

Maicongabriel

04/04/2005

Estou usando o trigger abaixo p/ saber se o produto é atualizado para ou p/ menos, só que tambem quando o preco for igual queria colocar um sinal de = signifacaria que ele não sofre reajuste + quando coloco este if a mais da problema
 if (New.preco_venda = Old.preco_venda) then
     begin
       Update produtos
       Set PrAlterado =´=´ Where Codigo =New.codigo;
     end
Error Message: ---------------------------------------- Too many concurrent executions of the same request

Me parece que você esta causando um [b:17bec065cd]Loop[/b:17bec065cd] infinito de Updates!
[b:17bec065cd]Veja porque:[/b:17bec065cd] Caso o valor do campo ´preco_venda´ antigo seja igual ao novo valor atribuido ao campo ´preco_venda´, você esta efetuando novamente o comando de Update, para gravar o valor ´=´ no campo ´PrAlterado´ da mesma tabela de produtos!
Ao efetuar este Update novamente, os valores de [b:17bec065cd]Old[/b:17bec065cd] e [b:17bec065cd]New[/b:17bec065cd] são igual, efetuando um novo Update e assim segue ´infinitamente´ até finalizar com:
Too many concurrent executions of the same request
Esta é a minha opinião, posso estar errado, ou não...


GOSTEI 0
POSTAR