ASP实现access随机显示不重复记录解决方案
作者:随然 日期:2009-07-04
网上这方面的代码很多,随便搜索一下就可以看到很多不同的代码。
我这里列举几种我比较喜欢的方法。
方案一:比较简洁的方式
dim i,DispRecord
i=0
DispRecord=10 '设置显示的随机记录数量
sql="select id,caption from table"
set rs=server.CreateObject("adodb.recordset")
rs.open sql,conn,1,3
lngCount = rs.RecordCount
redim idList(lngCount)
while i<DispRecord
lngRnd = Int((lngCount * Rnd) + 1)
rs.AbsolutePosition = lngRnd
if isEmpty(idList(lngRnd)) then '如果第lngRnd条记录在数组中为空,则显示该条记录
response.write rs(0)&"<Br>" '你可以自己设定需要输出的内容
idList(lngRnd)=1 '第lngRnd条记录已经显示,把他在数组中的值设定为1,下次就不再显示
i=i+1
end if
wend
rs.close
set rs=nothing
Erase idList
方案二:可以生成指定范围内不重复的随机记录
Dim objConn, objRs, db, strSQL
Dim totalCount, rndArray, rsOutputMax, intI
'-----------------
'|连接数据库|
'-----------------
db = "db/dbname.mdb"
strSQL = "Select id,name FROM table_name"
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
Set objRs = Server.CreateObject("ADODB.Recordset")
objRs.Open strSQL, objConn, 1, 3
'--------------
'|读取数据|
'--------------
totalCount = objRs.RecordCount '生成随机数范围的上限
rsOutputMax = 10 '输出记录条数
rndArray = myRnd(rsOutputMax,totalCount,1)
Response.Write " id name"
Response.Write "------------------"
For intI = 1 To rsOutputMax
objRs.AbsolutePosition = rndArray(intI)
Response.Write " " & objRs("id") & " " & objRs("name") & "<br>"
Next
'--------------
'|清理资源|
'--------------
Set objRs = Nothing
objConn.Close
Set objConn = Nothing
'--------------------------------------------------
'|生成指定范围内不重复随机数的函数|
'|nMax:输出随机数的个数 |
'|upper:指定范围上限 |
'|lower:指定范围下限 |
'--------------------------------------------------
Function myRnd(nMax,upper,lower)
Dim a(), i, j, k, reCount
ReDim a(nMax)
Randomize Timer
For i = 1 To nMax
reCount = False
k = Int((upper - lower + 1) * Rnd + lower)
For j = 1 To i - 1
If k = a(j) Then reCount = True : Exit For
Next
If reCount = True Then
i = i - 1
Else
a(i) = k
End If
Next
myRnd = a
End Function
%>
方案三:和上面连个代码大同小异,只是实现方式不一样
'连接数据库代码略
DIM sql,rs
sql="select top 100 * from table order by rnd(id)"
Set rs=server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1
DIM Appeared
Call DisRndRecord(10,rs.recordCount)'调用函数该位置显示记录
'#DisRndRecord(DisNum,rsBound)
'#参数DisNum:显示数量
'#参数rsBound:随机数产生范围
Sub DisRndRecord(DisNum,rsBound)
DIM i,ThisRnd
If rsBound<DisNum Then DisNum=rsBound'记录总数小于要抽取记录条数的情况
For i=0 To DisNum-1
ThisRnd=GetRnd(rsBound)'取得一个不重复的随机数
rs.Move(ThisRnd)'游标移动到随机数位置数读取
Response.Write "<br>"&rs("id")
rs.Move(-ThisRnd)
Next
End Sub
'# 函数GetRnd(bound)返回一个不重复的随机数字
'#参数bound:随机范围
Function GetRnd(bound)
DIM ranNum
Randomize()
ranNum=int(bound*rnd)
If Instr(Appeared,"["&ranNum&"]") Then'产生的随机数是否出现过
ranNum=getRnd(bound)
End If
Appeared=Appeared&"["&ranNum&"]"'记录已出现的随机数
GetRnd=ranNum
End Function
rs.close
Set rs=Nothing
conn.close
Set conn=Nothing
%>
方案四:网上很多朋友使用过的代码,个人还是推荐前三种代码
’-------------------------数据库连接-----------------------
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条记录被选中,设置为1,下次将不再选中
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
%>
下一篇: 用ASP获取指定范围内的一组不重复的随机整数
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: ASP 代码
相关日志: