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

检查了一些贴子对于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
%>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值