SQL Server和Access分别获取随机记录
此段代码无论是速度、均衡性,还是随机度都非常好,也不会出现抽到重复记录的可能。
一、在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;
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/sql/access/10775.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
Windows 7添加Access数据源
时间:2020-12-29
-
2012年上半年计算机二级
时间:2020-12-08
-
2014年计算机二级考试Acc
时间:2020-12-08
-
ACCESS数据库多表查询技巧
时间:2020-12-08
-
Access教程_access数据库教程
时间:2020-12-08
-
Access2007教程 怎样在设计视
时间:2020-12-08
-
Access2007表的数据表教程
时间:2020-12-08
-
如何在Access中创建数据表
时间:2020-12-08
热门文章
-
在Access 2007中保护Access密码和进行加密
时间:2020-12-07
-
如何学会对ACCESS数据库的性能进行分析
时间:2020-12-08
-
Access2007数据表的操作
时间:2020-12-07
-
在Access2007表中添加和删除字段
时间:2020-12-07
-
Access2000教程:Access导入数据库文件
时间:2020-12-07
-
Windows 7添加Access数据源
时间:2020-12-29
-
Access2007教程 怎样在设计视图下创建查询
时间:2020-12-08
-
Access2000教程:Access 如何加密/解密数据库
时间:2020-12-07
-
在Access2007中使用“多值”实现文字的su
时间:2020-12-07
-
Access教程_access数据库教程_access数据库入
时间:2020-12-08
