另外,如果不用TABLE,在执行查询后, SQl Server 返回一定的记录,这些记录显然是无法用记录号的形式返回的,只能得到-1。你可以用RecordSet的Next, previor,first 等来获取和使用记录号一样的功能。
RECONO本质上是物理记录号,所以PRADOX表可以正常使用RECNO,而SQL SERVER就不可以, 可以使用键值来找: 可使用类市函数来完成,随便写的,可能有错: var i,recnum : integer; key : string; begin i:=1; key:=fieldbyname('key').asstring; while not eof do begin if fieldbyname('key').astring=key then begin exit; end; inc(i,1); next; end; recnum:=i; end;
eof最后
recno记录号
TADOCustomDataset.RecNo,最好把CursorLocation设置为clUseClient.
RecNo是从0开始的.
dataset.eof是否在最后面//boolean
dataset.recno反回记录号//word
我用的是TQuery,但TABLE1.RecNo 总是-1,不好用。
begin
//
end;
if Query1.Eof then
Query1.Prior;
得到记录号:DATASET.RECNO
其实就是eof bof
看看和文件的一样
begin
close;
sql.clear;
sql.add(select top 1 id from tablename order by name desc);
open;
end;
可能我没描述清楚再述一边:
我想判断TQuery是否已到最后一条有数据的记录(不是EOF的判断最后一条无数据的记录)!
上面说的DATASET.RECNO,我得到的是-1,却不是记录号!
解决问题者,马上给分!
你的数据表最后一条没有记录?
可以使用键值来找:
可使用类市函数来完成,随便写的,可能有错:
var i,recnum : integer;
key : string;
begin
i:=1;
key:=fieldbyname('key').asstring;
while not eof do
begin
if fieldbyname('key').astring=key then
begin
exit;
end;
inc(i,1);
next;
end;
recnum:=i;
end;
Query1.Last?
这样就可以了!
RECNO是有时为-1
但是你如果连上一个CLIENTDATASET,它一定会是正确的答案
这样所有问题都解决了
RECORDCOUNT=RECNO
我这样做了 N多数据库类型通用
abs(TDataSet.RecNo)
数据集.Last 即可到达最后一条记录,至于上面给位说的数据集的RecNo是有条件的,有的数据库是不支持的,所以会返回-1.如果使用sql server做数据库的话,可以用TAdoDataSet作为数据集控件来使用,这样可以返回RecNo的值。