来源:www.cncfan.com | 2006-4-4 | (有1800人读过)
用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_ 随便插入些许记录 . 好了,我们是搞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?我也不太清楚,带着疑问看了一下帮助,只找到了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后都能是“随机”的感觉了
|