设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4179|回复: 12
打印 上一主题 下一主题

[Access本身] 怎样在抽奖系统里定时每隔10秒就抽出中奖人

[复制链接]
跳转到指定楼层
1#
发表于 2010-11-18 18:12:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
就是点击开始按钮后10秒钟,系统就自动产生中奖人,再点开始按钮10秒钟后系统继续产生又一个中奖人.(PS:待中奖人的姓名是在屏幕上以每隔1毫秒的速度闪烁的)

这个定时的代码怎么实现?    ....求救啊....
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2010-11-18 19:07:31 | 只看该作者
窗体设计视图---属性---事件---计时器触发事件,在该事件中写抽奖代码。同时在属性---事件---计时器间隔中,写10000。

计时器间隔1000=1秒。
3#
发表于 2010-11-19 10:24:35 | 只看该作者
来学习!
4#
 楼主| 发表于 2010-11-19 12:02:16 | 只看该作者
本帖最后由 想做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
5#
发表于 2010-11-19 15:00:15 | 只看该作者
本帖最后由 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函数来计算时间。

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



6#
 楼主| 发表于 2010-11-19 16:49:58 | 只看该作者
本帖最后由 想做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


又打扰你了,版主大哥,还有办法没?
7#
 楼主| 发表于 2010-11-20 02:28:37 | 只看该作者
本帖最后由 想做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
8#
发表于 2010-11-20 09:27:53 | 只看该作者
Me.Lottery = "Yes"
     Me.Jiangji = "二等奖"
只是赋值,不会500毫秒的需要7秒左右才执行?是不是代码还没有优化?发个例子上来如何?
9#
发表于 2010-11-20 16:44:54 | 只看该作者
本帖最后由 todaynew 于 2010-11-20 17:00 编辑

把时间间隔调大一些,这就就可以比较接近设定时间。如果每毫秒都进行一次随机取数,并在窗体上跳转记录,当然就需要花费时间,时间间隔越小累计的误差越大。
10#
 楼主| 发表于 2010-11-20 23:26:10 | 只看该作者
回复 ycxchen 的帖子

例子里面基本也就只有我在7楼写的那两段,应该不存在优化不优化的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-29 17:21 , Processed in 0.098872 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表