a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > 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 | 国产亚洲欧美在线 | 国产视频久久久久 | 久久精品久久久久久 | 狠狠狠狠狠狠 | 一级黄色片子免费看 | 国产精品视频综合 | youjizz国产 | 精品国产31久久久久久 | 在线观看视频一区 | 国产亚洲一区二区三区在线观看 | 男女视频在线观看 | av在线免费观看网站 | 羞羞视频免费网站 | 久在线观看 | 国产欧美日韩精品一区二区三区 | 日韩一区二 | 操操操操操操操操操操操操操操 | 94国产精品 | 欧美三级在线播放 | 美女久久| 午夜精品一区二区三区在线播放 | 91视频免费看 | 中文字幕在线观看精品视频 | 91国产精品 | 欧美日韩高清 | 91偷拍精品一区二区三区 | 国产精品无码久久久久 | 97成人在线 | 久久精品一级 | 久久精品国产免费看久久精品 | 亚洲综合第一页 | 色花av| 黄色日批视频 | 亚洲精品欧美视频 | 成人精品视频99在线观看免费 | 一区二区三区四区av | 久久国产精品99久久久久久老狼 | 干干干操操操 | 91久久爽久久爽爽久久片 |