ASP实现:用一条SQL得到Access数据库中的随机记录集!

针对“用一条SQL得到数据库中的随机记录集”问题在网上已经有很多答案了:
SQL  Server  2000:
SELECT  TOP  n  *  FROM  tanblename  ORDER  BY  NEWID()
Access
SELECT  TOP  n  *  FROM  tanblename  ORDER  BY  rnd([一个自动编号字段])
好了!就说说这个Access的!
打开Access2003建立一个带有自动编号字段的表  T1  :  id_(auto),content_
随便插入些许记录
然后,点选“查询”新建一个查询,“设计视图”,选择T1,然后选择SQL视图(这样可以写自己的SQL了,比较习惯),好了,写吧:
SELECT  TOP  3  [content_]  FROM  [T1]  ORDER  BY  rnd([id_])
然后运行一下结果,嗯记住了是什么结果哦。
返回SQL视图,再运行看结果,跟上次的不一样!那就对了!(当然你的T1里别只有少于3条的记录呀)
好了,我们是搞WEB开发的!
写个ASP看看

<%
Dim  Con,RS
Set  Con  =  Server.CreateObject(“ADODB.CONNECTION”)
Con.ConnectionString  =  “Provider=MicroSoft.Jet.OLEDB.4.0;  Data  Source=”  &  Server.MapPath(“*.mdb”)
Con.CommandTimeout  =  20
Con.CursorLocation  =  3
Con.Open

Set  RS  =  Con.Execute(“SELECT  TOP  3  [content_]  FROM  [T1]  ORDER  BY  rnd([id_])”)
Do  While  Not  RS.EOF
Response.Write  RS.Fields(“content_”).Value  &  “<br  />”
RS.MoveNext
Loop
RS.Close
Set  RS  =  Nothing

Con.Close
Set  Con  =  Nothing
%>

在localhost上运行一下这个ASP,看到结果了吧,记住!再F5一下!咦?~~~~~~~~~~~还那个结果!这可不是我们想要的!
当然了,rnd在运行前应该执行Randomize语句的!
可是怎么执行?
Access里支持Randomize么?我的Access也不是很熟,看了一下帮助,只找到了VBS里的那个Randomize……
解决问题是每个程序员最来精神的!
赶紧Google一下!
翻了半天也没有好的解决方案,有的干脆用asp来循环的找position,呸,费了半天劲干什么呢,我就想SQL解决怎么办?
Access里的Randomize不知道怎么用,asp的基本功还会吧?开动脑筋,有了!

<%
Dim  Con,minPID,RS
Set  Con=  Server.CreateObject(“ADODB.CONNECTION”)
Con.ConnectionString  =  “Provider=MicroSoft.Jet.OLEDB.4.0;  Data  Source=”  &  Server.MapPath(“*.mdb”)
Con.CommandTimeout  =  20
Con.CursorLocation  =  3
Con.Open
Randomize
Set  RS  =  Con.Execute(“SELECT  TOP  3  [content_]  FROM  [T1]  ORDER  BY  rnd(-(id_+”  &  rnd()  &  “))”)
Do  While  Not  RS.EOF
Response.Write  RS.Fields(“content_”).Value  &  “<br  />”
RS.MoveNext
Loop
RS.Close
Set  RS  =  Nothing
Con.Close
Set  Con  =  Nothing
%>

嗯,这回再试一试!
OK了!每次F5后都能是“随机”的感觉了
如果您有更好的解决办法或建议请告诉我,谢谢!

No Comments, Be The First!

Your email address will not be published.