我的随机函数为什么总是指向同一条记录(急急!帮帮我,分不够可以加) 你可以先单独调试randomize函数,看是不是每次Random都返回2 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 procedure TForm1.FormCreate(Sender: TObject);var i:integer;begin adotable1.Open; randomize; i:=random(adotable1.RecordCount);(是不是要多几次用random,如用的话,如何用) //i:=random(adotable1.RecordCount); //while i>adotable1.RecordCount do // i:=i-3; adotable1.RecNo:=i; adotable1.First; adotable1.MoveBy(adotable1.RecNo); end;你两次运行程序取的值当然也是一样的了。因为种子一样。如果你想不一样,可以用当前时间或其它可变的作为种子就可以了。如 procedure TForm1.FormCreate(Sender: TObject);var i:integer;begin adotable1.Open; randomize; i:=random(adotable1.RecordCount);(是不是要多几次用random,如用的话,如何用) //i:=random(adotable1.RecordCount); //while i>adotable1.RecordCount do // i:=i-3; adotable1.RecNo:=i; adotable1.First; adotable1.MoveBy(adotable1.RecNo); end;你两次运行程序取的值当然也是一样的了。因为种子一样。如果你想不一样,可以用当前时间或其它可变的作为种子就可以了。如 procedure TForm1.FormCreate(Sender: TObject);var i:integer;begin adotable1.Open; randomize; i:=random(adotable1.RecordCount);(是不是要多几次用random,如用的话,如何用) //i:=random(adotable1.RecordCount); //while i>adotable1.RecordCount do // i:=i-3; adotable1.RecNo:=i; adotable1.First; adotable1.MoveBy(adotable1.RecNo); end;你两次运行程序取的值当然也是一样的了。因为种子一样。如果你想不一样,可以用当前时间或其它可变的作为种子就可以了。如 帮你UP-------------------------------------------谢谢关注:http://expert.csdn.net/Expert/TopicView1.asp?id=845638 procedure TForm1.FormCreate(Sender: TObject);var i:integer;begin adotable1.Open; randomize; i:=random(adotable1.RecordCount);(是不是要多几次用random,如用的话,如何用) //i:=random(adotable1.RecordCount); //while i>adotable1.RecordCount do // i:=i-3; adotable1.RecNo:=i; adotable1.First; adotable1.MoveBy(adotable1.RecNo); end;你两次运行程序取的值当然也是一样的了。因为种子一样。如果你想不一样,可以用当前时间或其它可变的作为种子就可以了。如 ShowMessage(IntToStr(adotable1.RecordCount)); //测试看看它的值是否正确//请测试如下代码Randomize;adotable1.Open;adotable1.First;adotable1.RecNo := Random(adotable1.RecordCount); ShowMessage(IntToStr(adotable1.RecordCount)); //测试看看它的值是否正确//请测试如下代码Randomize;adotable1.Open;adotable1.First;adotable1.RecNo := Random(adotable1.RecordCount); 你的逻辑有问题,改成:var i:integer;begin adotable1.Open; randomize; i:=random(adotable1.RecordCount);(是不是要多几次用random,如用的话,如何用) adotable1.First; adotable1.MoveBy(i);end; 当你执行adotable1.first时,adotable1.recno就为1了,再执行adotable1.moveby(adotable1.recno),当然只向前移动1了。 是要用多次,我以前用过随机函数random(50000),结果常常一样,后来我就多用几次。这样用就行了。i:=random(adotable1.RecordCount);i:=random(adotable1.RecordCount);i:=random(adotable1.RecordCount);i:=random(adotable1.RecordCount); 楼上说得有道理,正是俺想说的。你的想法很正确,randomize没有错,随机数种子在每次onCreat事件中重建,重复的几率很小。你的错误就在于First之后,RecNo已经改变! 当你执行adotable1.first时,adotable1.recno=1;再执行adotable1.moveby(adotable1.recno),当然只向前移动1了。Randomize;adotable1.Open;adotable1.RecNo := Random(adotable1.RecordCount); 我忘了另外一个方法var i,j:integer;begin i:=random(50000); i:=random(50000); i:=random(50000); i:=random(50000); j:=i mod adotable1.RecordCount;//j是最后取得的随机数。 建议改成:procedure TForm1.FormCreate(Sender: TObject);var i:integer;begin adotable1.Open; randomize; i:=random(adotable1.RecordCount-1); adotable1.RecNo:=i+1;end;或procedure TForm1.FormCreate(Sender: TObject);var i:integer;begin adotable1.Open; randomize; i:=random(adotable1.RecordCount-1); //adotable1.RecNo:=i; adotable1.First; adotable1.MoveBy(i+1);end; 请教虚函数调用方法。。。。。。。。。。。。。。。。。。。。。。。。。 关于开根号的涵数? 求悬停按钮控件的设计思路 有关dspack的问题,请高手指教 急,简单问题。在线等待... 各位大虾!帮忙啊,小弟毕业设计难题,急啊!,在线等! gif89.dll 怎么用的,谁有他的接口呀? ADO方式中,char數據類型自動補空格的問題 DELPHI动态按钮CAPTION的问题 这句怎么编译不通过? 关于按钮的图片翻转问题,请指教,急急 如何使用代码实现主从表的连接?(急)
var
i:integer;
begin
adotable1.Open;
randomize;
i:=random(adotable1.RecordCount);(是不是要多几次用random,如用的话,如何用)
//i:=random(adotable1.RecordCount);
//while i>adotable1.RecordCount do
// i:=i-3;
adotable1.RecNo:=i;
adotable1.First;
adotable1.MoveBy(adotable1.RecNo); end;你两次运行程序取的值当然也是一样的了。因为种子一样。
如果你想不一样,可以用当前时间或其它可变的作为种子就可以了。如
var
i:integer;
begin
adotable1.Open;
randomize;
i:=random(adotable1.RecordCount);(是不是要多几次用random,如用的话,如何用)
//i:=random(adotable1.RecordCount);
//while i>adotable1.RecordCount do
// i:=i-3;
adotable1.RecNo:=i;
adotable1.First;
adotable1.MoveBy(adotable1.RecNo); end;你两次运行程序取的值当然也是一样的了。因为种子一样。
如果你想不一样,可以用当前时间或其它可变的作为种子就可以了。如
var
i:integer;
begin
adotable1.Open;
randomize;
i:=random(adotable1.RecordCount);(是不是要多几次用random,如用的话,如何用)
//i:=random(adotable1.RecordCount);
//while i>adotable1.RecordCount do
// i:=i-3;
adotable1.RecNo:=i;
adotable1.First;
adotable1.MoveBy(adotable1.RecNo); end;你两次运行程序取的值当然也是一样的了。因为种子一样。
如果你想不一样,可以用当前时间或其它可变的作为种子就可以了。如
帮你UP
-------------------------------------------
谢谢关注:http://expert.csdn.net/Expert/TopicView1.asp?id=845638
var
i:integer;
begin
adotable1.Open;
randomize;
i:=random(adotable1.RecordCount);(是不是要多几次用random,如用的话,如何用)
//i:=random(adotable1.RecordCount);
//while i>adotable1.RecordCount do
// i:=i-3;
adotable1.RecNo:=i;
adotable1.First;
adotable1.MoveBy(adotable1.RecNo); end;你两次运行程序取的值当然也是一样的了。因为种子一样。
如果你想不一样,可以用当前时间或其它可变的作为种子就可以了。如
Randomize;
adotable1.Open;
adotable1.First;
adotable1.RecNo := Random(adotable1.RecordCount);
Randomize;
adotable1.Open;
adotable1.First;
adotable1.RecNo := Random(adotable1.RecordCount);
var
i:integer;
begin
adotable1.Open;
randomize;
i:=random(adotable1.RecordCount);(是不是要多几次用random,如用的话,如何用)
adotable1.First;
adotable1.MoveBy(i);
end;
再执行adotable1.moveby(adotable1.recno),当然只向前移动1了。
这样用就行了。
i:=random(adotable1.RecordCount);
i:=random(adotable1.RecordCount);
i:=random(adotable1.RecordCount);
i:=random(adotable1.RecordCount);
再执行adotable1.moveby(adotable1.recno),当然只向前移动1了。
Randomize;
adotable1.Open;
adotable1.RecNo := Random(adotable1.RecordCount);
var
i,j:integer;
begin
i:=random(50000);
i:=random(50000);
i:=random(50000);
i:=random(50000);
j:=i mod adotable1.RecordCount;//j是最后取得的随机数。
var
i:integer;
begin
adotable1.Open;
randomize;
i:=random(adotable1.RecordCount-1);
adotable1.RecNo:=i+1;
end;
或
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
adotable1.Open;
randomize;
i:=random(adotable1.RecordCount-1);
//adotable1.RecNo:=i;
adotable1.First;
adotable1.MoveBy(i+1);
end;