麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > Access > 正文

MS SQL Server和Access分別取得隨機記錄(隨機抽題)之完美篇

2024-09-07 19:04:48
字體:
來源:轉載
供稿:網友

這是博主用在一個項目上的源碼片斷,無論是速度、均衡性,還是隨機度都非常好,當然這更不可能抽到重復記錄了。

一、在MS SQL Server 2000中生成隨機記錄的最好辦法:

with tk_query do

begin

Close;

sql.clear;

sql.Add('select top ' inttostr(st_count) ' tk.ID,標準答案 from 題庫表 tk');

sql.Add('where pid is null and tk.題型=' quotedstr(tx) ' and tk.知識點=' quotedstr(zsd));

sql.add('and tk.難易度=' quotedstr(nyd) ' and tk.課程號=' quotedstr(kcdm) ' order by newid()');

Open;

end;

注:關鍵就是 order by newid() 這條語句!隨機因子就是從這里產生的。

二、數據庫為Access 2000時生成隨機記錄的最好辦法:

由于Access中沒有newid()這一隨機函數,故要想在Access中直接由SQL語句生成我們所希望的隨機記錄不太可能,因此我們只好在開發語言中生成合適SQL語句,讓Access執行了(博主的開發工具為Delphi)。

//獲取題庫表中的隨機ID,組成一個字符串,類似這樣 (3,8,2,25,49,1,7,10,6,83....)

//kcdm:課程代碼,tx:題型,zsd:知識點,nyd:難易度,t_count:某一題型某一知識點某一難度下的要抽取的題量

function TTest_Srv_RDataForm.Get_Random_ID(const kcdm,tx,zsd,nyd,t_count:string):string;

var

sl: TStrings;

i,ii,kk: integer;

begin

try

Result := '';

sl := TStringList.Create;

with TADOQuery.Create(nil) do

begin

try

Connection := Adoconnection1;

SQL.Text := ' select ID from 題庫表 where pid is null and 題型=' quotedstr(tx)

' and 知識點=' quotedstr(zsd) ' and 難易度=' quotedstr(nyd)

' and 課程號=' quotedstr(Kcdm);

Open;

while not Eof do

begin

sl.Add(Fields[0].AsString);

Next;

end;

Close;

finally

Free;

end;

end; //end with ....

if sl.Count=0 then

Exit;

for i := 0 to StrToIntDef(t_count,0)-1 do

begin

kk := sl.Count;//隨機因子

Randomize;

ii := Random(kk); //取得隨機數

if Result='' then

Result := sl.Strings[ii]

else

Result := Result ',' sl.Strings[ii];

sl.Delete(ii); //為了避免有可能出現的重復,此ID被抽取過后把它刪了

if sl.Count=0 then //如果無題可抽了退出循環

Break;

end;

Result := '(' Result ')'; //給結果串前后加上(......),最終形成(24,36,5,89,72,3,6,1....)的串樣

finally

sl.Free;

end;

end;

//=============================================== 課程號,題型,知識點,難易度,題量

function TTest_Srv_RDataForm.Get_Random_Sql(const kcdm,tx,zsd,nyd,t_count:string):string;

begin

Result := Get_Random_ID(kcdm,tx,zsd,nyd,t_count);

if Result <> '' then

Result := ' select top ' t_count ' tk.ID,標準答案 from 題庫表 tk where id in ' Result

else

Result := ' select top ' t_count ' tk.ID,標準答案 from 題庫表 tk where 1=1 ';

end;

//以下為調用上述函數生成隨機抽題的代碼片斷

.......

with tk_query do

begin

Close;

sql.Clear;

sql.Text := Get_Random_Sql(Kcdm,tx_str,zsd_str,nyd_str,txzsd_count_str);

Open;

end;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品一区二区三区日本 | 成人午夜视频免费 | 毛片福利 | 免费看欧美黑人毛片 | 欧美成年性h版影视中文字幕 | 亚洲综合色视频在线观看 | 色婷婷av一区二区三区久久 | 久久免费视频在线 | 91精品国产乱码久久桃 | 一区二区三视频 | 成人在线观看一区 | 可以免费看的av | 视频一区 日韩 | 亚洲小视频网站 | 欧美国产第一页 | h色在线观看 | 毛片大全| 亚洲欧美在线视频免费 | 女人裸体让男人桶全过程 | 欧美一级网 | 国产69精品久久久久久野外 | 久久久久久久久国产 | 国产成人自拍av | 九九热精品免费 | 成人做爽爽爽爽免费国产软件 | 视频一区二区国产 | 免费亚洲视频在线观看 | 成人午夜精品久久久久久久3d | 国产精品99爱 | 在线观看视频亚洲 | 天天骑夜夜操 | 国产91九色 | www.91sese | 毛片毛片 | 国av在线| av在线免费看网址 | 国产自在线 | 精品国产乱码久久久久久久 | 欧美视频首页 | 免费观看亚洲视频 | 欧美亚洲国产成人 |