风流少妇按摩来高潮-97国产精华最好的产品亚洲-国产精成人品日日拍夜夜免费-亚洲精品白浆高清久久久久久

當前位置:幫助 >> 高級教程

ACCESS中如何使得order by rnd(id)真正實現隨機抽取數據庫中記錄

發布日期:2020/8/22 11:46:14 訪問次數:6670

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,從而達到產生不同隨機序列的目的。經過測試,問題解決。示例代碼如下:        

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

代碼說明:SQL語句中的Rnd的參數是一個數值表達式,必須包含表中的一個字段(最好是主鍵),因為變量返回的是一個隨機的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返回的值與前次相同,從而返回的查詢結果相同。
微信
QQ
電話
13400472755
返回頂部
主站蜘蛛池模板: 我和公发生了性关系视频| 久久久久亚洲av无码专区体验| 法国性经典xxxxhd| 大黑人交xxxx18视频| 日日av拍夜夜添久久免费| 国产成人精品怡红院在线观看| 欧美性群另类交| 成人免费ā片在线观看| 精品人妻av无码一区二区三区| 六月丁香综合在线视频| 人妻妺妺窝人体色www聚色窝| 欧洲熟妇色xxxx欧美老妇多毛| 亚洲精品无码永久在线观看男男| 亚洲 丝袜 另类 校园 欧美| 一群黑人大战亚裔女在线播放| 精品少妇人妻av无码专区| 漂亮人妻被黑人久久精品| 最近中文字幕免费手机版| 国产av一区二区三区| 精品国产精品国产偷麻豆| 精品国际久久久久999波多野| 777久久精品一区二区三区无码| 国内精品久久久久久99| 内射干少妇亚洲69xxx| 无遮挡又黄又刺激又爽的视频| 亚洲成av人影院| 国产色综合久久无码有码| 性无码专区无码| 凹凸国产熟女精品视频app| 亚洲熟妇av一区二区三区下载| 美女内射毛片在线看免费人动物| 一个人在线观看免费视频www| 亚洲欧洲日产国码综合在线| 国产精品9999久久久久仙踪林| 日韩精品无码人妻免费视频| 伊人色综合久久天天五月婷| 亚洲av无码专区亚洲av网站| 男女猛烈拍拍拍无挡视频| 男女一边摸一边做爽爽的免费阅读 | 亚洲日本一区二区三区在线| 久久亚洲春色中文字幕久久久|