access

推荐列表 站点导航

当前位置:首页 > 数据库 > access >

SQL Server和Access分别获取随机记录

来源:网络整理  作者:网友投稿  发布时间:2020-12-29 18:39
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

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

SQL Server和Access分别获取随机记录

2020-12-29 编辑:网友投稿

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

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

相关文章

风云图片

推荐阅读

返回access频道首页