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

VB中随机函数的用法和示例 在Visual Basic(VB)中,Rnd函数是一个常用的随机函数,它可以返回一个大于等于0且小于1的随机数。通过合理地使用Rnd函数,可以实现各种随机数生成的需求,增加程序的随机性和变化性。计算出要生成的随机整数范围的长度,然后乘以Rnd函数的返回值,再加上起始值1,最后使用Int函数将结果转换为整数。上述代码将生成一个随机数,并将其与0.5进行比较,如果小于0.5,则将布尔值设为True,否则设为False。上述代码使用系统时钟作为随机数种子,从而保证每次运行程序时生成的随机数序列是不同的。 阅读详情

  论坛上问这个问题的人蛮多,最近正好也在写一个小东西遇上了这个问题,在网上搜索了下没找到解决办法。最后在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返回的值与前次相同,从而返回的查询结果相同。

随机数生成器 随机数生成器,利用c语言编写,简单易懂。 立即下载

相关推荐

百度贴吧爬虫实战:完整实现与使用指南

使用 csv 模块创建写入器,首先写入表头("标题" 和 "链接"),然后遍历帖子字典,将每个标题和链接作为一行写入文件。首先检查内容是否为空,然后通过查找 JSON 结构的起始({)和结束(})位置,提取有效的 JSON 片段。接着遍历帖子列表中的每个条目,提取标题文本和对应的链接,对于相对路径的链接会自动补全为完整的 URL。从 JSON 提取标题和链接此方法专门用于从解析后的 JSON 数据中提取帖子标题和对应的链接。提取到的标题和链接以字典形式返回,键为标题,值为对应的完整链接。

qq_63736560的博客 2016

ACCESS随机函数

select top 10 * from tb order by rnd(id)

中辽普坦的专栏 3047

ICS v9.5 OverbyteIcsWSocket.pas 整体架构分析

核心架构:OverbyteIcsWSocket.pas 是 Internet Component Suite (ICS) 的基础网络组件单元,提供跨平台 Winsock API 封装,支持TCP/UDP 客户端/服务器,DNS 解析和Raw Socket。在 v9.5 中,SSL/TLS 代码已分离至 OverbyteIcsSslBase.pas 等单元,使核心单元更精简,专注于非加密 socket 操作。

sonadorje的专栏 993

Oracle、MySql、SQLServer、Access等等各种数据库数据库取随机数和取随机条数

Oracle数据库 1、从表中随机取记录 select * from (select * from staff order by dbms_random.random) where rownum < 4 表示从STAFF表中随机取3条记录 2、产生随机数 SELECT DBMS_RANDOM.RANDOM FROM DUAL; 产生一个任意大小的...

qq_42264638的博客 1790

多机器人协同:水下机器人集群的分布式控制与ROS仿真实践

本文探讨了多自主水下机器人(AUV)集群的分布式控制方法,重点分析了欠驱动6自由度AUV模型的反馈线性化技术。通过ROS/Gazebo仿真平台,详细介绍了系统架构设计、通信延迟补偿策略及环境扰动应对方案,为水下协同作业提供实用参考。

jupi8的博客 688

YOLOv8_obb的C++工程部署实战:从模型转换到实时视频推理

本文详细介绍了YOLOv8_obb模型在C++环境下的完整工程部署流程,涵盖从PyTorch模型到ONNX格式的转换、基于ONNX Runtime的C++推理引擎搭建、旋转框后处理解析,以及实时视频流处理与性能优化。文章重点解析了模型转换的关键参数、环境配置的常见问题、核心推理代码的实现,并提供了实用的避坑指南,旨在帮助开发者高效完成YOLOv8_obb的C++工程部署。

weixin_29100927的博客 45

在SQL和Access中使数据随机排序

  1.在SQL server中使用随机函数newID()和RAND()示例:SELECT TOP 10 * FROM Northwind Orders ORDER BY NEWID()说明:NEWID()返回类型为uniqueidentifier(全局唯一标识符-GUID),每次运行以上程序返回不同的uniqueidentifier。2.在Access中使用随机函

Mallva 4664

18、偏微分方程数值计算:粘性不可压缩流与电磁学的有限元方法

本文系统介绍了偏微分方程数值计算在粘性不可压缩流与电磁学中的应用,重点探讨了稳态与非稳态Navier-Stokes问题的混合有限元方法及求解技术,包括弱形式构建、半离散与时间离散格式、牛顿迭代法等。同时,详细阐述了电磁学中Maxwell方程的有限元与时域有限差分法(FDTD)求解方法,涵盖时间谐波与时域波方程、边界条件处理、稳定性分析与误差估计。结合MATLAB代码示例和实际案例,展示了速度场、压力、电场与磁场的数值模拟过程,并通过流程图与表格对比了两类问题的方法原理、应用场景与收敛性特性。最后展望了多物理

lemon的博客 88

随机读取access数据库中值

<br />SQL server数据库有个NewID函数,可以很方便的用SQL语句得到数据表中的随机数据。但Access数据库没这么方便,虽然有个Rnd,可以通过“select top 10 * from tb order by rnd(id)”得到随机数据,VBA环境下使用没有问题,可惜在VB或者C#中使用,产生的随机序列是一样的,每次调用返回的数据相同。<br />有人说在程序中加上Randomize初始化随机种子,那么这只说对了一半,在程序中简单的加上Randomize,是没作用的,道理很简单,Ran

fuhongxue2011的专栏 906

利用SIMULINK搭建一个16QAM调制解调收发系统

1发送模块设计 根据前面介绍的理论知识,我们可以知道16QAM的基本结构,首先我来设计QAM发送段的SIMULINK仿真模块。 图1 16QAM的发送端模块 他的基本工作流程为:将信号通过两路升余弦滤波器,得到滤波以后的信号,滤波器的作用就是为了防止码间干扰。然后将滤波以后的信号和SIN,COS相乘得到调制信号,将调制 下面一一介绍每个模块的具体参数设置以及各个部分信号的波形图。 图2 产生随机数据的信号源 第一部分信号是产生一组随机的数字,作为信源,第二个模块将信号...

FPGA/MATLAB学习教程/源码/项目合作开发 4776

【系统分析师】2009年真题:综合知识-答案及详解

在某银行业务的用例模型中,“取款”用例需要等到“存款”用例执行之后才能执行,两个用例之间的关系属于(1);“取款”和“存款”两个用例中都需 要执行查询余额的功能,将查询余额提取成独立的用例,那么“取款”和“存款” 用例与“查询余额”用例之间的关系属于(2)。(1)A. 关联关系 B. 扩展关系 C. 使用关系 D. 依赖关系 (2)A. 扩展关系 B. 使用关系 C. 依赖关系 D. 继承关系【参考答案】D、A雇员类含有计算报酬的行为,利用面向对象的(3),可以使得其派生类专职 雇员类和兼职雇员类计算报酬的

数据知道的博客 1万+

ACCESS和MSSQL-如何随机读取数据库记录

查询语句只要这样写,就可以随机取出记录了SQL="Select top 6 * from Dv_bbs1 where isbest = 1 and layer = 1 order by newID() desc"在ACCESS里SELECT top 15 id FROM tablename order by rnd(id)SQL Server:Select TOP N * From T

yaoshanghuan的专栏 2409

Dify智能体开发:发布嵌入网站

Dify 支持将你的 AI 应用嵌入到业务网站中,你可以使用该能力在几分钟内制作具有业务数据的官网 AI 客服、业务知识问答等应用。点击 WebApp 卡片上的嵌入按钮,复制嵌入代码,粘贴到你网站的目标位置。

王国平的博客 3245

一个数据表中随机地选取出数据

我们经常想在一个数据表中随机地选取出数据来,比如随机生成考试试卷等。利用 SQL Server 的 NewID() 方法就可以很轻松地达到这个目的。NewID() 方法返回一个 GUID,如:EE95A489-B721-4E8A-8171-3CA8CB6AD9E4在 select 表的时候,再增加一列为 NewID() 就可以了。SQL 语句:select *, NewID() from tabl

1445

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

如何随机读取数据库记录

 在MSSQL 里查询语句只要这样写,就可以随机取出记录了SQL="Select top 6 * from Dv_bbs1 where isbest = 1 and layer = 1 order by newID() desc"在ACCESS里SELECT top 15 id FROM tablename order by rnd(id) SQL Server:Select TO

yanick技术博客 1014

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ASP.NET 2.0中随机读取Access数据库记录

由于使用ADO访问Access数据库会有缓存,这在随机提取数据库数据时,例如:sql="select top 10 Title,objectGuid from Document Order By Rnd(id)",将得不到随机记录,下面的例子可以克服这一缺陷,实现数据库的随机读取。 C#:@ Page Language="C#" %>DOCTYPE html PUBLIC "-//W3

【孟子E章】 8465

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

关于如何生成随机记录

方法一: 在ACCESS环境中用rnd函数解决,以下查询展示了如何从表中随机抽取10条记录 SELECT top 10 * FROM tbl1 ORDER BY Rnd(id) 另外, Rnd(id) 其中的id只是为了提供一个种子,可以利用其他任何数值来完成 id字段是自动编号字段,也可以用其他字段代替,只要能生成数值就行。 如果每次RND得到的结果都一样,那是因为没有使用 Rando...

weixin_30602505的博客 260

sql随机抽取记录

我们经常想在一个数据表中随机地选取出数据来,比如随机生成考试试卷等。 利用 SQL Server 的 NewID() 方法就可以很轻松地达到这个目的。 NewID() 方法返回一个 GUID,如:EE95A489-B721-4E8A-8171-3CA8CB6AD9E4 在 select 表的时候,再增加一列为 NewID() 就可以了。 SQL 语句:select *, NewID() f

penjie0418的专栏 1029

Access,MSSQL:随机读取N条记录

今天试着将一个网站使用的mssql转换为Access,但网站首页有一段代码是随机读取n条记录: SQL Server:Select TOP N * From TABLE Order By NewID()转换成Access后,这句就不能使用了,后来到百度搜索了一下,找到一个解决办法: Access:Select TOP N * From TABLE Order By Rnd(ID)Rnd(ID)...

weixin_30487317的博客 181

随机提取Access/SqlServer数据库中的10条记录的SQL语句

代码如下: 本文相关代码如下: Access: select top n * from table order by rnd(id)'id为数据库的自动编号字段 Sql Server: select top n * from table order by newid() 但在ASP+Access中,或许是因为缓存的原因,第一条SQL语句无法得到预期的结果,而VB+Access则可以。解

sinat_15155817的专栏 1550

sql随机抽取数据库记录

Mysql:select * from [tablename] order by rand() limit 10 Sql Server:select top 5 * from [tablename] order by NEWID() Access:select top 5 * from [tablename] order by rnd(id),其中id是自动编号的字段。在vb+access可以随机...

weixin_34357962的博客 104
下一篇: VB中给DataReport指定打印机
vbman2003
博客等级 码龄23年 192粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值