赛迪网 > IT技术 数据库 > 精彩更新
  IT资讯搜索
 
IT产品搜索

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

发布时间:2007.06.11 04:52     来源:赛迪网    作者:010032














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

一、在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;

(责任编辑:王瑞)

相关文章:

如何自动处理SQL Server 2005表格数据

如何在多维数据集中设置访问权限


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· SQL Server数据库中处理空值时常见问题 (06-07) · 完全讲解 使用MSCS建立SQL Server集群 (06-07)
· 如何使用SQL Server数据库中查询累计值 (06-06) · 调整重心 从IIS到SQL Server数据库安全 (06-06)
· 教你如何缩小SQL Server数据库日志文件 (06-06) · SQL Server为希尔顿打造完美自定义软件 (06-05)
· 解析SQL Server数据应用在不同的数据库中 (06-05) · 用JavaBean编写SQL Server数据库连接类 (06-01)
· 帮你完全了解SQL Server 2000视图问题 (05-30) · 教你如何在SQL Server计算机列和平均值 (05-25)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管