论坛上问这个问题的人蛮多,最近正好也在写一个小东西遇上了这个问题,在网上搜索了下没找到解决办法。最后在Access版的老大们帮助下解决了,有兴趣的可以交流一下。

  SQL server数据库有个NewID函数,可以很方便的用SQL语句得到数据表中的随机数据。但Access数据库没这么方便,虽然有个Rnd,可以通过“select top 10 * from tb order by rnd(id)”得到随机数据,VBA环境下使用没有问题,可惜在VB中使用,产生的随机序列是一样的,每次调用返回的数据相同。

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

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

'......
        Dim sql As String
        Dim r As Single
        Randomize
        r = Rnd
        sql = "select top 1 * from tb order by rnd(" & r & "-id)"
    '......

  代码说明:SQL语句中的Rnd的参数是一个数值表达式,必须包含表中的一个字段(最好是主键),因为变量r返回的是一个随机的0到1之间的single,(一般情况下表中的ID值都是大于1的),从而使参数的值是个小于0的随机数,由此产生了不同的随机序列。

  补充一点,有一种提议用time来解决这个问题,就是"select top 10 * from tb order by rnd(" & time & "- id) "。在某些情况下是可以的,但是,如果你需要快速连续的查询信息,比如一些摇号程序需要连续滚动地显示信息,这种情况下,就会出现连续几次返回重复的信息。究其原因,就是time在做数值运算的时候,会转换为一个小于1的Double,而rnd返回的是一个Single,显然,rnd返回的结果有可能会截去time-id运算后的尾数,在time变化很小的情况下,使rnd返回的值与前次相同,从而返回的查询结果相同。

关于VB调用Access的Rnd函数随机返回表中数据的解决方法相关推荐

  1. hive运行mysql脚本_用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql

    1:创建shell脚本 1 touch sqoop_options.sh2 chmod 777 sqoop_options.sh 编辑文件  特地将执行map的个数设置为变量  测试 可以java代码 ...

  2. access vba 用recordset读取表中数据的简单方法

    'strQuery是表名,查询名等 Public Function Getrs(Byval strQuery as string) as ADODB.Recordset Dim objRs As Ne ...

  3. c++imread 函数_OpenCV中C++函数imread读取图片的问题及解决方法

    今天在用OpenCV实验Image Pyramid的时候发现一个奇怪的问题,就是利用C++函数imread读取图片的时候返回的结果总是空,而利用C函数cvLoadImage时却能读取到图像.代码如下: ...

  4. pandas使用rename函数重命名dataframe中数据列的名称、从而创建一个包含重复列名称的dataframe数据集

    pandas使用rename函数重命名dataframe中数据列的名称.从而创建一个包含重复列名称的dataframe数据集 目录

  5. pandas使用np.where函数计算返回dataframe中指定数据列包含缺失值的行索引列表list

    pandas使用np.where函数计算返回dataframe中指定数据列包含缺失值的行索引列表list(index of rows with missing values in dataframe ...

  6. pandas使用dropna函数计算返回dataframe中不包含缺失值的行索引列表list(index of rows without missing values in dataframe)

    pandas使用dropna函数计算返回dataframe中不包含缺失值的行索引列表list(index of rows without missing values in dataframe) 目录

  7. pandas使用isna函数和any函数计算返回dataframe中包含缺失值的数据行(rows with missing values in dataframe)

    pandas使用isna函数和any函数计算返回dataframe中包含缺失值的数据行(rows with missing values in dataframe) 目录

  8. ubuntu下连接mysql出现Access denied for user ‘rose‘@‘localhost‘ (using password: NO)的解决方法

    ubuntu下连接mysql出现Access denied for user 'rose'@'localhost' (using password: NO)的解决方法 参考文章: (1)ubuntu下 ...

  9. KEIL MDK access violation at 0x40021000 : no ‘read‘ permission的一种解决方法

    KEIL MDK access violation at 0x40021000 : no 'read' permission的一种解决方法 参考文章: (1)KEIL MDK access viola ...

最新文章

  1. Redis源码解析——字典结构
  2. shell命令之---Linux文件权限
  3. java随机点名器的思路_Java实现简单的随机点名器
  4. 全球及中国有机肥料行业投资价值与营销品牌战略报告2022版
  5. 217. Contains Duplicate数组重复元素 123
  6. 小苗快速培养盆景苗方法_九里香盆景的制作与养护
  7. 理解TCP为什么需要进行三次握手(白话)(转载)
  8. java 开发环境配置文件_Java 开发环境配置
  9. 开源管理系统OSSIM设置 语言为中文简体
  10. Ubuntu 安装Samba(Linux与Windows共享文件)
  11. smart原则_绩效指标如何设定?SMART原则轻松搞定
  12. MySQL数据库环境变量设置
  13. 注册cuteftppro 8.3
  14. 【Python】LDA模型中文文本主题提取丨可视化工具pyLDAvis的使用
  15. Python实现获得所有拼音为某个拼音的所有汉字
  16. 双11临近,电脑无缘无故的弹出了双11天猫广告,必须追踪到底
  17. c语言中以追加只写方式打开文本文件,C语言文本方式和二进制方式打开文件区别...
  18. (4.6.17.4)进程保活(三:JNI层初探):单进程单向循环式启动服务
  19. 记Oracle regexp_substr 一拆多查询缓慢sql优化
  20. 【Robomaster】电控入门手册

热门文章

  1. 律师事务所法律咨询源码 v1.6.1
  2. “走路赚钱”的趣步,是披着区块链外衣的传销骗局吗?
  3. r语言怎样调换两列的顺序
  4. 如何不编程也能使用爬虫采集图片或图片地址
  5. 用小位宽乘法器实现大位宽乘法
  6. Windows10 C盘如何扩容【10min内解决】
  7. 【leetcode】岛屿类问题的通用解法
  8. 对于某平台播放的简要修改代码
  9. hive 三种表的创建
  10. 河南职称计算机考试准考证