>>先LAST再RECORDCOUNT再FIRST,也不一定就必须遍历整个库
Delphi源代码:
//DB.pas
procedure TDataSet.Last;
begin
...
try
<font color=red>InternalLast;</font>
...
finally
...
end;
end;
//DBTables.pas
procedure TBDEDataSet.InternalLast;
begin
Check(<font color=red>DbiSetToEnd(FHandle)</font>);
end;
BDE Help about DBISetToEnd:
...This function is used to reposition the <B>cursor</B> at the
<B>end of the result set.</B>.....
最终仍然要在结果集中遍历一次,否则记录数从哪里来?从天上掉下来吗?
当然遍历的过程不是显式地在外部进行,
而是由Database Server在结果集(临时表)中移动游标,速度当然比自己写程序
while not eofdo
next;
要快(因为这是无数次从外部调用移动游标)
但M$明确地说<B>能用SQL语句就尽量用SQL语句,不要用游标,</B>
游标速度太慢,消耗资源太大,这是可以理解的,
所以我说<B>如果只是为了取满足条件的记录数,</B>就用
select count(*)...
好了