广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 4161 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
傻妞佩ㄦ
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[Basic][求助] vb sql资料库 取乱数
在radiobuttonn上点选25题
用vb程式 在sql资料库取25笔不同的题目 且不重复
取到的题目会放置在file_num
那请问要如何写程式
用rnd()来写

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        cnn.Open()
        cmd = New SqlCommand("select ..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容



[ 此文章被傻妞佩ㄦ在2010-08-09 23:19重新编辑 ]


献花 x0 回到顶端 [楼 主] From:台湾凯擘 | Posted:2010-08-09 17:52 |
ebolaman 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖

级别: 副版主 该用户目前不上站
版区: 程式设计
推文 x38 鲜花 x458
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

关于不重复的部分
提供一种方法,可以用一个字串去记录已经读取的题目编号

例如创一个变数 RepFilterS
在 Do 上面加一行 RepFilterS = "/"

file_num = Int(Rnd() * file_num + 1) 这行把他置换成回圈:

Do
file_num = Fix((25)*Rnd + 1)
Loop While InStr(1, RepFilterS , "/" & file_num & "/") <> 0
RepFilterS = RepFilterS & file_num & "/"

第三行意思是在 RepFilterS 寻找纪录是不是该号码已经被载入过了,有的话就跑回圈再取一次,跑到纪录中找不到才可以跳出去

例如 RepFilterS 目前是 "/2/5/7/13/19/23/"
假如第一次乱数取到 7 ,则 InStr 在 RepFilterS 找的到 "/7/" 因此继续跑
假如取到 1 找不到就可以跳出,避免重复


其实有另外一种方法更简单,用类似 ListBox 的变数 (VB6 中叫做 Collection)
但你的 VB 版本似乎不太一样,我不太确定有没有
不然就隐藏用个 ListBox 吧

用 Collection 就先把 Collection 设定 25 个项目字串分别 1~25
则用乱数取 25 中任一项,取到后把该项目删除,Collection 就会剩下 24 项
如此一来下回合就直接取 24 项目中任一项,完全不用去检查有没有重复~


以上方法换成变数也可以用一字串 "1/2/3/4/5.../25" ,用 Split 或 InStr 取乱数位置的字串
然后用 Mid 方法将取到的字串删除,接着直到取完为止
这方法应该是最快的,因为变数可以事先就载入好而且可以重复使用
问题是写出来比较麻烦
还是推荐你用第一种就 OK 了


至于乱数取数的公式是 Fix((上底 - 下底 + 1)*Rnd + 下底)
试试看吧~


[ 此文章被ebolaman在2010-08-10 14:12重新编辑 ]

此文章被评分,最近评分记录
财富:50 (by 三仙) | 理由: ^^ 因为您的参与,让程式设计更容易!!


My BOINC stats :

献花 x1 回到顶端 [1 楼] From:台湾台湾宽频 | Posted:2010-08-10 14:01 |
三仙 会员卡
个人头像
个人文章 个人相簿 个人日记 个人地图
头衔:以马内利 以马内利
版主
级别: 版主 该用户目前不上站
版区: 程式设计
推文 x17 鲜花 x370
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用 傻妞佩 于 2010-08-09 17:52 发表的 vb sql资料库 取乱数: 到引言文
在radiobuttonn上点选25题
用vb程式 在sql资料库取25笔不同的题目 且不重复
取到的题目会放置在file_num
那请问要如何写程式
用rnd()来写

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        cnn.Open()
        cmd = New SqlCommand("select * from dbo.subject_temp where sub_lable in", cnn)
        Form2.Show()
        Dim dr As SqlDataReader = cmd.ExecuteReader()
        dr.Read()
        cnn.Close()

        Randomize()
        If RadioButton1.Checked = True Then
            Do
                file_num = Int(Rnd() * file_num + 1)
                cmd = New SqlCommand("SELECT count(*) FROM dbo.subject_temp where sub_num='" & file_num  & "'", cnn))
                Dim kr As SqlDataReader = cmd.ExecuteReader()
                file_num = kr.Read()
                i = i + 1
            Loop While i < 26
        End If

[ 此文章被傻妞佩在2010-08-09 23:19重新编辑 ].......


是老师不让你用sql 语法 newid()
直接捞取乱数资料吗?
觉得你的资料
并没有大到影响语法捞资料的效率呀!

如果一定要用程式做苦工
我会用阵列方式
-----------------------------------------
1.得知题数并宣告阵列
2.进 loop 随机取乱数并比对阵列值
3.不重覆数值填入阵列直到填满阵列
4.上、下一笔的Button tag储存上、下阵列值
5.select 语法带出第一笔题目(tag)

在每按一次Button就依 tag select
并重新记录上、下一笔的Button tag

 




挖出答案的难度,取决提问的深度!
献花 x1 回到顶端 [2 楼] From:台湾中华电信 | Posted:2010-08-11 12:02 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.082972 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言