Office中国论坛/Access中国论坛

标题: 怎样在抽奖系统里定时每隔10秒就抽出中奖人 [打印本页]

作者: 想做NO.1    时间: 2010-11-18 18:12
标题: 怎样在抽奖系统里定时每隔10秒就抽出中奖人
就是点击开始按钮后10秒钟,系统就自动产生中奖人,再点开始按钮10秒钟后系统继续产生又一个中奖人.(PS:待中奖人的姓名是在屏幕上以每隔1毫秒的速度闪烁的)

这个定时的代码怎么实现?    ....求救啊....

作者: todaynew    时间: 2010-11-18 19:07
窗体设计视图---属性---事件---计时器触发事件,在该事件中写抽奖代码。同时在属性---事件---计时器间隔中,写10000。

计时器间隔1000=1秒。
作者: termisss    时间: 2010-11-19 10:24
来学习!
作者: 想做NO.1    时间: 2010-11-19 12:02
本帖最后由 想做NO.1 于 2010-11-19 12:04 编辑

回复 todaynew 的帖子

我可能没表达清楚,换种方式说吧,我希望在点击Command17按钮后等待10秒钟再执行Me.TimerInterval = 0   Me.Lottery = "Yes"  Me.Jiangji = "二等奖".
不知如何等待10秒钟

在ACCESS里试了WAIT不行,不知是不是我用得不对

Private Sub Command17_Click()
Me.TimerInterval = 0
Me.Lottery = "Yes"
Me.Jiangji = "二等奖"
End Sub
作者: todaynew    时间: 2010-11-19 15:00
本帖最后由 todaynew 于 2010-11-19 15:13 编辑

1、在窗体模块中设一个公共变量
dim T as long

2、在按钮单击事件中:
Private Sub Command17_Click()
T=0
Me.TimerInterval = 1000  '打开计时器
End Sub

3、在窗体的计时器触发事件中写:
Private Sub Form_Timer()
T=T+1
if T=10 then
     Me.Lottery = "Yes"
     Me.Jiangji = "二等奖"
    Me.TimerInterval = 0  '关闭计时器
end if
End Sub

当然,也可用DateDiff函数来计算时间。

具体处理方法可参见《定时诈弹》一文。




作者: 想做NO.1    时间: 2010-11-19 16:49
本帖最后由 想做NO.1 于 2010-11-19 17:05 编辑

回复 todaynew 的帖子

但是窗体的计时器触发事件中已经有下面的代码:

'计时器触发时屏幕上会滚动显示被抽奖人的姓名等资料(如果下面这段去掉姓名就不会在屏幕上滚动)
Private Sub Form_Timer()
Dim X As Integer, Y As Integer, I As Integer
On Error GoTo Err_Form_Timer
    DoCmd.GoToRecord , , acFirst
    X = Me.Recordset.RecordCount
    Randomize
    Y = Int(X * Rnd + 1)
    DoCmd.GoToRecord , , , Y
    Me.Repaint
   
Exit_Form_Timer:
    Exit Sub

Err_Form_Timer:
    MsgBox Err.Description
    Resume Exit_Form_Timer
End Sub


又打扰你了,版主大哥,还有办法没?
作者: 想做NO.1    时间: 2010-11-20 02:28
本帖最后由 想做NO.1 于 2010-11-20 02:38 编辑

回复 todaynew 的帖子

谢谢todaynew 的帮助,把循环加入到原来的代码里就可以了,再次感谢todaynew先生

Private Sub Command17_Click()
T=0
Me.TimerInterval = 1  '打开计时器,这里用的是1毫秒
End Sub


Private Sub Form_Timer()
Dim X As Integer, Y As Integer, I As Integer
T = T + 1
    DoCmd.GoToRecord , , acFirst
    X = Me.Recordset.RecordCount
    Randomize
    Y = Int(X * Rnd + 1)
    DoCmd.GoToRecord , , , Y
    Me.Repaint
If T = 500 Then '这里虽然用500毫秒,但实际上需要7秒左右才执行下面的代码,难道跟电脑运行速度有关?可是电脑配置很好哦
     Me.Lottery = "Yes"
     Me.Jiangji = "二等奖"
     Me.TimerInterval = 0  '关闭计时器
End If
End Sub

作者: ycxchen    时间: 2010-11-20 09:27
Me.Lottery = "Yes"
     Me.Jiangji = "二等奖"
只是赋值,不会500毫秒的需要7秒左右才执行?是不是代码还没有优化?发个例子上来如何?
作者: todaynew    时间: 2010-11-20 16:44
本帖最后由 todaynew 于 2010-11-20 17:00 编辑

把时间间隔调大一些,这就就可以比较接近设定时间。如果每毫秒都进行一次随机取数,并在窗体上跳转记录,当然就需要花费时间,时间间隔越小累计的误差越大。

作者: 想做NO.1    时间: 2010-11-20 23:26
回复 ycxchen 的帖子

例子里面基本也就只有我在7楼写的那两段,应该不存在优化不优化的问题
作者: 想做NO.1    时间: 2010-11-20 23:31
回复 todaynew 的帖子

版主就是版主啊,一语中的

我想还有一个原因是那个姓名资料的记录比较多,约5000个人,每人一条记录.
作者: 想做NO.1    时间: 2010-11-21 14:22
本帖最后由 想做NO.1 于 2010-11-21 14:23 编辑

...........

作者: termisss    时间: 2010-11-22 09:49
上班之余,来逛逛论坛.




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3