Re: [firebird-support] Event handling, I think?

2019-11-22 Thread Mark Rotteveel m...@lawinegevaar.nl [firebird-support]
On 2019-11-22 11:02, Alan J Davies alan.dav...@aldis-systems.co.uk 
[firebird-support] wrote:
> Hi all, is it possible to update a table when the current_date in
> rdb$database changes to the next day?
> 
> I need to reset a delivery counter to 0 in all the orders on a system.
> I can presently do this two ways.
> 
> When I print a delivery label I do it via a SP...
> cut-down start of SP
>  select  current_date
>  fromrdb$database
>  into:human_date;
>  select  p.label_counter_date
>  fromparamfil p
>  into:counter_date;
>  if (:human_date>:counter_date) then -- it must be the next day
>  begin
>  update  paramfil p
>  set p.label_counter_date=current_date;
>  update  orditems oi
>  set oi.label_day_count=0;
>  end
> then continue with SP to print labels as normal
> This does cause a delay to the first set of delivery labels printed 
> each
> day.
> 
> I could write and run a small Delphi program which would only have the
> above code as an active item. I could then use Windows (its a Windows
> 2016 server) to run this program at midnight plus a minute, as a
> scheduled task.
> 
> But that seems a lot for something I think I should do within the
> database itself. I've tried to create a trigger on rdb$database but
> cannot, I don't have it available and I understand that I should not
> 'mess' with it anyway.
> 
> Any help or suggestions gratefully received.

Firebird doesn't have a task scheduler, and there is no physical 
database change when the date changes, so you can't trigger an event. 
current_database is a function (or context variable), not a column in a 
database.

Mark


[firebird-support] Event handling, I think?

2019-11-22 Thread Alan J Davies alan.dav...@aldis-systems.co.uk [firebird-support]
Hi all, is it possible to update a table when the current_date in 
rdb$database changes to the next day?

I need to reset a delivery counter to 0 in all the orders on a system.
I can presently do this two ways.

When I print a delivery label I do it via a SP...
cut-down start of SP
 select  current_date
 fromrdb$database
 into:human_date;
 select  p.label_counter_date
 fromparamfil p
 into:counter_date;
 if (:human_date>:counter_date) then -- it must be the next day
 begin
 update  paramfil p
 set p.label_counter_date=current_date;
 update  orditems oi
 set oi.label_day_count=0;
 end
then continue with SP to print labels as normal
This does cause a delay to the first set of delivery labels printed each 
day.

I could write and run a small Delphi program which would only have the 
above code as an active item. I could then use Windows (its a Windows 
2016 server) to run this program at midnight plus a minute, as a 
scheduled task.

But that seems a lot for something I think I should do within the 
database itself. I've tried to create a trigger on rdb$database but 
cannot, I don't have it available and I understand that I should not 
'mess' with it anyway.

Any help or suggestions gratefully received.


-- 
Alan J Davies
Aldis