Interceptar e desviar um evento

Delphi

31/03/2004

Olá Pessoal.
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

Flaviosan

Curtidas 0

Respostas

Flaviosan

Flaviosan

31/03/2004

Será que alguem sabe?


GOSTEI 0
Marco Salles

Marco Salles

31/03/2004

quando dou um insert na tabela, antes de executar a ação é chamado o evento BeforeInsert, certo?

É 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
Flaviosan

Flaviosan

31/03/2004

Marco Salles, obrigado pela sua atenção.
Me responda uma coisa, na primeira parte da sua resposta,
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

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
Paullus

Paullus

31/03/2004

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.


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
Marco Salles

Marco Salles

31/03/2004

voce quis dizer que antes de um insert ser executado ele passa por todos esses eventos?

Sim...Desde Que Voce Programe Algo Nestes Eventos

Se eu realizar alguma operação no evento AfterScroll ele sera executato antes da inserção?

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:
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).



GOSTEI 0
POSTAR