當前位置:編程學習大全網 - 源碼下載 - delphi 如何隨機抽取access庫中的壹條數據

delphi 如何隨機抽取access庫中的壹條數據

同事要做 答題系統隨機抽獎,原來是 SQL數據庫的 今天是小型的 改成了access 找隨機函數,問我 我也只記得有個rnd 呵呵 具體的也想不起來,網上搜搜了下 ,結果找到了這遍總結呵呵 不過也 想到了最簡單的 方法 .

select top 10 from judge order by rnd(judge_id)

以下轉貼:

-----------------------------------------

檢查了壹些貼子對於MS SQL數據庫壹般可以采用這樣的語句:

select top 50 * from someTable order by NewID()

但是如果是Access數據庫的話似乎沒有什麽好的解決方法。

方法壹:有人用如下代碼以記錄總數為極大值來首先提取出指定數量的隨機數,然後以這些隨機數做為記錄ID。

dim n,j

dim su()

dim a,b,k

b=myrs.RecordCount

Randomize

redim su(index_N)

su(1)=Int((b * Rnd) + 1)

for n=2 to index_N

a=Int((b * Rnd) + 1)

for j=1 to n

do while a=su(j)

a=Int((b* Rnd) + 1)

j=1

loop

next

su(n)=a

next

這種方式有壹些問題,就是當ID不是連續的話,有可能某些隨機數不存在ID序列當中。另外ID的最大值與總的記錄值不壹定相等,這樣有些記錄ID會永遠被忽略。

方法二:有人采用壹條SQL語句解決此問題

select top 50 * from table order by int(rand()*50)

如果這條語句可行的話是個不錯的方法。我測試這條語句並沒有通過,如果有人知道是哪有問題請告訴我,非常感謝。

方法三:有這樣壹種方法,我覺的不錯。

yourstr="*1*3*4*6*12*...."

sql="select top 10 * form yourdb where instr('*'&id&'*','"&yourstr&"')<>0"

yourstr可以生成隨機數多壹點大於所限定抽取的隨機數為好。這樣可以排除記錄不足的情況。

方法四:

<%

n=10 ''取任意10條記錄

set rs = server.CreateObject ("adodb.recordset")

sql = "select * from table"

rs.open sql,conn,1,1

count=rs.recordcount ''記錄總數

IF Count<>empty Then

Randomize

for i = 1 to n ''循環n次

num=Fix(Rnd*count) ''num便是隨機產生的記錄行數,用Fix(),使其不會大於count值。

rs.move num ''移到改隨機行

Response.write rs(0) ''出該條記錄

rs.movefirst ''別忘了再把指針移到第壹條

next

End IF

rs.close

set rs = nothing

%>

今天研究了些取access數據庫隨機記錄問題,這是這我自己搜集整理的方法。大家有沒有高見,可以告訴我,或者我總結的東東本身有誤,也可以幫我修正。

檢查了壹些貼子對於MS SQL數據庫壹般可以采用這樣的語句:

select top 50 * from someTable order by NewID()

但是如果是Access數據庫的話似乎沒有什麽好的解決方法。

方法壹:有人用如下代碼以記錄總數為極大值來首先提取出指定數量的隨機數,然後以這些隨機數做為記錄ID。

dim n,j

dim su()

dim a,b,k

b=myrs.RecordCount

Randomize

redim su(index_N)

su(1)=Int((b * Rnd) + 1)

for n=2 to index_N

a=Int((b * Rnd) + 1)

for j=1 to n

do while a=su(j)

a=Int((b* Rnd) + 1)

j=1

loop

next

su(n)=a

next

這種方式有壹些問題,就是當ID不是連續的話,有可能某些隨機數不存在ID序列當中。另外ID的最大值與總的記錄值不壹定相等,這樣有些記錄ID會永遠被忽略。

方法二:有人采用壹條SQL語句解決此問題

select top 50 * from table order by int(rand()*50)

如果這條語句可行的話是個不錯的方法。我測試這條語句並沒有通過,如果有人知道是哪有問題請告訴我,非常感謝。

方法三:有這樣壹種方法,我覺的不錯。

yourstr="*1*3*4*6*12*...."

sql="select top 10 * form yourdb where instr('*'&id&'*','"&yourstr&"')<>0"

yourstr可以生成隨機數多壹點大於所限定抽取的隨機數為好。這樣可以排除記錄不足的情況。

方法四:

<%

n=10 ''取任意10條記錄

set rs = server.CreateObject ("adodb.recordset")

sql = "select * from table"

rs.open sql,conn,1,1

count=rs.recordcount ''記錄總數

IF Count<>empty Then

Randomize

for i = 1 to n ''循環n次

num=Fix(Rnd*count) ''num便是隨機產生的記錄行數,用Fix(),使其不會大於count值。

rs.move num ''移到改隨機行

Response.write rs(0) ''出該條記錄

rs.movefirst ''別忘了再把指針移到第壹條

next

End IF

rs.close

set rs = nothing

%>

今天研究了些取access數據庫隨機記錄問題,這是這我自己搜集整理的方法。大家有沒有高見,可以告訴我,或者我總結的東東本身有誤,也可以幫我修正。

  • 上一篇:JSF請求處理過程(二) 請求處理過程總覽
  • 下一篇:javascript什麽框架比好用?
  • copyright 2024編程學習大全網