Tem como passar parametro para uma Trigger? Como?
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
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:
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:
como ñ conheço muito dessa questão de Triggers e SP gostaria de uma ajuda. Como passo parametros e leio em triggers?
obrigado
Diogo
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
Curtidas 0
Respostas
Diogoalles
18/10/2005
olá pessoal
ainda não consegui, já estou a dois dias nisso
agradeço se alguem puder ajudar
abraço
ainda não consegui, já estou a dois dias nisso
agradeço se alguem puder ajudar
abraço
GOSTEI 0
Diogoalles
18/10/2005
Up
GOSTEI 0
Firekiller
18/10/2005
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.
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.
GOSTEI 0