请选择 进入手机版 | 继续访问电脑版

 找回密码
 注册

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 测测你的龙年运势 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图和邮件任务 看看大家是怎么省钱过日子的?

写书评、邀请阅读赢精品图书! 想加薪?!蓝色理想招聘提供你更多机会 万元奖励等你拿——点点网模板设计大赛

查看: 10805|回复: 7

access随机显示记录(不重复)解决方案 [复制链接]

tzboy 楼主
帖子
678
体力
12294
威望
8
居住地
广东省 佛山市
发表于 2004-6-10 17:13:00 |显示全部楼层
看了很多人讨论关于access随机取记录的帖子
不才,写了一个随机显示记录的解决方法,希望大家指正

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

code
--------------------------------------
  1. <%
  2. '-------------------------数据库连接-----------------------
  3. Set objConn = Server.CreateObject("ADODB.Connection")
  4. objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" &_
  5. "Data Source=" & Server.MapPath("data.mdb")
  6. objConn.Open
  7.   '-------------------------数据库连接-----------------------

  8. '-------------------------检索数据-----------------------
  9. strSQL = "SELECT id,DataColumn FROM DataTable"       
  10. 'Sql语句,检索数据库
  11. Set objRS = Server.CreateObject("ADODB.Recordset")   
  12. '创建记录集
  13. objRS.Open strSQL, objConn, 1, 1               
  14. '执行检索
  15. Count=objRS.RecordCount                       
  16. '得到记录总数
  17. Item=4                                                                 
  18. '显示记录数
  19. '-------------------------检索数据-----------------------

  20. '-------------------------------------------------------------------------------
  21. redim a(Item, 2),t(Count)
  22. '定义2数组,数组a用来储存记录,数组t用来删选记录

  23. '---------------------------------------
  24. '初始数组数值,目的为了插入数据以后和此值做比较
  25. for each j in t
  26.     j=0
  27. next
  28. '---------------------------------------

  29. '---------------------------------------
  30. ' 随机抽取记录号
  31. Randomize timer                '初始化随机数生成器
  32. for j=1 to Item
  33.     k=int(rnd*Count+1)        '从总数里面随机取一条记录
  34.     do while t(k)<>0                        '判断是否记录是否已经在数组中
  35.       k=int(rnd*Item+1)
  36.     loop
  37.     t(k)=1                        '第k条记录被选中
  38. next
  39. '--------------------------------------
  40. j=1:i=1'定义下标

  41. '--------------------------------------
  42. ' 循环选取数据集objRS中的部分记录存放到数组中
  43. Do While Not objRS.Eof
  44.           if t(j)=1 then
  45.                   a(i,1)=objRS("id")                  '记录id
  46.                   a(i,2)=objRS("DataColumn") '记录内容
  47.                   i=i+1
  48.          end if
  49. j=j+1
  50. objRS.MoveNext
  51. Loop
  52. '--------------------------------------
  53. '-------------------------------------------------------------------------------

  54. '----------------------------显示内容--------------------
  55. for i=1 to Item
  56.         Response.write "序号"&a(i,1)&"<br>"
  57.         Response.write "内容"&a(i,2)&"<p>"
  58. next
  59. '----------------------------显示内容--------------------

  60. '---------------------------
  61. '释放资源
  62. objRs.Close
  63. set objRs=nothing
  64. objConn.Close
  65. set objConn=nothing
  66. '---------------------------
  67. %>
复制代码


Data
  1. id    DataColumn
  2. --------------------------
  3. 1        a
  4. 2        b
  5. 3        c
  6. 4        d
  7. 5        e
复制代码



演示:http://phx.cz0550.com/tz/rnd.asp
已有 1 人评分威望 收起 理由
经典论坛大妈 + 3 历史打分

总评分: 威望 + 3   查看全部评分

mootools爱好者群 63980729
帖子
426
体力
1584
威望
0
发表于 2004-6-10 17:28:00 |显示全部楼层
恩,仔细看看

娃哈哈.COM

荣誉管理

帖子
14172
体力
34831
威望
62
居住地
天津市 南开区
发表于 2004-6-10 17:30:00 |显示全部楼层
厉害,想法很新奇。只是记录很多的时候,数组会很大哦。
佩服,收藏!
哇嘎嘎……
毛绒玩具的卖~~~

垃圾青蛙

荣誉管理  

帖子
26107
体力
51565
威望
21
居住地
福建省 厦门市
发表于 2004-6-10 22:10:00 |显示全部楼层
SQL SERVER的话只需要newID()就行了,但ACCESS来说,它本身不提供newID()这个方法,因此这种方法还是比较好用的,但缺点就如萧萧小雨说的。

打分加置顶一个星期。

PS:鼓励大家多写写原创,然后大家一块来讨论。
新一代四无新人,21世纪低碳男……博客 免费下载易提醒
帖子
289
体力
1068
威望
0
发表于 2004-6-12 14:06:00 |显示全部楼层
不错,值得收藏!
帖子
134
体力
260
威望
6
发表于 2004-6-13 09:11:00 |显示全部楼层
access是不是很难用?MySQL一句就搞定了:
  1. Select * From tables Order By rand() Limit 5;
复制代码
让全世界都忘了我,就像今生我不曾来过。
PHP 中文站:http://www.openphp.cn
帖子
2200
体力
13171
威望
6
发表于 2004-6-13 16:15:00 |显示全部楼层
to:人妖GG

这个是算法,和ACCESS里的SQL语句关系不大。

请仔细看最后一个连接的引用。
他的答案都是放在a里,然后通过2个随机的数组把次序打乱,但是答案都是先前在数据库里的a答案,其他的答案都是错的。
msn:renaski@hotmail.com
3219 
帖子
1
体力
9
威望
0
发表于 2005-10-12 12:04:00 |显示全部楼层
帅青蛙在上个帖子中说
SQL SERVER的话只需要newID()就行了,但ACCESS来说,它本身不提供newID()这个方法,因此这种方法还是比较好用的,但缺点就如萧萧小雨说的。

打分加置顶一个星期。

PS:鼓励大家多写写原创,然后大家一块来讨论。


ACCESS可以用Rnd(id)
您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-3-29 02:42 , Processed in 0.102570 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部