对于与表单关联的计时器有一些触发问题,任何人都可以告诉我为什么这不起作用,并且只触发一次。 这是代码:
Option Compare Database
Option Explicit
Private Sub CheckingToggle_Click()
If Me.CheckingToggle.value = False Then
Me.TimerInterval = 0
Text35.value = 0
Else
Me.TimerInterval = 5000
Text35.value = 5000
End If
End Sub
Private Sub Form_Load()
CheckingToggle.value = False
Me.TimerInterval = 0
End Sub
Private Sub Form_Timer()
If CheckingToggle = True Then
Dim rs As DAO.Recordset
'The sql here is operating on the Access Jet tables dont get confused if trying to Mysql functions will not work!!!!
Set rs = CurrentDb.OpenRecordset("SELECT * FROM DataMonitor WHERE IsActive=true " _
& " And ( " _
& " DateAdd('n', [FrequencyMins], [LastCheck]) < #" & Now() & "#" _
& " OR IsNull([LastCheck]))")
'Check to see if the recordset actually contains rows
If Not (rs.EOF And rs.BOF) Then
rs.MoveFirst 'Unnecessary in this case, but still a good habit
Do Until rs.EOF = True
'Do our stuff here
DoEvents
Loop
Else
MsgBox "There are no records that are Active which have not been ckecked in the last minute"
End If
rs.Close 'Close the recordset
Set rs = Nothing 'Clean up
End If
End Sub
单击切换到&#39;选中&#39;后,计时器首次触发,Form_Timer()第一行的断点捕获执行,并且手表显示间隔为正确设置为5000,但是,无论是否打开或关闭切换,它都不会再次触发,直到表单首次回到设计模式。
看起来奇怪的是,在从断点继续之后,如果我在没有先停止正在运行的运行代码的情况下将表单切换到设计模式,我就被阻止了! &#34;此时你可以切换到另一个视图&#34; ......好像计时器正在运行时,事件没有触发。至少断点并没有抓住它。
我尝试在子程序中放置一个计数器,只是为了测试进程是否通过而不会以某种方式绊倒断点,但这确实增加了。这是到目前为止代码的完整性,并且在尝试调试期间已设置和取消设置timerinterval属性,但行为不受影响。
感谢任何帮助。
答案 0 :(得分:1)
应该已经实现 - 答案显而易见 - 并不是事件根本不会发生!但是rs.MoveNext还没有被包含在循环中,所以它永远不会退出以便能够再次在timer事件中运行代码!!!