如何从数据库中随机找到几条记录呢?

winsock2000 2002-10-01 06:25:25
大家好,请问如何从数据库中随机找到几条记录呢?能跟我说明白点吗?谢谢了!

对了,我用的是access的数据库!!!
...全文
47 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mingyeh 2002-10-01
  • 打赏
  • 举报
回复
//可以借鉴一下,你喜欢,我快乐
procedure TrdmUserStudy.UserExam(const vUserID, vSubject,
vExamType: WideString; var vQuestion, vAnswer: OleVariant);
var
UserPos : String;
UserCellPos : String;
QesTotal , i , len , j , MoveDis : Integer;
arrayQes , arrayAns : Variant;
QesBag : TStringList;
const
QesAmount : Integer = 10;
begin
if vExamType = 'etUnit' then //单元测试
begin
//查找用户进程
qryMain.Close;
qryMain.SQL.Clear;
qryMain.SQL.Add('SELECT cellNumber FROM userCourse');
qryMain.SQL.Add('WHERE username = :pUserID');
qryMain.SQL.Add('AND subject = :pSubject');
qryMain.Parameters.ParamValues['pUserID'] := vUserID;
qryMain.Parameters.ParamValues['pSubject'] := vSubject;
if qryMain.Prepared = False then
begin
qryMain.Prepared := True;
end;
qryMain.Open;
UserPos := Trim(qryMain.FieldByName('cellNumber').AsString);
//查找课件所属单元
qryMain.Close;
qryMain.SQL.Clear;
qryMain.SQL.Add('SELECT cellNumber FROM courseware');
qryMain.SQL.Add('WHERE CoursewareNumber = :pCWN');
qryMain.Parameters.ParamValues['pCWN'] := UserPos;
if qryMain.Prepared = False then
begin
qryMain.Prepared := True;
end;
qryMain.Open;
UserCellPos := Trim(qryMain.FieldByName('cellNumber').AsString);
//读入考题
qryMain.Close;
qryMain.SQL.Clear;
qryMain.SQL.Add('SELECT problemNumber,problemContent,answerContent FROM unitProblemStoreroom');
qryMain.SQL.Add('WHERE subject = :pSubject');
qryMain.SQL.Add('AND cellNumber = :pCWN');
qryMain.Parameters.ParamValues['pSubject'] := vSubject;
qryMain.Parameters.ParamValues['pCWN'] := UserCellPos;
if qryMain.Prepared = False then
begin
qryMain.Prepared := True;
end;
qryMain.Open; //取得符合条件全部题目
QesTotal := qryMain.RecordCount; //符合条件题目数量
arrayQes := VarArrayCreate([0,QesAmount -1],varString);
arrayAns := VarArrayCreate([0,QesAmount -1],varString);
QesBag := TStringList.Create;
for i := 0 to QesTotal-1 do //题目编号读入缓冲区
begin
QesBag.Add(qryMain.FieldByName('problemNumber').AsString);
qryMain.Next;
end;
qryMain.Close;
qryMain.SQL.Clear;
qryMain.SQL.Add('SELECT problemContent,answerContent FROM unitProblemStoreroom');
qryMain.SQL.Add('WHERE problemNumber = :pCWN');
Randomize;
for i := 0 to QesAmount - 1 do
begin
qryMain.Close;
len := QesBag.Count;
j := Random(len);
qryMain.Parameters.ParamValues['pCWN'] := QesBag[j]; //使用题目编号查找题目
qryMain.Open;
arrayQes[i] := qryMain.FieldByName('problemContent').AsString;
arrayAns[i] := qryMain.FieldByName('AnswerContent').AsString;
QesBag.Delete(i);
qryMain.Close;
end;
QesBag.Free;
//返回题目和答案
vQuestion := arrayQes;
vAnswer := arrayAns;
end
else if vExamType = 'etTerm' then //全面测试
begin
//取得该科目所有单元编号
qryMain.Close;
qryMain.SQL.Clear;
qryMain.SQL.Add('SELECT DISTINCT cellNumber FROM unitProblemStoreroom');
qryMain.SQL.Add('WHERE subject = :pSubject');
if qryMain.Prepared = False then
begin
qryMain.Prepared := True;
end;
qryMain.Open;
QesBag := TStringList.Create;
len := qryMain.RecordCount;
for i := 0 to len - 1 do //将单元编号装入缓冲
begin
QesBag.Add(qryMain.FieldByName('cellNumber').AsString);
qryMain.Next;
end;
Randomize;
arrayQes := VarArrayCreate([0,QesAmount -1],varString);
arrayAns := VarArrayCreate([0,QesAmount -1],varString);
for j := 0 to QesAmount - 1 do
begin
//查找随机单元题目
qryMain.Close;
qryMain.SQL.Clear;
qryMain.SQL.Add('SELECT problemContent,answerContent FROM unitProblemStoreroom');
qryMain.SQL.Add('WHERE subject = :pSubject');
qryMain.SQL.Add('AND cellNumber = :pCWN');
qryMain.Parameters.ParamValues['pSubject'] := vSubject;
qryMain.Parameters.ParamValues['pCWN'] := QesBag[Random(len)];
if qryMain.Prepared = False then
begin
qryMain.Prepared := True;
end;
qryMain.Open;
QesTotal := qryMain.RecordCount;
MoveDis := Random(QesTotal); //随机移动指针
qryMain.MoveBy(MoveDis);
arrayQes[j] := qryMain.FieldByName('problemContent').AsString;
arrayAns[j] := qryMain.FieldByName('AnswerContent').AsString;
end;
QesBag.Free;
//返回题目和答案
vQuestion := arrayQes;
vAnswer := arrayAns;
end;
end;
linzhisong 2002-10-01
  • 打赏
  • 举报
回复
最笨得方法,就是用數組先存recordcount內的幾個記錄號,然後next去找吧,呵呵,.
souxun1990 2002-10-01
  • 打赏
  • 举报
回复
记录号用Random函数产生,把Random的范围设为0到RecordCount-1之间
再根据记录号找出记录 判断记录号不重复
zsy_good 2002-10-01
  • 打赏
  • 举报
回复
在讲一个办法
select top 1000 * from TableName order by 这里用一个算法自己产生
一个不会重复的ID,比如年+月+日+小时+秒+毫秒,
paradox里肯定有得到年月日的函数,在用字符截取函数搞定
zsy_good 2002-10-01
  • 打赏
  • 举报
回复
没有ID号,怎么读
go_my_sky 2002-10-01
  • 打赏
  • 举报
回复
求个随机整数,然后用这个随机数读一条记录啊.
zsy_good 2002-10-01
  • 打赏
  • 举报
回复
sql server服务器
,可以 newid() paradox那里有这个函数,开玩笑
winsock2000 2002-10-01
  • 打赏
  • 举报
回复
不行呀,我刚用paradox数据库试了一下,不行~
zsy_good 2002-10-01
  • 打赏
  • 举报
回复
select top 1000 * from TableName order by NewId()
newid()

随机的找到1000条记录.

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧