网络编程
位置:首页>> 网络编程>> Asp编程>> asp随机提取access数据库记录的几种方法

asp随机提取access数据库记录的几种方法

作者:Atwind  发布时间:2007-09-06 19:42:00 

标签:access,随机,记录

今天研究了些取access数据库随机记录问题,这是这我自己搜集整理的方法。大家有没有高见,可以告诉我,或者我总结的东东本身有误,也可以帮我修正。

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

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
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com