1、客户端要从数据库中随机提取几个记录,记录不能重复,希望在应用程序服务器中先随机产生几个记录,再把记录返回到客户端,(这是考试系统,随机产生试题),怎么实现呢?  2、在D7中,怎么aggregate字段怎么用不了呢?老是产生“NUll”型数据结果

解决方案 »

  1.   

    1,作个题库,题日数为N,这相数可以在客户端用记录条数取到。
    从中取M,M《N道题,先确定题号,再一次性取出。select * from tblname where 
     题号 IN(题号1,题号2,.......)
    2,.....
      

  2.   

    现在的问题是 每个人的题目是不一样的,要随机产生。
    A人是1,3,5,6,7题,B人可能是1,2,5,6,7 不要求一样还有: 我要提取具体哪条记录如何写SQL语句,比如我想要第5条记录
      

  3.   

    做个题号字段嘛。比如说题号是1,2,3,4,5,.......
    你在前台可以取得题目数,也就是最大题号可以取到。select count(*) as MaxNum from tblname然后你根据MaxNum大小产生1到MaxNum 的随机数就行了啊。如果你取的随机数是:3,8,5,6,4你的SQL可以这样写:
    select * from tblname where  题号字段名 IN(3,8,5,7,9)
    还有: 我要提取具体哪条记录如何写SQL语句,比如我想要第5条记录
    数库是逻辑表,没有真正的第几条记录的概念,看你怎么排序了。你可以在你的排序基础上根据一个关键字段判断哪个是第五条。按关键字段来取就行了。(关键字段唯一,可用题号做关键字段)
     
      

  4.   

    一、加题号
    二、用rand函数
      

  5.   

    1、   select * from  ASP
          where (题号 IN 1,3,5,7,9)) AND (试卷编号=1) 可以运行。
    2、 
      str:=trim(edit2.Text);
      adoquery2.Close;
      adoquery2.SQL.Clear;
      ssql:='select * from ASP where (试卷编号=1) and (题号 IN ('+str+'))';
      adoquery2.Open;
      这样不设参数,str:='1,3,5,7,9',题号是integer ,可以完成任务。
    3、
    现在要在adoquery2中写入参数
    select * from  ASP
    where (题号 IN (:tihao)) AND (试卷编号=1) adoquery2.Parameters[0].Value:=edit1.text;运行后,返回空数据集,用的是D7 ,请问错在哪里?
      

  6.   

    你可以先在数据库中统计出符合条件记录的数num,然后利用随机函数在1到num中随机抽取你需要的记录数