Fórum Tem como passar parametro para uma Trigger? Como? #299793

18/10/2005

0

olá pessoal

utilizo D7 e FB 1.5
tenho uma tela de reservas de horarios para manutenção de veiculos.
a agenda é por profissional/mecanico.
então a atendente seleciona o mecanico e é aberta a agenda.. só que existem varios micros fazendo isso.
tenho uma trigger de banco para a tabela de Agenda para o After Insert, Update e Delete e na minha aplicação tenho o MDOEvents (que tem as mesmas funcionalidades do IBEvents, IBXEventAlerter, etc..). que captura os eventos de banco.

a trigger é a seguinte
CREATE TRIGGER TRG_AGENDA FOR AGENDA 
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0 
AS 
BEGIN 
  POST_EVENT ´ATUALIZA´; 
END


na tela de Agenda tenho a TblAgenda que contém um filtro para exibir somente os registros do Profissional selecionado e da Data selecionada.
nesta tela no MDOEvents no evento OnEventAlert tenho o codigo:

procedure TForm1.MDOEvents1EventAlert(Sender: TObject; EventName: String;
  EventCount: Integer; var CancelAlerts: Boolean);
begin
  if EventName = ´ATUALIZA´ then
    TblAgenda.Refresh;
end;


só que o problema é q todos os pontos que tiverem com a agenda aberta serão atualizados.

o que preciso é só atualizar as agendas no evento que forem do Profissional/Data selecionados, ou seja, teria q passar um parametro pra trigger com o Profissional e Data e então seria algo assim:
  if(EventName = ´ATUALIZA´)and
    (CdProfissional = CdP)and
    (DtAgenda = Data) then
    MDOTable1.Refresh;


como ñ conheço muito dessa questão de Triggers e SP gostaria de uma ajuda. Como passo parametros e leio em triggers?

obrigado
Diogo


Diogoalles

Diogoalles

Responder

Posts

18/10/2005

Diogoalles

olá pessoal

ainda não consegui, já estou a dois dias nisso

agradeço se alguem puder ajudar

abraço


Responder

Gostei + 0

19/10/2005

Diogoalles

Up


Responder

Gostei + 0

19/10/2005

Firekiller

colega, para uma trigger não tem como você passar parâmetros, mas creio que daria pra fazer o que você quer, mais ou menos assim:

CREATE TRIGGER TRG_AGENDA FOR AGENDA
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
DECLARE VARIABLE EVENTO VARCHAR(100);
BEGIN
IF (INSERTING OR UPDATING) THEN
EVENTO = ´ATUALIZA_´||NEW.PROFISSIONAL||EXTRACT(DAY FROM CURRENT_DATE)||EXTRACT(MONTH FROM CURRENT_DATE)||EXTRACT(YEAR FROM CURRENT_DATE);

IF (DELETING) THEN
EVENTO = ´ATUALIZA_´||OLD.PROFISSIONAL||EXTRACT(DAY FROM CURRENT_DATE)||EXTRACT(MONTH FROM CURRENT_DATE)||EXTRACT(YEAR FROM CURRENT_DATE);

POST_EVENT :EVENTO
END

Daí, tipo assim, onde coloquei PROFISSIONAL, seria o campo para indicar qual profissional, e onde coloquei CURRENT_DATE (data corrente) você deve colocar seu campo data.
Fazendo isso, você estaria enviando um evento com a indicação de para quem seria a atualização. Bom, sendo assim, bastaria tratar esse código no event:

procedure TForm1.MDOEvents1EventAlert(Sender: TObject; EventName: String;
EventCount: Integer; var CancelAlerts: Boolean);
begin
if EventName = (´ATUALIZA´+Profissional+AnsiReplaceStr( DatetoStr(Date), ´/´ , ´´ )) then
TblAgenda.Refresh;
end;

Onde, Profissional é a parte responsável para indicar o profissional (deve ser o mesmo campo usado na trigger), e Date é seu campo do tipo Datetime.

Só digo a você que não sei se o código funciona, pois não testei, mas é uma idéia.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar