请问在DELPHI中,如何定位记录?有代码,请修改!谢谢!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问在DELPHI中,如何定位记录?有代码,请修改!谢谢!相关的知识,希望对你有一定的参考价值。

ADOQuery1.sql.text := 'select * from 试题库 where 编号 >= ' + edit1.text;
上述代码中的“编号”是一个字段。但它不是数据表中的真正记录位置。
比如,我想在第100条记录开始查询,而编号很可能是108。
不知道,能不能将上述代码中的“编号”改为其它的代码,以确保查询时,能指向100。
非常感谢!
不好意思!我昨天没有把要问的意思说清楚。
我的意思是:在数据表“试题库”中,从某一指定记录数,而不是某一指定记录,开始答题。
因为,某一指定记录数,和 某一指定记录,有时候是不相同的。
比如,数据表中有一个“编号”字段,有时候,“编号”为100的那条记录,不一定就是数据表中的第100条记录。
现在,我要做的是,从第100道题开始,而不是从“编号”为100的记录开始答题。
因为不会写从某一指定记录数题开始答题的代码,所以,把代码写成了以下格式,但这条代码却成了从“编号”为某一指定记录字段数( edit1.text)开始答题的结果。
ADOQuery1.sql.text := 'select * from 试题库 where 编号 >= ' + edit1.text;
上述代码的问题出在“编号”,即where 编号 >= ' + edit1.text;中的“编号”。(“编号”是数据表中的一个字段)
请将“编号”修改为,能指定数据表中,记录数为strtoint(edit1.text)的记录。谢谢!

试编写 SQL 语句如下,供参考:

SELECT *
FROM 试题库
WHERE (编号 Not In (SELECT TOP 100 编号 FROM 试题库 ORDER BY 编号))
ORDER BY 编号;

此 SQL 语句的思路是:先获取前100条记录,再获取排除这些记录的记录。需要注意的是“编号”字段是唯一值。

示例总数据如下:

 

获取的记录:

参考技术A var x:integer;
begin
x:=strtoint(edit1.text);
ADOQuery1.close;
ADOQuery1.sql.clear;
ADOQuery1.sql.text := 'select 编号 from 试题库';
ADOQuery1.open;
ADOQuery1.MoveBy(x);
showmesage(ADOQuery1.fieldbyname(编号));
但是不建议你用*遍历整个表,因为你的表中全部数据有可能过大,建议单取编号,然后再用个ADOQuery检索该编号。 取该行数据
参考技术B 在你的数据表中增加一个关键字字段“序号”,字段属性设置成“标识” 参考技术C 例如需要查询table.number = 2,
可以用 while,
counter := 0;
while not query1.eof do begin
if counter > 100 then begin
if query1.fieldbyname('number').asinteger = 2 then // 查询number = 2
... ...
end;
counter ++;
query1.next;
end;

或者如果要用指针指定的话,可以用query1.locate('number',2,[]); // 查询number = 2本回答被提问者和网友采纳
参考技术D ADOQuery1.sql.text := 'select * from 试题库 where 编号 >= (select max(编号) from (select top ' + edit1.text
+ ' 编号 from 试题库 order by 编号) temptb) ' ;

以上是关于请问在DELPHI中,如何定位记录?有代码,请修改!谢谢!的主要内容,如果未能解决你的问题,请参考以下文章

请问如何在delphi中实现多选打印功能!

请问如何在delphi from窗体内加网页

delphi中如何实现对sql数据库记录进行添加,删除,修改

多用户同时处理同一条数据解决办法

Delphi 软键盘

请问, delphi 如何获取internet时间?