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