Office中国论坛/Access中国论坛

标题: 如何随机变动数据! [打印本页]

作者: liaoqiang234    时间: 2009-10-28 06:27
标题: 如何随机变动数据!
组合     名称   A班   B班
组合一   E01   张三   李四
组合二   E02   王三   李五
组合三   E03   张五   李六
组合四   E04   张六   李七
组合五   E05   张七   李八
组合六   E06   张八   李九
组合七   E07   张九   李十
组合八   E08   张十   李十一

然后在窗口设定一按纽,单击按纽时,A班和B班人要变动,且不能跟上次重复
多谢了!
作者: liaoqiang234    时间: 2009-10-28 06:32
A班里面的和B班里面的人是一定的,就是每执行一次,每个组合对应的人随机变动
作者: kangking    时间: 2009-10-28 10:31
一个示例。
作者: liaoqiang234    时间: 2009-10-29 06:30
谢谢,就是我要的,能不能不在子窗体随机, 直接把随机后的数据更新到数据表里
作者: liaoqiang234    时间: 2009-10-29 06:38
数据可以重复,请大哥在帮帮忙,每条数据随机完后不能重复
作者: kangking    时间: 2009-10-29 08:53
示例中的数据是直接更新到表里的。
数据重复也是随机的一种情况。
作者: liaoqiang234    时间: 2009-10-29 11:03
http://www.accessbbs.cn/bbs/view ... hlight=%CB%E6%BB%FA
这有个例子,可以防止重复产生,你帮我看看怎么修改
作者: liaoqiang234    时间: 2009-10-29 11:06
这样网址打不开,我还是把代码发上来

如何产生不重复的随机数?
先创建个类模块:Random

类模块代码如下:
Dim c As Collection
'初始化,定义产生随机数的最小值和最大值
Public Sub Init(min As Integer, max As Integer)
Set c = New Collection
Dim i As Integer
    For i = min To max
        c.Add i
    Next
End Sub
'产生不重复的随机数
Public Function RandomNext() As Integer
Dim i As Integer
Dim number As Integer, upperbound As Integer
    upperbound = c.Count
    If upperbound > 0 Then
        number = Int((upperbound) * Rnd + 1)
        RandomNext = CInt(c.Item(number))
        c.Remove (number)
    Else
        RandomNext = 0
    End If
End Function
Private Sub Class_Terminate()
    Set c = Nothing
End Sub

测试:
Dim r As New Random
  
Sub Test() '请先运行Init
Dim i As Integer
    For i = 0 To 10
       Debug.Print r.RandomNext
    Next
End Sub
Sub Init()
    r.Init 1, 100
End Sub
这里使用集合来实现的,也可以用哈希表来做,道理差不多。哈希表需要自己定义类模块。
作者: kangking    时间: 2009-10-29 11:39
本帖最后由 kangking 于 2009-10-29 11:43 编辑

就算是随机数,也会出现重复,比如1-10的随机数,第11个随机数肯定要和前面10个中的一个重复。

你要完全不重复,建议你用组合的办法,此法就象天干地支计年一样。即便是用组合的方法,当你点击按钮的次数超过组合总数的时候,也会出现重复,比如天干地支计年到了60年就重复了。
作者: liaoqiang234    时间: 2009-10-29 12:50
太深奥了,不懂




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