电脑随机提取记录的方法(2009-06-09 10:49:54)
有一个学生信息表(名为"表1"),里面有很多记录,现在需要随机提取n条记录,简单的办法是建立sql查询。方法是--
建立一个查询并转换到SQL视图状态,在其中输入以下代码:
SELECT TOP 10 *
FROM 表1
ORDER BY
Rnd(len(姓名));
运行这个查询,就可以随机得到10条记录.
这样的设计肯定呆板,如果想提取的记录不是10,而是别的,又要重新设计查询,很麻烦。可以通过建立一个窗体的办法,在窗体上的文本框输入要提取的记录条数,临时决定筛选多少条。其步骤如下--
一、以上面的sql查询为数据源建立一个子窗体(命名为“表1子窗体”);
二、建一个主窗体,并将刚才建立的“表1子窗体”拖进主窗体,放到适当的位置;
三、在主窗体上加一个文本框,本例命名为“text9”(可以自定,但要注意相应代码改变),同时在空白位置加一个按钮(本例是command3),并在按钮的“单击”事件里写以下代码--
If IsNull(Me.Text9) = True Or Me.Text9
<= "0" Then
MsgBox "请正确设置要提取的记录数", vbInformation, "天一堂主人提醒"
Me.Text9.SetFocus
Exit Sub
End If
Dim str As String
str =
"select top " & Val(Me.Text9) & " *
FROM 表1 ORDER BY Rnd(len(姓名));"
Me.表1子窗体.Form.RecordSource = str
Me.表1子窗体.Requery
me.text9.setfocus
me.command3.enabled=false
'最后两句是让按钮失效,以防在不满意随机提取记录的情况下反复单击此按钮而得到不同的结果。
四、保存退出。再打开主窗体,在文本框里输入一个数字,单击那个按钮,子窗体里显示的就是随机提取的学生信息。
五、如果需要导出随机筛选的记录到excel,可以在主窗体上再加一个按钮,在其“单击”事件里写以下代码--
Me.表1子窗体.SetFocus
DoCmd.RunCommand acCmdSelectAllRecords
DoCmd.RunCommand acCmdCopy
Set obj = CreateObject("excel.application")
obj.workbooks.Add
obj.Visible = True
SendKeys "^v"
以上操作只能保证按“姓名”为据随机提取若干条记录。如果需要附加条件,比如随机提取的数据记录中还要限定性别,即男多少女多少,那么还应该在主窗体上加两个文本框(本例为“text14”和“text16”,因为已经有了总量限制,实际操作中其逻辑思路是“总量-男=女”,所以只保留一个文本框就行了,另一个可以不显示或者甚至不要),并将提取按钮的“单击”事件作如下修改--
If IsNull(Me.Text9) = True Or Me.Text9
<= "0" Then
MsgBox "请正确设置要提取的记录数", vbInformation, "天一堂主人提醒"
Me.Text9.SetFocus
Exit Sub
End If
Dim str As String
str =
"select top " & Val(Nz(Me.Text14))
& " * FROM 表1 Where c='男' ORDER
BY Rnd(len(b)) union all Select TT.* From (select top "
& Val(Nz(Me.Text9)) - Val(Nz(Me.Text14))
& " * FROM 表1 Where c='女' ORDER BY Rnd(len(姓名))) AS
TT;"
Me.表1子窗体.Form.RecordSource = str
Me.表1子窗体.Requery
me.text9.setfocus
me.command3.enabled=false
'最后两句是让按钮失效,以防在不满意随机提取记录的情况下反复单击此按钮而得到不同的结果。
这样设计后,提取或导出就很方便了。但需要说明的是,这个设计只适用于从条多记录集中临时提取部分记录,并不适用于将记录集固定分成多少组(比如学生分班等)。因为进行记录临时提取之后,已经提取的那些记录仍然在原表中,所以经过n次重复提取之后,某条记录可能会重复被提取。
本示例下载地址:http://xcwj.meibu.com/wjb/sjcq.exe
随机分班示例下载地址:http://xcwj.meibu.com/wjb/sjfb.exe
第一个程序默认安装目录d:\;第二个程序默认安装目录d:\my documents\,默认密码:0000
加载中,请稍候...