廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 3943 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為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.015537 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言