我要做一个抽奖系统,待抽奖号码存在数据库中,不知道怎么能做到随机抽取,没有什么思路。
请大家帮帮忙!谢谢了!

解决方案 »

  1.   

    窗體上放一個listbox,不可見。
    把抽獎號放到裏面。再放一個文本框,
    循環顯示列表框裏的數據。選後,從列表框移除它,免得第二次再選中他。
      

  2.   

    如果记录号是连续的,那就用(rnd*100000000 mod 总记录数)来定位即可。
    普通的随机用法。
      

  3.   

    不知道楼上的"rnd*100000000 mod 总记录数"和int(rnd*(总记录数+1))有什么区别
    不过前面至少要加一句"Randomize Timer"吧?
      

  4.   

    '打开数据库
    rs.CursorLocation = adUseClient
    rs.Open "Select * From tablename", cn'移到最后一条记录,以取得记录数
    rs.MoveLast'随机数初始化
    Randomize'取随机数,定位到一条记录。以下可以重复执行
    n = Rnd * rs.RecordCount + 1
    rs.AbsolutePosition = n
    MsgBox rs.fields("your_number")rs.Delete
    rs.MovelastIf rs.EOF Then ...
      

  5.   

    vansoft(Vansoft Workroom),觉得按顺序循环好像不太公平。
    of123() ,直接随机数据库,感觉速度太快了,怎么让界面上有滚动的效果呢?能使用定时器吗?
      

  6.   

    那你可以直接隨機生成0到列表框總數減一的隨機數
    然後取這行的文本,
    這樣只要加載一次數據庫資料即可。一個窗體,一個Listbox,一個文本框,二個按鈕Dim x As Long'開始
    Private Sub Command1_Click()
        Timer1.Enabled = True
    End Sub'停止,並從列表中刪除
    Private Sub Command2_Click()
        Timer1.Enabled = False
        List1.RemoveItem x
    End Sub'加載,你可以加載數據庫裏的數據
    Private Sub Form_Load()
        Dim i  As Long
        For i = 0 To 1000
            List1.AddItem Int(Rnd * 10000 + 1)
        Next
    End Sub'隨機取
    Private Sub Timer1_Timer()
        x = Int(Rnd * List1.ListCount)
        Text1.Text = List1.List(x)
        DoEvents
    End Sub
      

  7.   

    還有一個時鍾控件,時間我設的是222,Enabled為False
      

  8.   

    可以。有很多办法。例如,做一个循环,从 1 到你得到的随机数,逐个显示表中的号码。很自然地停在你所选中的号码上了。For i = 1 To n
    rs.AbsolutePosition = i
    Text1 = rs.fields("your_number")
    Text1.Refresh
    Next i如果记录太多,可以滚动显示若干条;如果你选中的记录太靠前,也可以从后面往前滚动:For i = n + IIf(rs.RecordCount > n + 99, 99, rs.RecordCount) To n Step -1
    Text1 = rs.fields("your_number")
    Text1.Refresh
    Next i
      

  9.   

    漏了一句:
    For i = n + IIf(rs.RecordCount > n + 99, 99, rs.RecordCount) To n Step -1
    rs.AbsolutePosition = i
    Text1 = rs.fields("your_number")
    Text1.Refresh
    Next