看到經常有人問這個問題。又到網上找了些看,覺得寫得不滿意。
大多讀取記錄到數組里去抽取。昨天又看到人寫,心血來潮就順手想了個,個人認為這種方法應該錯吧,呵呵。剛好20行~_~
實現方法:
1。通過recordset游標可移動的特性,在已打開記錄集里移動到隨機位置讀取記錄。而且可以將就使用頁面中已打開的RS對象。
2。將出現過的隨機數保存到一個字符串中,通過instr函數來檢查是否重復,重復則遞歸調用函數至不重復。
數據庫打開查詢若干,省略... ...Set rs = Server.CreateObject("Adodb.RecordSet")rs.open sql,conn,1,1DIM AppearedCall DisRndRecord(10,rs.recordCount)'調用函數該位置顯示記錄'################SUBS################'#DisRndRecord(DisNum,rsBound)'#參數DisNum:顯示數量'#參數rsBound:隨機數產生范圍Sub DisRndRecord(DisNum,rsBound) DIM i,ThisRnd If rsBound < DisNum Then DisNum = rsBound'記錄總數小于要抽取記錄條數的情況 For i = 0 To DisNum - 1 ThisRnd = GetRnd(rsBound)'取得一個不重復的隨機數 rs.Move(ThisRnd)'游標移動到隨機數位置數讀取 Response.Write("<br>("&rs("id")&")"&rs("Title")) rs.Move(-ThisRnd) NextEnd Sub'# 函數GetRnd(bound)返回一個不重復的隨機數字'#參數bound:隨機范圍Function GetRnd(bound) DIM ranNum Randomize() ranNum=int(bound*rnd) If Instr(Appeared,"["&ranNum&"]") Then'產生的隨機數是否出現過 ranNum = getRnd(bound) End If Appeared = Appeared & "["&ranNum&"]"'記錄已出現的隨機數 GetRnd = ranNumEnd Function
新聞熱點
疑難解答