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 

Incrementar e Decrementar um Trigger sem Generator=Resolvid

 
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: 17618

MensagemEnviada: Ter Dez 05, 2006 10:52 pm    Assunto: Incrementar e Decrementar um Trigger sem Generator=Resolvid Responder com Citação

Pessoal estou querendo fazer uma trigger pegar o ultimo valor de um autoincremento e gerar um novo apartir dai;

Fiz esta trigger sem usar o generator

Código:
CREATE TRIGGER CORRENTE_BI0 FOR CORRENTE
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.sequencia2 is null) then
new.sequencia2 = (select coalesce(max(sequencia2),0)+1 from CORRENTE);
end
No IBExpert

Mais esta gerando um erro de script
Citação:
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Subselect illegal in this context.

Alguem pode me informar como fazer corretamente essa trigger

Lembrando uso Firebird 2.0


Editado pela última vez por adriano_servitec em Qua Dez 06, 2006 4:24 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gustavocco
Administrador
Administrador


Registrado: Sexta-Feira, 6 de Fevereiro de 2004
Mensagens: 4253
Localização: Chapecó - SC

MensagemEnviada: Qua Dez 06, 2006 10:11 am    Assunto: Responder com Citação

Olá, estou com o FB 1.5 aqui, mas deve ser a mesma coisa.


Código:

CREATE TRIGGER CORRENTE_BI0 FOR CORRENTE
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.sequencia2 is null) then
select coalesce(max(sequencia2),0)+1 from CORRENTE into new.sequencia2;
end



Flw.
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: 17618

MensagemEnviada: Qua Dez 06, 2006 10:22 am    Assunto: Responder com Citação

gustavocco escreveu:
Olá, estou com o FB 1.5 aqui, mas deve ser a mesma coisa.


Código:

CREATE TRIGGER CORRENTE_BI0 FOR CORRENTE
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.sequencia2 is null) then
select coalesce(max(sequencia2),0)+1 from CORRENTE into new.sequencia2;
end


Flw.


Ai guri, quem conheçe de trigger conheçe...era isso mesmo Gustavo, tava invertendo tudo ... hehehehe

Perfeito ficou o codigo agora amigo
Obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gustavocco
Administrador
Administrador


Registrado: Sexta-Feira, 6 de Fevereiro de 2004
Mensagens: 4253
Localização: Chapecó - SC

MensagemEnviada: Qua Dez 06, 2006 10:24 am    Assunto: Responder com Citação

hehehe.. faltava pouco... passou raspando Laughing hehehe...

abraço Adriano.

Flw ai.
_________________
Top System - www.topsystem.com.br
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: 17618

MensagemEnviada: Qua Dez 06, 2006 2:58 pm    Assunto: Responder com Citação

Agora estou com problemas para fazer um After Delete

Código:
ALTER TRIGGER CORRENTE_AD0
ACTIVE AFTER DELETE POSITION 0
AS
begin
  /* Trigger text */
 UPDATE CORRENTE SET SEQUENCIA2 = SEQUENCIA2 - 1
 WHERE SEQUENCIA2 > OLD.SEQUENCIA2;

end


Ou seja quero que faça um update nesta sequencia na hora em que eu deletar algo

se tenho a sequencia
1
2
3
4

e deletar a sequencia 3
em vez de ficar assim
1
2
4
ficar assim
1
2
3
ou seja a sequencia 4 fica sendo a tres
masi se eu uso essa trriger desta forma acima se eu deleat a sequencia 3 fica assim meu banco
1
2
ou seja
a sequencia 4 tambem esta deletando.


O que eu quero mesmo eh na hora de deletar alguma sequencia a trigger fazer um update corrigindo as sequencias e colocando elas novamente na ordem.

Grato a ajuda de todos
Adriano
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: 17618

MensagemEnviada: Qua Dez 06, 2006 4:20 pm    Assunto: Responder com Citação

Descobri como fazer para organizar a sequencia pelo trigger, basta criar um indice no campo no caso aqui sequencia2 que funciona perfeitamente. Eh logico usando os codigos acima postados. Very Happy

Tanto no before insert como no after delete

Bom tai agora foi resolvido.

Se um dia alguem precisar de um trriger com autoincremento sem generators e com os codigos organizados esses codigos acima fazem o que exatamente isso.

Abraços a todos
Adriano


Editado pela última vez por adriano_servitec em Qua Dez 06, 2006 5:23 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
delphagundes
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 10 de Novembro de 2006
Mensagens: 161

MensagemEnviada: Qua Dez 06, 2006 5:10 pm    Assunto: Responder com Citação

Bendito seja quem inventou o HELP e o GOOGLE!

hehehe...

Abraços!
_________________
"Somos jovens e espertos!"
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