首先非常感谢你能来看我的贴子我涉及DELPHI不深在ADO方面知道的很少我最近在写数据库的一个考试随机生成测试评分系统,摆在我的面前的问题是:我怎么样能把题库中的东西 随机提取到一张临时表中,等做完了后再清空临时里面
表中的数据比如数据库(exam)中有两张表是:TK(填空题)、XZ(选择题),各有100道题目
其中表的结构是
TK--->tihao,timu,answer,lx(题目类型)
XZ--->tihao,timu,answer1,answer2,answer,lx(题目类型)
TEMP--->tihao,timu,answer1,answer2,answer ,lx(题目类型)现在想把TK中选15道,XZ中30道,放到TEMP表中,都放进去。并且是随机抽去的。怎样做呢?想到这里我又想到个问题,怎么样在窗体中区分开两种不同的类型题目呢?

解决方案 »

  1.   

    select * into #lsb from yourtable 
    select * from #lsb 
    drop #lsb
    以上是实现的基本思路,其它要跟你的实际情况补上相应的条件#是局部临时表的意思,若用##则是全局临时表!
      

  2.   

    KNIFE_S说的对,思路我也想过,问题在于我不知道怎么写这样的语句。三楼的朋友说的我试试!
      

  3.   

    select convert(char(2),right(left(rand(DATEPART(ms, GETDATE()) ) *1000,6),2),121)用这句去随即数去等于你表里的顺序号,这段话是100之内的随即数你的库里存多少你可以自己在DATEPART(ms, GETDATE())改成你顺序好的MAX(),写个存储过程中间用UNION ALL把你要取的3种东西连接,取15个时候就写FOR循环依次类推并把生成的编号付值给一列就成了1-15行是一种16-45行是种,最后存进TEMP表,取的时候就是1-15号是一个类型16-45行是一个类型,每次取的时候先清空TEMP表就可以实现你的功能了,具体怎么写你试试吧不难!
      

  4.   

    帮别人也做过这样的一个东东,得到随机题的大致思路如下:
    1.确定你的某种题型的题量 x
    2.再取得你的系统中有多少如此题型的题量 y,并建立一个数组aa(y)对应每个题的ID
    3.使用random在1-y的范围内取得x个随机数
    4.以上面取得的随机数在作为aa()数组的下标。第二个问题:
    TK(填空题需要用户填写当然需要Tedit),XZ(单选择题需要Option,多选择题则需要checkobx)
      

  5.   

    楼上的同学,用random生成的随机数有什么好办法剔除重复的数值呢?它总会有出现重复数的时候吧?
      

  6.   

    你的每个表的题号应该是主键把,先取得最大题号,在这个范围内生成一个随机的集合,这个集合实际就是一string,象'(1,5,12,45)'这样,剔出重复的题号,这很容易,然后用
    select xxxx into #temp from 表 in 集合
    生成temp表
      

  7.   

    少写了俩字
    select xxxx into #temp from 表 where 题号 in 集合