access随机显示记录(不重复)解决方案

数据库里有5条记录,随机抽取4条。

code

--------------------------------------

<%

'-------------------------数据库连接-----------------------

Set objConn = Server.CreateObject("ADODB.Connection")

objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" &_

"Data Source=" & Server.MapPath("data.mdb")

objConn.Open

'-------------------------数据库连接-----------------------

'-------------------------检索数据-----------------------

strSQL = "SELECT id,DataColumn FROM DataTable"

'Sql语句,检索数据库

Set objRS = Server.CreateObject("ADODB.Recordset")   

'创建记录集

objRS.Open strSQL, objConn, 1, 1  

'执行检索

Count=objRS.RecordCount   

'得到记录总数

Item=4

 

 

 

 

 

 

 

 

 

 

 

  

'显示记录数

'-------------------------检索数据-----------------------

'--------------------------------------------------------

redim a(Item, 2),t(Count)

'定义2数组,数组a用来储存记录,数组t用来删选记录

'---------------------------------------

'初始数组数值,目的为了插入数据以后和此值做比较

for each j in t

    j=0

next

'---------------------------------------

'---------------------------------------

' 随机抽取记录号

Randomize timer   '初始化随机数生成器

for j=1 to Item

    k=int(rnd*Count+1) '从总数里面随机取一条记录

    do while t(k)<>0

 

 

 

'判断是否记录是否已经在数组中

 

  k=int(rnd*Item+1)

    loop

    t(k)=1    '第k条记录被选中

next

'--------------------------------------

j=1:i=1'定义下标

'--------------------------------------

' 循环选取数据集objRS中的部分记录存放到数组中

Do While Not objRS.Eof

   if t(j)=1 then

    a(i,1)=objRS("id")

 

   '记录id

    a(i,2)=objRS("DataColumn") '记录内容

    i=i+1

end if

j=j+1

objRS.MoveNext

Loop

'--------------------------------------

'--------------------------------------------------------

'----------------------------显示内容--------------------

for i=1 to Item

Response.write "序号"&a(i,1)&"<br>"

Response.write "内容"&a(i,2)&"<p>"

next

'----------------------------显示内容--------------------

'---------------------------

'释放资源

objRs.Close

set objRs=nothing

objConn.Close

set objConn=nothing

'---------------------------

%>

Data

id    DataColumn

--------------------------

1        a

2        b

3        c

4        d

5        e

 

// SQL SERVER的话只需要newID()就行了,但ACCESS来说,它本身不提供newID()这个方法

 

 

方法二:

其实有直接的方法  

Randomize()

intRandomNumber=Int(1000*Rnd)+1

sql="SELECT * FROM Table ORDER BY Rnd("&-1*(intRandomNumber)&"*id)"

ID是自动编号!以往都是ORDER BY Rnd(ID),这样导致排序只会变动一次,而这个每次刷新都会重新排序!  这样就可以随机排序,再加上 top 4 就OK了

来源:http://home.blueidea.com/space.php?uid=215898&do=blog&id=14033