ASP读取ACCESS数据库随机记录的方法

来源:互联网 时间:1970-01-01

检查了一些贴子对于MSSQL数据库一般可以采用这样的语句:

<%
select top 50 * from someTable order by NewID()
%>


但是如果是Access数据库的话似乎没有什么好的解决方法。

方法一:有人用如下代码以记录总数为极大值来首先提取出指定数量的随机数,然后以这些随机数做为记录ID。
<%
dim n,j
dim su()
dim a,b,k
b=myrs.RecordCount
Randomize
redim su(index_N)
su(1)=Int((b * Rnd) + 1)
for n=2 to index_N
a=Int((b * Rnd) + 1)
for j=1 to n
do while a=su(j)
a=Int((b* Rnd) + 1)
j=1 
loop
next
su(n)=a
next
%>


这种方式有一些问题,就是当ID不是连续的话,有可能某些随机数不存在ID序列当中。另外ID的最大值与总的记录值不一定相等,这样有些记录ID会永远被忽略。

方法二:有人采用一条SQL语句解决此问题:
<%
select top 50 * from table order by int(rand()*50)
%>


如果这条语句可行的话是个不错的方法。我测试这条语句并没有通过,如果有人知道是哪有问题请告诉我,非常感谢。

方法三:有这样一种方法,我觉的不错:
<%
yourstr="*1*3*4*6*12*...."
sql="select top 10 * form yourdb where instr('*'&id&'*','"&yourstr&"')<>0"
%>


yourstr可以生成随机数多一点大于所限定抽取的随机数为好,这样可以排除记录不足的情况。

方法四:
<%
n=10 '取任意10条记录
set rs = server.createobject ("adodb.recordset")
sql = "select * from table"
rs.open sql,conn,1,1
count=rs.recordcount '记录总数
if count<>empty then
randomize 
for i=1 to n '循环n次
num=fix(rnd*count) 'num便是随机产生的记录行数,用fix(),使其不会大于count值
rs.move num '移到改随机行
response.write rs(0) '出该条记录
rs.movefirst '别忘了再把指针移到第一条
next
end if
rs.close
set rs=nothing
%>

相关阅读:
Top