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

首頁 > 數據庫 > Access > 正文

MS SQL Server和Access分別取得隨機記錄

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

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

一、在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() 這條語句!隨機因子就是從這里產生的。

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

由于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;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产av一级毛片 | 看一级黄色大片 | 日韩欧美在线中文字幕 | 欧美区亚洲区 | 午夜激情视频 | 久久精品二区 | 国产精品99久久免费观看 | 日韩欧美视频在线 | 久久伊人一区 | 日本久久久一区二区三区 | 成人爽a毛片一区二区免费 美女一级毛片 | av片免费看| 91久久香蕉国产日韩欧美9色 | 香蕉久久一区二区不卡无毒影院 | 精品久久99 | 日本h视频在线观看 | 综合色婷婷一区二区亚洲欧美国产 | 亚洲成av人片一区二区三区 | 午夜精品一区二区三区在线 | 岛国一区 | 免费视频色 | 精品国产成人 | 一区二区国产精品 | 免费一级片 | av在线影院| 亚洲激情综合网 | 国产精品免费一区二区 | www.操.com| 国产欧美一区二区精品性色 | 欧美精品一区二区三区一线天视频 | 欧美日韩一区二区视频在线观看 | 亚洲国产成人精品女人久久久 | 国产噜噜噜噜久久久久久久久 | 久久小视频 | 韩国精品在线 | 四虎永久网址 | 国产精品成人3p一区二区三区 | 亚洲国产一二区 | 日本一区视频在线观看 | 五月婷婷六月情 | 欧美日韩视频在线第一区 |