I have been troubeshooting the following code for two days now. It's pretty simple but I am missing something 'cause it won't do what I want. I think I have looked at it too long I can no longer figure out what the heck I am missing. Any help would be appreciated so I can move on to other modules. This code is part of a OnTimer routine set to every 1 seconds. It is polling for a time event based on a field entry into a database--the value is a C and is either 0, 30 or 60. If it is "0", it does not trigger--if it is "30" it (is supposed to set the trigger_tripped variable to .T.) if the number of seconds after midnight (VSecAftMid) is equal to the current number of seconds after midnight--that is what is not working. That would be the very last commented part of the code. What am I not seeing? Thanks in advance!
'Set Trigger_Tripped variable to .F. and AAA_Ack to .T.
AAA_Ack = a5_eval_expression("=.T.")
Trigger_Tripped = a5_eval_expression("=.F.")
'Define VSecAftMid as N
DIM GLOBAL VSecAftMid AS N
VSecAftMid = a5_eval_expression("=TOSECONDS(TIME())")
'Create a new variable called 'AAA_DOW' and set its value to '=ALLTRIM(STR(DOW(Date()),1))
dim Global AAA_DOW AS C
AAA_DOW = convert_type(a5_eval_expression("=ALLTRIM(STR(DOW(Date()),1))",local_variables()),"C")
'Find the Current Time Block based on VSecAftMid
IF VSecAftMid >= 0 .AND. VSecAftMid < 3600
VTB = 0
Elseif VSecAftMid >= 3600 .AND. VSecAftMid < 7200
VTB = 1
Elseif VSecAftMid >= 7200 .AND. VSecAftMid < 10800
VTB = 2
Elseif VSecAftMid >= 10800 .AND. VSecAftMid < 14400
VTB = 3
Elseif VSecAftMid >= 14400 .AND. VSecAftMid < 18000
VTB = 4
Elseif VSecAftMid >= 18000 .AND. VSecAftMid < 21600
VTB = 5
Elseif VSecAftMid >= 21600 .AND. VSecAftMid < 25200
VTB = 6
Elseif VSecAftMid >= 25200 .AND. VSecAftMid < 28800
VTB = 7
Elseif VSecAftMid >= 28800 .AND. VSecAftMid < 32400
VTB = 8
Elseif VSecAftMid >= 32400 .AND. VSecAftMid < 36000
VTB = 9
Elseif VSecAftMid >= 36000 .AND. VSecAftMid < 39600
VTB = 10
Elseif VSecAftMid >= 39600 .AND. VSecAftMid < 43200
VTB = 11
Elseif VSecAftMid >= 43200 .AND. VSecAftMid < 46800
VTB = 12
Elseif VSecAftMid >= 46800 .AND. VSecAftMid < 50400
VTB = 13
Elseif VSecAftMid >= 50400 .AND. VSecAftMid < 54000
VTB = 14
Elseif VSecAftMid >= 54000 .AND. VSecAftMid < 57600
VTB = 15
Elseif VSecAftMid >= 57600 .AND. VSecAftMid < 61200
VTB = 16
Elseif VSecAftMid >= 61200 .AND. VSecAftMid < 64800
VTB = 17
Elseif VSecAftMid >= 64800 .AND. VSecAftMid < 68400
VTB = 18
Elseif VSecAftMid >= 68400 .AND. VSecAftMid < 72000
VTB = 19
Elseif VSecAftMid >= 72000 .AND. VSecAftMid < 75600
VTB = 20
Elseif VSecAftMid >= 75600 .AND. VSecAftMid < 79200
VTB = 21
Elseif VSecAftMid >= 79200 .AND. VSecAftMid < 82800
VTB = 22
Else VSecAftMid >= 82800 .AND. VSecAftMid =< 86399
VTB = 23
End if
'Find the current day and time block and store the field value to V->V_AAA_Interval_Factor.
dim tbl as p
tbl = table.open("aaa_intervals")
query.filter = "dow_num = AAA_DOW .and. time_block = Var->VTB"
query.order = ""
query.flags = ""
dim i_tbl as p
i_tbl = tbl.query_create()
dim recs as n
recs = i_tbl.records_get()
if recs = 0 then
ui_msg_box("Error","No records satisfy the query '" + query.filter + "'.",UI_STOP_SYMBOL)
end
end if
tbl.fetch_first()
DIM Global V_Aaa_Interval_Factor AS C
V_Aaa_Interval_Factor = tbl.eval("Aaa_Interval_Factor")
tbl.close()
DIM VCounter as N = -1
'Check for Time event every 30 minutes on the hour and half hour
if V_Aaa_Interval_Factor = "30"
while VCounter<=48
VCounter = VCounter + 1
If VCounter*1800 = VSecAftMid
Trigger_Tripped = .T.
AAA_Ack = .F.
exit while
end if
wend
elseif V_Aaa_Interval_Factor = "60"
'Check for time event overry hour on the hour
while VCounter<=24
VCounter = VCounter + 1
If VCounter*3600 = VSecAftMid
Trigger_Tripped = .T.
AAA_Ack = .F.
exit while
else
exit while
end if
wend
end if
'Set Trigger_Tripped variable to .F. and AAA_Ack to .T.
AAA_Ack = a5_eval_expression("=.T.")
Trigger_Tripped = a5_eval_expression("=.F.")
'Define VSecAftMid as N
DIM GLOBAL VSecAftMid AS N
VSecAftMid = a5_eval_expression("=TOSECONDS(TIME())")
'Create a new variable called 'AAA_DOW' and set its value to '=ALLTRIM(STR(DOW(Date()),1))
dim Global AAA_DOW AS C
AAA_DOW = convert_type(a5_eval_expression("=ALLTRIM(STR(DOW(Date()),1))",local_variables()),"C")
'Find the Current Time Block based on VSecAftMid
IF VSecAftMid >= 0 .AND. VSecAftMid < 3600
VTB = 0
Elseif VSecAftMid >= 3600 .AND. VSecAftMid < 7200
VTB = 1
Elseif VSecAftMid >= 7200 .AND. VSecAftMid < 10800
VTB = 2
Elseif VSecAftMid >= 10800 .AND. VSecAftMid < 14400
VTB = 3
Elseif VSecAftMid >= 14400 .AND. VSecAftMid < 18000
VTB = 4
Elseif VSecAftMid >= 18000 .AND. VSecAftMid < 21600
VTB = 5
Elseif VSecAftMid >= 21600 .AND. VSecAftMid < 25200
VTB = 6
Elseif VSecAftMid >= 25200 .AND. VSecAftMid < 28800
VTB = 7
Elseif VSecAftMid >= 28800 .AND. VSecAftMid < 32400
VTB = 8
Elseif VSecAftMid >= 32400 .AND. VSecAftMid < 36000
VTB = 9
Elseif VSecAftMid >= 36000 .AND. VSecAftMid < 39600
VTB = 10
Elseif VSecAftMid >= 39600 .AND. VSecAftMid < 43200
VTB = 11
Elseif VSecAftMid >= 43200 .AND. VSecAftMid < 46800
VTB = 12
Elseif VSecAftMid >= 46800 .AND. VSecAftMid < 50400
VTB = 13
Elseif VSecAftMid >= 50400 .AND. VSecAftMid < 54000
VTB = 14
Elseif VSecAftMid >= 54000 .AND. VSecAftMid < 57600
VTB = 15
Elseif VSecAftMid >= 57600 .AND. VSecAftMid < 61200
VTB = 16
Elseif VSecAftMid >= 61200 .AND. VSecAftMid < 64800
VTB = 17
Elseif VSecAftMid >= 64800 .AND. VSecAftMid < 68400
VTB = 18
Elseif VSecAftMid >= 68400 .AND. VSecAftMid < 72000
VTB = 19
Elseif VSecAftMid >= 72000 .AND. VSecAftMid < 75600
VTB = 20
Elseif VSecAftMid >= 75600 .AND. VSecAftMid < 79200
VTB = 21
Elseif VSecAftMid >= 79200 .AND. VSecAftMid < 82800
VTB = 22
Else VSecAftMid >= 82800 .AND. VSecAftMid =< 86399
VTB = 23
End if
'Find the current day and time block and store the field value to V->V_AAA_Interval_Factor.
dim tbl as p
tbl = table.open("aaa_intervals")
query.filter = "dow_num = AAA_DOW .and. time_block = Var->VTB"
query.order = ""
query.flags = ""
dim i_tbl as p
i_tbl = tbl.query_create()
dim recs as n
recs = i_tbl.records_get()
if recs = 0 then
ui_msg_box("Error","No records satisfy the query '" + query.filter + "'.",UI_STOP_SYMBOL)
end
end if
tbl.fetch_first()
DIM Global V_Aaa_Interval_Factor AS C
V_Aaa_Interval_Factor = tbl.eval("Aaa_Interval_Factor")
tbl.close()
DIM VCounter as N = -1
'Check for Time event every 30 minutes on the hour and half hour
if V_Aaa_Interval_Factor = "30"
while VCounter<=48
VCounter = VCounter + 1
If VCounter*1800 = VSecAftMid
Trigger_Tripped = .T.
AAA_Ack = .F.
exit while
end if
wend
elseif V_Aaa_Interval_Factor = "60"
'Check for time event overry hour on the hour
while VCounter<=24
VCounter = VCounter + 1
If VCounter*3600 = VSecAftMid
Trigger_Tripped = .T.
AAA_Ack = .F.
exit while
else
exit while
end if
wend
end if
Comment