设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2314|回复: 8
打印 上一主题 下一主题

[窗体] 如何在窗体上实现“随机限量”查询

[复制链接]
跳转到指定楼层
1#
发表于 2014-1-16 19:36:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 程研 于 2014-1-16 19:42 编辑

前两天发了一条帖子,没有实例,今天补上!问题是:在查询同类数据库信息时,如何实现对同类数据库信息的随机查询。见实例:13个同龄(15岁)的同学,要“随机选取”10个同龄(15岁)的同学。谢谢各位老师!也顺便祝各位老师们新年愉快!见附件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2014-1-16 19:39:19 | 只看该作者
Select TOP 10 * From TABLE Order BY Rnd(Len(姓名)) 试试
3#
发表于 2014-1-16 21:23:49 | 只看该作者
看试简单,实际操作起来,虽然代码都很简单,但还真有点步骤。
4#
发表于 2014-1-16 21:53:25 | 只看该作者
Private Sub Command4_Click()
    Dim i As Long, cnt As Long, n As Long
    Dim rst As DAO.Recordset
    Const SelNumbers As Long = 5

   
    Set rst = sfm学生表.Form.Recordset.Clone
    cnt = rst.RecordCount
    Randomize

    For i = 1 To SelNumbers
        n = cnt - (Int(cnt * Rnd) + rst.AbsolutePosition)
        Debug.Print n
        If n <> 0 Then
            rst.Move n
        End If
        Debug.Print "随机记录ID"; rst.Fields(0).Value
    Next
   
    '将选出的“随机记录ID”组成SELECT查询语句条件,即可
   
    rst.Close: Set rst = Nothing

End Sub
5#
发表于 2014-1-16 22:01:00 | 只看该作者
这里主要应用了RECORDSET对象的Clone和MOVE方法

当然上面代码实现楼主的随机性目的,但还有两个问题要解决:
1,需要考虑,随机选到重复的记录
2,源数据的记录数小于你的限量数(如18岁只有3条记录时)
6#
发表于 2014-1-16 22:06:24 | 只看该作者
共了40分钟把思路给了你,重点代码也给你了,剩下的看你自己了。

问题1用到的
'--------------------------------------------------
'Purpose:   检查指定的值是否在列表中
'Input:
'       [in]    FindVal:   需要查找的值
'Output:    (Boolean)
'--------------------------------------------------
Public Function IsInList(ArrayList() As Long, ByVal FindVal As Long) As Boolean
    Dim i As Long
    For i = LBound(ArrayList) To (UBound(ArrayList))
        If ArrayList(i) = FindVal Then IsInList = Not IsInList: Exit Function
    Next i
End Function
7#
 楼主| 发表于 2014-1-17 11:06:24 | 只看该作者
lynnwang 发表于 2014-1-16 22:06
共了40分钟把思路给了你,重点代码也给你了,剩下的看你自己了。

问题1用到的

十分谢谢老师的指点!我再消化消化!
8#
发表于 2014-1-17 19:10:34 | 只看该作者
不用那么麻烦
把下面这段代码复制到你的VBA窗体里,把随机那个命令按钮的单击事件选上即可.

Private Sub Command4_Click()
Me.学生表_子窗体.Form.RecordSource = "Select TOP 5 * From 学生表 where 年龄=" & Me.Text2.Value & " Order BY Rnd(Len(姓名))"
Me.学生表_子窗体.Form.Requery
End Sub


9#
发表于 2014-1-18 10:15:07 | 只看该作者
玉树TMD临风 发表于 2014-1-17 19:10
不用那么麻烦
把下面这段代码复制到你的VBA窗体里,把随机那个命令按钮的单击事件选上即可.

TOP X + Order BY Rnd(整形字段),正解
我的是瞎扯了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-5 12:38 , Processed in 0.085235 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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