和分别可取呢
此段代码无论是速度、均衡性,还是随机度都非常好,也不会出现抽到重复记录的可能。
尽管经济下行压力很大 一、在SQL Server2000中生成随机记录的最好办法:
withtk_querydobeginClose;ear;d(\"selecttop\"+inttostr(st_count)+\",标准答案from题库表tk\");d(\"wherepidisnullandtk.题型=\"+quotedstr(tx)+\"andtk.知识点=\"+quotedstr(zsd));d(\"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_t_Random_ID(constkcdm,tx,zsd,nyd,t_count:string):string;varsl:TStrings;i,ii,kk:integer;begintryResult:=\"\";sl:=eate;eate(nil)dobegintryConnection:=Adoconnection1;xt:=\"selectIDfrom题库表wherepidisnulland题型=\"+quotedstr(tx)+\"and知识点=\"+quotedstr(zsd)+\"and难易度=\"+quotedstr(nyd)+\"and课程号=\"+quotedstr(Kcdm);Open;d(Fields[0].AsString);Next;end;Close;finallyFree;end;end;//endwith....unt=0thenExit;fori:=0toStrToIntDef(t_count,0)-1dobeginkk:=unt;//随机因子Randomize;ii:=Random(kk);//取得随机数ifResult=\"\"thenResult:=rings[ii]elseResult:=Result+\",\"+rings[ii];lete(ii);//为了避免有可能出现的重复,此ID被抽取过后把它删了unt=0then//如果无题可抽了退出循环Break;end;Result:=\"(\"+Result+\")\";//给结果串前后加上(......),最终形成(24,36,5,89,72,3,6,1....)的串样ee;end;end;//=================课程号,题型,知识点,难易度,题量functionTTest_Srv_t_Random_Sql(constkcdm,tx,zsd,nyd,t_count:string):string;beginResult:=Get_Random_ID(kcdm,tx,zsd,nyd,t_count);ifResult\"\"thenResult:=\"selecttop\"+t_count+\",标准答案from题库表tkwhereidin\"+ResultelseResult:=\"selecttop\"+t_count+\",标准答案from题库表tkwhere1=1\";end;//以下为调用上述函数生成随机抽题的代码片断.......withtk_querydobeginClose;ear;xt:=Get_Random_Sql(Kcdm,tx_str,zsd_str,nyd_str,txzsd_count_str);Open;end;
木门加盟排行榜拉萨妇科习惯性流产
吉安白癜风专治医院