此段代碼無論是速度、均衡性,還是隨機度都非常好,也不會出現抽到重復記錄的可能。
一、在SQL Server2000中生成隨機記錄的最好辦法:
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執行了。
//獲取題庫表中的隨機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; SQL.Text:='selectIDfrom題庫表 wherepidisnulland題型='+quotedstr(tx)+ 'and知識點='+quotedst