网络编程
位置:首页>> 网络编程>> Asp编程>> sql随机记录之如何解决每次RND的结果都一样的问题?

sql随机记录之如何解决每次RND的结果都一样的问题?

作者:cg1  发布时间:2007-09-11 13:24:00 

标签:rnd,随机

问题:

关于如何生成随机记录(二)
如何从指定表中随机抽取一定量的记录?
sql server 中 select top 10 * from 表 order by newid(); 在access中如何实现?
为什么我每次 select top ?? ... from... rnd(id) 的结果都一样呢?
 

方法一:

 在ACCESS环境中用rnd函数解决,非常简单

以下查询展示了如何从表中随机抽取10条记录


SELECT top 10 表1.*, Rnd(id) AS bb FROM 表1 ORDER BY Rnd(id)  


其中 Rnd(id) AS bb 只是为了说明其原理,完全可以去掉。
另外, Rnd(id) 其中的id只是为了提供一个种子,可以利用其他任何数值来完成


id字段是自动编号字段,你也可以用其他字段代替,只要能生成数值就行,比如我用姓名字段


SELECT top 10 表1.*, Rnd(len(姓名)) AS bb FROM 表1 ORDER BY Rnd(len(姓名))  


有网友说每次 RND 得到的结果都一样,那是因为没有使用 Randomize 语句来初始化随机数生成器。


Randomize 语句
初始化随机数生成器。

语法


Randomize [number]


可选的 number 参数是 Variant 或任何有效的数值表达式。

说明

Randomize 用 number 将 Rnd 函数的随机数生成器初始化,该随机数生成器给 number 一个新的种子值。如果省略 number,则用系统计时器返回的值作为新的种子值。

如果没有使用 Randomize,则(无参数的)Rnd 函数使用第一次调用 Rnd 函数的种子值。

注意 若想得到重复的随机数序列,在使用具有数值参数的 Randomize 之前直接调用具有负参数值的 Rnd。使用具有同样 number 值的 Randomize 是不会得到重复的随机数序列的。
 

方法二:

 在ASP、VB中无法使用上述方法,可以参考使用adodb.recordset.recordcount 属性以及 adodb.recordset.AbsolutePosition 以及 RND 函数来解决问题。

Function RndID() 
    Dim rs As New ADODB.Recordset 
    Dim strsql As String 
    strsql = "select * from 1" 
    rs.CursorLocation = adUseClient 
    rs.Open strsql, CurrentProject.Connection, 2, 3 
    ’在Access中可以使用 CurrentProject.Connection, 
    ’其他语言中可以用 ADODB.CONNECTION对象。 
     
    Dim i As Long 
    Dim lngCount As Long 
    Dim lngRnd As Long 
    lngCount = rs.RecordCount 
    ’一下取前10条随机记录 
    For i = 1 To 10 
        lngRnd = Int((lngCount * Rnd) + 1) 
        rs.AbsolutePosition = lngRnd 
        Debug.Print rs("id") 
    Next 
End Function

 

AbsolutePosition 属性
指示 Recordset 对象的当前记录的序号位置。

设置和返回值
设置或返回从 1 到 Recordset 对象 (PageCount) 中的记录数的 Long 值,或者返回一个 PositionEnum 值。

说明
要设置 AbsolutePosition 属性,ADO 要求您正在使用的 OLE DB 提供者实现 IRowsetLocate 接口。

访问用仅向前或动态游标打开的 Recordset 的 AbsolutePosition 属性将产生错误 adErrFeatureNotAvailable。使用其他游标类型时,只要提供者支持 IRowsetScroll 接口,就会返回正确的位置。如果提供者不支持 IRowsetScroll 接口,该属性将被设置为 adPosUnknown。要确定您的提供者是否支持 IRowsetScroll,请参阅提供者的文档。

使用 AbsolutePosition 属性根据在 Recordset 对象中的序号位置移动到某一记录,或确定当前记录的序号位置。提供者必须支持相应的功能才能使用此属性。

与 AbsolutePage 属性一样,AbsolutePosition 也是从 1 开始,并且当前记录是 Recordset 的第一个记录时等于 1。可以通过 RecordCount 属性获取 Recordset 对象中记录的总数目。

设置 AbsolutePosition 属性时,即使该属性指向当前缓存中的记录,ADO 也将使用以用户指定的记录开始的新记录组来重载缓存。CacheSize 属性决定此记录组的大小。

注意   不应将 AbsolutePosition 属性作为替代的记录编号使用。删除前面的记录时,给定记录的位置将发生更改。如果重新查询或重新打开 Recordset 对象,则无法保证给定的记录会有相同的 AbsolutePosition。书签仍然是保持和返回给定位置的建议方式,并且是跨越 Recordset 对象的所有类型定位的唯一方式。
请参阅
Visual Basic 范例 | Visual C++ 范例 | Visual J++ 范例

AbsolutePage 属性 | RecordCount 属性

适用于:Recordset 对象

相关阅读:

8个asp生成随机字符的函数

0
投稿

猜你喜欢

  • 记录应用程序的操作日志可以使用数据库、文本文件、XML文件等。我这里介绍的是使用 XML 文件记录操作日志。我觉得使用 XML 记录操作日志
  • 经典鼠标控制左右滚动,图片间隔无缝滚动,悬停滚动,图片控制左右滚动JavaScript代码<!DOCTYPE html PUBLIC
  • 之前看到很多人一直都问这个问题,不过当时我没当一回事,因为在 CSS 中要垂直居中,多数是在有高度的情况下,或者容器高度不定的情况下才用,看
  • MS SQL基本语法及实例操作 一:建表并初始化 ============================ create database
  • 先想创意,再画草图,接着鼠绘,最后做成flas * 。这是我的习惯流程。 这是想到中秋时,我第一时间内能浮想出的图像:大意是嫦娥奔
  • 本文整理了3种鼠标经过图片,图片边框加粗或改变颜色的方法,希望大家喜欢。下面3中只是提供了一个方法,具体的鼠标经过图片的样式,你自己可以修改
  • 这几天一直在看《Pro JavaScript Techniques》,书中有不少优美、健壮代码,让我不得不惊叹老外对语言这东西的研究程度之深
  • 大家可能经常会遇到这种情况:sql="select * from table"set rs=conn.execute(s
  • 在Transact-SQL语句中,我们主要使用OpenDataSource函数、OPENROWSET 函数,关于函数的详细说明,请参考SQL
  • 动手写个小组件(组件入门) 这篇文章主要是为想将自己的ASP水平提高的人写的! 把ASP代码变成组件,开发者不仅是加快了ASP的速度,而且也
  • 数据库(DataBase,DB)是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。通俗地说,数据库就是一个按照数据结构来组
  • 在数据库查询的时候,我们有时有这样的需求,就是要找出数据表里指定范围行内的数据记录,比如说要找出数据表里第10行到第20行的这10条数据,那
  • 无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构、充分利用空间是十分必要的。这就要求我们对数据库系统的常用数据类型有充
  • 公司网站后台使用的eWebEditor来添加发布新闻之类的,但把电脑的IE升级到8之后一直没办法添加附件之类的,症状就是在点击编辑器按钮时就
  • 本文作为属性篇的最后一篇文章, 将讲述HTML和CSS的关键—盒子模型(Box model). 理解Box model的关键便是margin
  • 中国,美国,英国3国时间js同步动态显示,对于做企业网站的朋友相信用的到,特别是做英文网站的朋友,加上这一段代码会给你的网站增色不少!本文j
  • 守来说,AJAX在现在是热得不能再热的技术。没有人能否认,它拥有大批的支持者。在CNN上,它从二月份的一个不被看好的词语到十月份成长成一个初
  • 平时每逢alexa排名更新时,我都需要将所有相关的同类网站的排名整理一下,看一下这些对手网站的排名更新情况。做的多了,也就烦了,虽然也才30
  • 本站收集的js实现的同步动态显示当前日期,时间和星期几的代码,我经常用在自己做的企业网站的后台,方便嘛。效果可以看看本站的首页,呵呵!而且代
  • 适合各种浏览器的js拖动层,ie,firefox等,调用方便!<!DOCTYPE HTML PUBLIC "-//W3C//
手机版 网络编程 asp之家 www.aspxhome.com