请教如何从数据库中随机的抽取N条记录并导入到另一个表中?(50分)

  • 主题发起人 主题发起人 duculer
  • 开始时间 开始时间
D

duculer

Unregistered / Unconfirmed
GUEST, unregistred user!
最近在做一个出题系统,想要实现从一个题库的表中随机抽取N道题目,并且有不同的等级
然后导入到另一个临时题库中,导入前需要清空该表,请教该怎样实现??谢谢 ~~~:)
 
你另外建一个临时题库表,每次导放前清空该表记录。
delete from tablename就行了。
 
那按不同级别随机抽题呢?
 
我觉得你首先有一个表,记录的是题目的编号,类型(比如说选择题,计算题),难度系数.
你用另外一个表存放选出来后的题,(可能只需记录题号).
每次从前一个表选出以后,清空后一个表,然后填入,TQUERY等很多都能实现的.
呵呵,仅供参考,好象有点答非所问.
 
随机的选,没有一定的条件?
我建议你写一个随机的表达式,比如说取一个系统时间,再转换类型,让其做一系列的运算,结果取整,
所得的整数就算是要取的条件。
 
To duculer
我的做法是按试卷的要求给出试题各题型的难度和能力层次的分布,随机抽取试题并满足分布要求。
抽出的试题的各属性存到stringgird中--对其实行排序、删除、添加、查阅、清空、统计等操作。
如满意可输出试卷。
部分源码:
StringGrid1.RowCount:=1;//清空
......

Query1.SQL.Add('Where BM like :Q1 and TX like:Q2 and ND like :Q3 ');
Query1.ParamByName('Q1').AsString := BMtemp + '%';//试题编码
Query1.ParamByName('Q2').AsString := TXtemp; //题型
Query1.ParamByName('Q3').AsString := NDtemp; //难度
if Query1.Prepared = False then Query1.Prepare;
dmod.Query1.Open;
st := Query1.RecordCount;
s0 := s0 + Ntemp; //要抽取的试题数量
f := 1;
while (f <= Ntemp) and (st > 0) do begin //
Num := Random(st) + 1;
Query1.first;
Query1.MoveBy(Num - 1);
ok:=true;
with StringGrid1 do
begin
rec := Query1.Fields[0].AsString;//试题编码
for i := 1 to Rowcount - 1 do
if cells[1, i] = rec then ok := false;
if ok then begin
Rowcount:=Rowcount+1;
cells[1,Rowcount-1]:=ren;
.......
f:=f+1;
end;
end;
end;
......
 
to linsb
你做的好像要求用户的干预,有没有这样的算法:
不要用户的干预,根据用户选择的各题型的数量,总分数,试卷整体的难度自动组卷,然后
在给用户浏览,打印!!
 
不需要求用户的干预,根据用户选择的各题型的数量,总分数,试卷整体的难度自动组卷,然后
在给用户浏览,打印!!
我给你的是核心模块,所述功能完全可自己开发!
 
后退
顶部