asp 如何读取 不重复 随机记录

最好有详细说明... 最好有详细说明 展开
 我来答
匿名用户
2013-04-09
展开全部
<%
'-------------------------数据库连接-----------------------
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
'---------------------------
%>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-04-09
展开全部
关于使用ASP随机查询数据库中的数据,有两种两见的数据库,即Sql Server 和 Access。

  SQL server数据库有个NewID函数,可以很方便的用SQL语句得到数据表中的随机数据。即可以使用以下SQL语句来实现:

sql="Select top 10 * from TableName order by NewId()"

  Access数据库同样提供一个Rnd函数,可以通过以下SQL语句来实现随机:

sql="select top 10 * from TableName order by Rnd(id)"

  Rnd(id) 其中的id只是为了提供一个种子,可以利用其他任何数值来完成。在这里Id为主键的值,因为通常而言,主键一般为自动编号字段,即数值型。

  可通过使用后发现,程序在第一次执行时是可以实现随机取得记录,但反复刷新后发现,每次返回的数据都相同。分析后发现,由于Access数据库记录集缓存的原因,从代码里得到Access数据库随机记录是得不到,需要用随机SQL语句的办法来消除缓存。

  有人说在程序中加上Randomize初始化随机种子,这只说对了一半,在程序中简单的加上Randomize,是没作用的,道理很简单,Randomize不可能影响SQL语句中的Rnd,这个Rnd只不过是个字符串,SQL语句是通过数据库引擎去执行的,正因为如此,无法初始化种子,致使每次应用产生的随机序列是一样的。

  由此可见,解决问题的关键就是如何初始化随机种子。Rnd函数语法是Rnd(number),它有一个特性,就是如果使用了负参数的 number,那么就会产生一个固定的随机序列。利用这个特性,我们的问题就迎刃而解了,这就是每次调用Rnd函数时,使用一个负的不同的number,从而达到产生不同随机序列的目的。经过测试,问题解决。使用如下代码即可使用正确的随机。

Randomize
sql="select top 10 * from TableName order by Rnd("&Rnd()&"-id)"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式