重数据库中取随机纪录,数据库中记录不多(固定的120条),不用担心速度问题,40分(40分)

  • 主题发起人 主题发起人 xiaolaoda
  • 开始时间 开始时间
X

xiaolaoda

Unregistered / Unconfirmed
GUEST, unregistred user!
有两种情况,《一〉 表中有唯一标示的id 字段,
《二》 表中没有唯一标示的字段的情况,
form上还有一timer1控件
并且上述两种情况,每一秒,随机取一条纪录,但取过的纪录不取,直到全部取完,不管大家
用什么方法实现,只要能成功就行
 
这个问题就是随机产生一个120以内的不重复的随机数
给你个思路:
1 建立一个计算字段,内容为RECNO
2 使用随机函数产生随机数
3 每产生一个随机数就加到一个列表中(TStrings)
4 下一个随机数产生后判断是否已经在列表中(TStrings.Indexof)若在,重新产生
5 根据产生的不重复的随机数设定Table的Filter
应该可以满足你的要求
 
建议建一个临时表,把表中的数据考过去,取一条删一条,取得时候是随机的就可以

 
为什么第一次随机值老是0.
例如 我rondom(120),为什了第一的值一定是0,从第二次起才开始随机。
,还有就是delphiland,你说的是取到的纪录,放到一新表中(临时的),下一次取得纪录
和新表中纪录比较,如果bof=eof则存再新表中,否则再在原来表中随机取,是这个意思吗?
,这样开始还可以,到最后取得重复的纪录概率太大了,
请您说清楚点,我这方面很菜的,分不够,我在加。
 
procedure TForm1.Button1Click(Sender: TObject);
Var
RandList:TStrings;
RandValue,i,iPos:integer;
begin
RandList:=TStringList.Create;
Randomize;//先要初始化
for i:=1 to 120 do
begin
Repeat
RandValue:=Random(120);
iPos:=RandList.IndexOf(InttoStr(RandValue));
if iPos=-1 then RandList.Add(InttoStr(RandValue));
until iPos=-1;
ListBox1.Items.Add(InttoStr(RandValue));//ListBox1用来显示取得的随机数
end;
RandList.Free;
end;
 
什么都不说了 delphiland 你是我的偶像,给你分!!!
 
后退
顶部