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

ZDNet软件频道 时间:2009-11-17 作者:赛迪网 010032 | 天新网 我要评论()
本文关键词:数据库 Mssql SQL SQL Server
此段代码无论是速度、均衡性,还是随机度都非常好,也不会出现抽到重复记录的可能。

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

一、在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知识点="+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;

 

数据库

Mssql

SQL

SQL Server


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134