Subject Re: [IBO] Timers in Delphi during a DSQL execute
Author Martijn Tonies
> It occurred to me after posting I could write the timer in a separate
> thread ... thanks for confirmation.

That's a possibility as well, although I do not know if it can accept
messages then... I think the application usually dispatches messages
via the main message loop, but that could be incorrect...

Either way, with the TTimer in the main thread, it would work OK.

Martijn Tonies
Database Workbench - tool for InterBase, Firebird, MySQL, NexusDB, Oracle &
MS SQL Server
Upscene Productions
http://www.upscene.com
My thoughts:
http://blog.upscene.com/martijn/
Database development questions? Check the forum!
http://www.databasedevelopmentforum.com

> Russell
>
> --- In IBObjects@yahoogroups.com, "Martijn Tonies" <m.tonies@...>
> wrote:
> >
> > Hello Russel,
> >
> > > Not sure if this is a proper IBO question ...
> > >
> > > I run a lengthy stored procedure whose execution time I estimate
> and
> > > during its execution would like to update a progress bar on a
> TTimer
> > > event. When Execute is entered the TTimer event is effectively
> > > suspended. It is not called. Is this expected? Can I do something
> > > else
> > > to achieve updating a progress bar?
> > >
> > > dm is a data module used by the form containing the code below.
> The
> > > TTimer is in the code module.
> > >
> > > with dm.dsqlWrite do
> > > begin
> > > SQL.Text := 'execute procedure CALC_CONTACT2_RECS ' +
> > > QuotedStr(DateToIBDate( TDate(DTStart.date)))+', '+
> > > QuotedStr(DateToIBDate( TDate(DTEnd.date)));
> > > Prepare;
> > > Execute;
> > > // TTimer event not called while in Execute
> >
> > If you use Execute, the applications main thread will wait until it
> > returns and not process any windows messages. In order for TTimer
> > to work, the application has to respond to windows messages.
> >
> > If you want this to work, execute the procedure in a thread.
> >
> > > contact2ID := fields[0].AsInteger;
> > > RecCount := fields[1].asInteger;
> > > end;