ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Modificar campo via trigger?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17283

MensagemEnviada: Qui Mai 02, 2019 3:28 pm    Assunto: Modificar campo via trigger? Responder com Citação

Como faço para quando modificar qualquer campo da tabela clientes uma trigger muda a flag

Código:
CREATE OR ALTER TRIGGER TRG_ALTFLAG_STAR FOR CLIENTES
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  /* Trigger text */
  if (new.flag_star <> 0) then
  begin
   -- 0 zero muda para enviar 1 ja enviado
   update clientes set flag_star = 0
   where cd_cliente = old.cd_cliente;
  end
end



To usando firebird 2.5
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11244

MensagemEnviada: Qui Mai 02, 2019 6:20 pm    Assunto: Responder com Citação

Boa noite,

Experimente deixar o código da seguinte forma:

Código:
  if (new.flag_star <> 0) then
  begin
   new.flag_star = 0;
  end


Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17283

MensagemEnviada: Sex Mai 03, 2019 9:12 am    Assunto: Responder com Citação

imex escreveu:
Boa noite,

Experimente deixar o código da seguinte forma:

Código:
  if (new.flag_star <> 0) then
  begin
   new.flag_star = 0;
  end


Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos-residencial-casa



Bom dia Imex,

Então eu fiz a alteração ai
Neste caso só altera quando faço update no campo flag_star.
Eu preciso fazer um trriger disparar neste campo mudando para zero quando altero qualquer um dos campos da tabela.
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11244

MensagemEnviada: Sex Mai 03, 2019 10:04 am    Assunto: Responder com Citação

Experimente tirar esse If do código.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17283

MensagemEnviada: Sex Mai 03, 2019 10:54 am    Assunto: Responder com Citação

imex escreveu:
Experimente tirar esse If do código.


Então Imex, funciona sim, mais estou fazendo uma rotina que quando este falg_star estiver 0 eu mando passo por ele monto um arquivo e em seguida preciso mudar este falg_star pra 1 assim garanto que não ira da próxima ver que for rodar a rotina se não tiver uma alteração na tabela cliente.

Parece que assim ele sempre fica com flag_star = 0
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11244

MensagemEnviada: Sex Mai 03, 2019 11:05 am    Assunto: Responder com Citação

Experimente fazer uns testes dessa forma:

Código:
  if (old.flag_star = 1) then
   new.flag_star = 0;


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17283

MensagemEnviada: Sex Mai 03, 2019 11:45 am    Assunto: Responder com Citação

imex escreveu:
Experimente fazer uns testes dessa forma:

Código:
  if (old.flag_star = 1) then
   new.flag_star = 0;


Espero que ajude


Parece que assim funciona, mais me tire outra duvida

Na tabela tenho flag_star varios = null e 2 flag_star = 0

Porque se eu fizer o select assim
Código:
SELECT  * FROM clientes WHERE flag_star <> 1

Mostra apenas os 2 que estão com flag-star = 0?

O modo correto deste select é assim?
Código:
SELECT  * FROM clientes WHERE (flag_star = 0 or flag_star is null)

_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11244

MensagemEnviada: Sex Mai 03, 2019 12:05 pm    Assunto: Responder com Citação

Null não é igual a nada e também não é diferente de nada, por isso é necessário usar o is ou is not para verificar se é nulo ou não.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17283

MensagemEnviada: Sex Mai 03, 2019 1:03 pm    Assunto: Responder com Citação

imex escreveu:
Null não é igual a nada e também não é diferente de nada, por isso é necessário usar o is ou is not para verificar se é nulo ou não.


Entendi. Obrigado pela ajuda.
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17283

MensagemEnviada: Seg Mai 13, 2019 10:10 am    Assunto: Responder com Citação

Bom dia, sobre a trigger tem como adaptar esta trigger
Código:
CREATE OR ALTER TRIGGER TRIG_CLIENTEPRODUTOS FOR CLIENTEPRODUTOS
ACTIVE BEFORE UPDATE OR DELETE POSITION 0
AS
begin
  /* Trigger text */
  if (new.ID_SYNC = '?') then
    new.ID_SYNC = 'N';
  else
    new.ID_SYNC = 'S';

end


com esta
Código:
CREATE OR ALTER TRIGGER TRIG_CLIENTEPRODUTOS_SINC_STAR FOR CLIENTEPRODUTOS
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  if (old.sinc_star = 'N') then
    new.sinc_star = 'S';
end


Todos as duas em uma unica trigger?
E se eu modificar ela de before para after vai funcionar? Ou tenho que mudar a forma?

Obrigado.
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11244

MensagemEnviada: Seg Mai 13, 2019 12:10 pm    Assunto: Responder com Citação

Bom dia,

Acho que você pode juntar os códigos, mas pelo que vi não é possível modificar os valores em caso de Delete, e pra ser sincero não entendi porque modificar se está sendo excluído.
Quanto ao After, para modificar valores deve ser utilizado o Before mesmo. No After as variáveis New são somente leitura.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17283

MensagemEnviada: Seg Mai 13, 2019 12:46 pm    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Acho que você pode juntar os códigos, mas pelo que vi não é possível modificar os valores em caso de Delete, e pra ser sincero não entendi porque modificar se está sendo excluído.
Quanto ao After, para modificar valores deve ser utilizado o Before mesmo. No After as variáveis New são somente leitura.

Espero que ajude


Boa tarde,
Parece que o delete não esta sendo executado nesta trigger,

Se eu deixar no before mesmo como seria este juntar os 2?
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11244

MensagemEnviada: Ter Mai 14, 2019 9:23 am    Assunto: Responder com Citação

Bom dia,

Segue exemplo:

Código:
CREATE OR ALTER TRIGGER TRIG_CLIENTEPRODUTOS FOR CLIENTEPRODUTOS
ACTIVE BEFORE UPDATE POSITION 0
AS
begin

  if (new.ID_SYNC = '?') then
    new.ID_SYNC = 'N';
  else
    new.ID_SYNC = 'S';

  if (old.sinc_star = 'N') then
    new.sinc_star = 'S';

end


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17283

MensagemEnviada: Ter Mai 14, 2019 11:17 am    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Segue exemplo:

Código:
CREATE OR ALTER TRIGGER TRIG_CLIENTEPRODUTOS FOR CLIENTEPRODUTOS
ACTIVE BEFORE UPDATE POSITION 0
AS
begin

  if (new.ID_SYNC = '?') then
    new.ID_SYNC = 'N';
  else
    new.ID_SYNC = 'S';

  if (old.sinc_star = 'N') then
    new.sinc_star = 'S';

end


Espero que ajude
Valeu, muito obrigado.
_________________
Quer uma bateria musical profissional completa em seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.hhopdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB