You've probably seen code to SET TALK ON before running your query to show the SQL thermometer/progress bar. First off, all such techniques require you to write several statements before and after the SQL. In a procedural approach you'd have to either build a single routine where you pass in the SQL command for execution OR you'd have to run a preSQL and postSQL pair of routines.
OOP makes the best solution. Have an object prepare the environment for the query during it's init. You then run your query and release the object where it restores the environment in it's destroy.
You'd use it like this...
LOCAL m.loThermo m.loThermo = NEWOBJECT("cusSQLThermo","cusSQLThermo.VCX")
SELECT SOMEFIELDS FROM SOMETABLE WHERE SOMECONDITION
That's pretty simple. It's made possible by this little class:
************************************************** *-- Class: cussqlthermo (c:\vmp2005\my\cussqlthermo.vcx) *-- ParentClass: custom *-- BaseClass: custom *-- Time Stamp: 10/18/05 09:07:11 PM * DEFINE CLASS cussqlthermo AS custom
*-- Holds SET TALK setting at initialization. PROTECTED icoldsettalk icoldsettalk = "" *-- Holds SET NOTIFY setting at initialization. icoldsetnotify = "" *-- Holds the output window at initialization. PROTECTED icoldoutputwindow icoldoutputwindow = "" *-- Holds the name of the temporary output window. PROTECTED icnewoutputwindow icnewoutputwindow = "" Name = "cussqlthermo"
PROCEDURE Destroy SET TALK OFF LOCAL lcNewOutputWindow, lcOldOutputWindow, lcOldSetNotify, lcOldSetTalk lcNewOutputWindow = THIS.icNewOutputWindow lcOldOutputWindow = THIS.icOldOutputWindow lcOldSetNotify = THIS.icOldSetNotify lcOldSetTalk = THIS.icOldSetTalk
IF VERSION(5)>=800 SET NOTIFY &lcOldSetNotify. ENDIF
SET TALK &lcOldOutputWindow.
RELEASE WINDOWS &lcNewOutputWindow.
SET TALK &lcOldSetTalk. ENDPROC
PROCEDURE Init *Class that activates SQL thermometer bar during init *and restores altered settings during destroy.
.icOldSetTalk = SET("TALK") SET TALK OFF
.icOldOutputWindow = SET("TALK",1)
.icNewOutputWindow = "SQLThermo"+SYS(2015) LOCAL m.lcNewOutputWindow m.lcNewOutputWindow = .icNewOutputWindow DEFINE WINDOW &lcNewOutputWindow. FROM -1000,-1000 TO -500,-500 ACTIVATE WINDOW &lcNewOutputWindow. IN SCREEN
SET TALK WINDOW &lcNewOutputWindow. IF VERSION(5)>=700 .icOldSetNotify = SET("NOTIFY") SET NOTIFY ON ENDIF ENDWITH