這是博主用在一個項目上的源碼片斷,無論是速度、均衡性,還是隨機度都非常好,當然這更不可能抽到重復記錄了。
一、在MSSQLServer2000中生成隨機記錄的最好辦法:
withtk_querydo
begin
Close;
sql.clear;
sql.Add('selecttop' inttostr(st_count) 'tk.ID,標准答案from題庫表tk');
sql.Add('wherepidisnullandtk.題型=' quotedstr(tx) 'andtk.知識點=' quotedstr(zsd));
sql.add('andtk.難易度=' quotedstr(nyd) 'andtk.課程號=' quotedstr(kcdm) 'orderbynewid()');
Open;
end;
注:要害就是orderbynewid()這條語句!隨機因子就是從這裡產生的。
二、數據庫為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:某一題型某一知識點某一難度下的要抽取的題量
functionTTest_Srv_RDataForm.Get_Random_ID(constkcdm,tx,zsd,nyd,t_count:string):string;
var
sl:TStrings;
i,ii,kk:integer;
begin
try
Result:='';
sl:=TStringList.Create;
withTADOQuery.Create(nil)do
begin
try
Connection:=Adoconnection1;