随机读取数据(82分)

  • 主题发起人 主题发起人 liuzhonghua
  • 开始时间 开始时间
L

liuzhonghua

Unregistered / Unconfirmed
GUEST, unregistred user!
我把一些数据录入到数据库,每次从数据随机读取出来一个数。读取出来的这个数从数据库清除掉。
比如数据库数据 1、2、3、4、5、6、7、8、9、10 随机读取出一个数6 下次再从1,2,3,4,5,7,8,9,10这些数据里取随机数。
帮忙解决
 
select top 1 * from 表 order by newid()
在sqlserver里面这个就可以取到随机数.如果相不重复,就把查询记录到一个临时表里面在进行比较就是了.
 
这种功能根本不用数据库
一个文件保存就行了
循环选号,不断读删,还不把硬盘搞坏?
效率也低
 
如果数据库量很大
可以把主键值单独放在一个地方
然后在软件内部将其全部读入内存
做随机处理
 
类似random(i),写个对i循环直到没有取过为止
 
dongy_143能具体点吗?
比如数据
编号 平数
1 120
2 90
3 100
4 70
5 85
。 。
。 。
等等
我的意思是在这些n个数据中里做随机数抽取,抽取出来的数下次不做到随机数里,免的抽取出来的数重复,或是有更好的办法让抽取出来的数不重复。
 
放到链表里,取一个删一个结点
 
具体点用代码如何实现
 
//定义结构
PMyNode = ^TMyNode;
TMyNode = record
i: integer;
Next: PMyNode;
end;
//定义链表类
TMyNodeList = class(TObject)
private
FFirst: PMyNode;
FCurrNode: PMyNode;
FLast: PMyNode; //指向尾节点
FCount: integer;
public
constructor Create();
destructor Destroy; override;
procedure LoadAllNode;
function GetNext: PMyNode;
procedure Append(i:integer);
procedure Clear; //清除链表中的节点
property Count: longint read FCount;
end;

procedure TMyNodeList.Append(i:integer);
var
NewNode: PMyNode;
begin
if FCount > $FFFE then exit;
new(NewNode); //首先分配一个节点
NewNode^.i:= i;
NewNode^.Next := nil;
if FLast = nil then
begin
FFirst := NewNode;
FLast := NewNode;
FFirst.Next := nil;
end
else
begin
FLast^.Next := NewNode;
NewNode^.Next := FFirst;
FLast := NewNode;
end;
inc(FCount);
end;

procedure TMyNodeList.Clear;
var
Temp, NextNode: PMyNode;
begin
Temp := FFirst;
if Assigned(FLast) then
FLast.Next := nil;
while Temp <> nil do
begin
NextNode := Temp^.Next;
FreeMemory(Temp);
Temp := NextNode;
end;
FCount := 0;
end;

procedure TMyNodeList.Next:PMyNode;
begin
//Result := FCurrNode.Next;
//FCurrNode := Result;
end;

给一个思路,上边是一个链表,你可以把数据放入链表中去
链表中怎么取数据就随便了,在next里写一下代码就行了
取完之后记得处理一下链表,断开链表之后将已经取过的释放掉
再把链表接上

剩下的自己写吧[:D]
 
定义一个全局变量I:Cardinal;
在Timer 事件里写
i:=Random(Memo1.Lines.Count);
label1.Caption:=Memo1.Lines;
这就样子就可以得到在Memo1里数的随机数(不规则的数)
 
谢谢大家
 
后退
顶部