Fórum Interceptar e desviar um evento #223668
31/03/2004
0
Eu tenho a seguinte duvida: é possivel interceptar um evento e desviar para um procedimento feito por mim? Deixa eu explicar melhor, por ex.: o evento BeforeInsert de uma query ou table qulaquer, quando dou um insert na tabela, antes de executar a ação é chamado o evento BeforeInsert, certo? O que eu quero é que esse evento seja interceptado e que seja executado um procedimento personalizado, tipo ´InsertPersonalizado´. Será que é possivel?
Agradeço antecipadamente.
Flaviosan
Curtir tópico
+ 0Posts
31/03/2004
Flaviosan
Gostei + 0
31/03/2004
Marco Salles
É Chamado Se Voce Tiver Definido... Não é Necessário :!:
Mas Alguns Eventos Ocorrem Antes... Quando Damos Um Comando De Inserção Geralmente a Ordem Dos Eventos é:
1)BeforeScroll;
2)OnDataChange
3)AfterScroll
4)BeforeInsert etc...
Voce Pode Incerptar o Evento BeforeScroll Utilizando O Evento OndataChange
Exemplo:
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); begin if DataSource1.State in [dsinsert] then InsertPersonalizado; end;
Agora o Outro Ponto De Sua Dúvida e Desconectar Temporariamente Um Evento...Isto Geralmente é Usado Para Evitar Recursões Infinitas, Ou Evitar Problemas De Efeitos Colaterais...Num Sei Se Aplica No Seu Caso...
Para Desconectar o Evento OnBeforeInsert: Table1.BeforeInsert:=Nil; Para Reconectar: Table1.BeforeInsert:=Table1BeforeInsert;
P:S Para Compilar, o Evento BeforeInsert Tem Que Estar Definido...
Gostei + 0
01/04/2004
Flaviosan
Me responda uma coisa, na primeira parte da sua resposta,
voce quis dizer que antes de um insert ser executado ele passa por todos esses eventos? Se eu realizar alguma operação no evento AfterScroll ele sera executato antes da inserção?
Mais uma coisa, no evento BeforeInsert se eu usar um comando Exit para sair do procedimento ele não realizara o insert?
Agradeço muito se puder me ajudar.
Gostei + 0
01/04/2004
Paullus
Se você usar o comando exit ele simplesmente vai sair do procedimento que está sendo executado passando em seguida para o próximo (o Insert), ou seja, ele deixa de executar o restante do corpo do seu procedimento e em seguida executa a inserção.
Se você quiser parar o procedimento tente dar um Cancel (apesar de eu não ter certeza se vai funcionar).
:wink:
Gostei + 0
01/04/2004
Marco Salles
Sim...Desde Que Voce Programe Algo Nestes Eventos
Sim...Mas Voce Deve Tomar O Cuidado Porque Este Evento é Dispardo Em Várias Situações e Não Na Situação Particular Em Que Um Registro
Esta Sendo Inserido No Banco..Por Exemplo Qundo Voce Dá Um Comando Table1.Next, Este Evento Também é Disparado...
Mais uma coisa, no evento BeforeInsert se eu usar um comando Exit para sair do procedimento ele não realizara o insert?
Esta O Paullus Respondeu:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)