2007-06-12

SQL Server和Access分别可取得随机记录

来源: 本站收集整理 作者:佚名 评论 0 条
 

此段代码无论是速度、均衡性,还是随机度都非常好,也不会出现抽到重复记录的可能。

一、在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:某一题型某一知识点某一难度下的要抽取的题量


(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:小型商业程序应用选SQL Server还是Access  
下一篇:帮你分析如何确定SQL Server栏中最大值
    评论加载中…
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知识点=' quotedstr(zsd) 'and难易度=' quotedstr(nyd) 



'and课程号=' quotedstr(Kcdm);



Open;



whilenotEofdo



begin



sl.Add(Fields[0].AsString);



Next;



end;



Close;



finally



Free;



end;



end;//endwith....



ifsl.Count=0then



Exit;



fori:=0toStrToIntDef(t_count,0)-1do



begin



kk:=sl.Count;//随机因子



Randomize;



ii:=Random(kk);//取得随机数



ifResult=''then



Result:=sl.Strings[ii]



else



Result:=Result ',' sl.Strings[ii];



sl.Delete(ii);

//为了避免有可能出现的重复,此ID被抽取过后把它删了



ifsl.Count=0then

//假如无题可抽了退出循环



Break;



end;



Result:='(' Result ')';

//给结果串前后加上(......),最终形成(24,36,5,89,72,3,6,1....)的串样



finally



sl.Free;







end;



end;



//=================课程号,题型,知识点,难易度,题量



functionTTest_Srv_RDataForm.Get_Random_Sql

(constkcdm,tx,zsd,nyd,t_count:string):string;



begin



Result:=Get_Random_ID(kcdm,tx,zsd,nyd,t_count);



ifResult<>''then



Result:='selecttop' t_count 'tk.ID,

标准答案from题库表tkwhereidin' Result



else



Result:='selecttop' t_count 'tk.ID,

标准答案from题库表tkwhere1=1';



end;



//以下为调用上述函数生成随机抽题的代码片断



.......



withtk_querydo



begin



Close;



sql.Clear;



sql.Text:=Get_Random_Sql(Kcdm,tx_str,zsd_str,nyd_str,txzsd_count_str);



Open;

end;
共2页: 上一页 1 [2] 下一页
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号