aspでsqlとaccessデータベースをランダムに10本の記録コードnewid()を取ります。


MSSQL:select トップ 10 * from [テーブル order by newid()ACCESS: 

' rs.move   
' 10   
n = 10  
' 10, 10,  if n>10 rs.recordCount then n=rs.recordCount  
dim ranNum  
for i = 1 to n  
Randomize()  
ranNum = int(rs.recordCount*rnd)+1 '   
rs.Move ranNum '   
response.write i & "-" & rs("title") & "<br />" '   
rs.Move -ranNum  
next  
'……  
       
これでいいです。当然、重複した記録が取れるかもしれません。乱数が発生した文を修正すればいいです。一つの変数を宣言して、すでに発生した乱数を保存します。新たな乱数が発生した場合は、すでに発生したかどうかを先に判断して、発生したら再生成すればいいです。これは比較的簡単です。instrなどで解決できます。         考え方はこうです。他の人は自分でやってみましょう。 重複して読み取らない方法は一つの乱数だけを生成して、この乱数の後のN個の記録を順次読み出すことです。もちろん、判定も書きます。乱数は総記録数より小さいです。記録の量を読みます。 

'……  
dim n,ranNum  
n = 10  
Randomize()  
ranNum = rs.recordCount-n  
if ranNum<1 then ranNum=1  
ranNum = int(ranNum*rnd)+1  

rs.Move ranNum  
for i=1 to 10  
response.write i & "-" & rs("title") & "<br />" '   
rs.MoveNext '   
next  
'……  
は、乱数を繰り返さないように簡単なFunctionを自分で書くことを提案する。