xxxxxxxxx,还你90分(90分)

  • 主题发起人 主题发起人 蚯蚓
  • 开始时间 开始时间

蚯蚓

Unregistered / Unconfirmed
GUEST, unregistred user!
100分太多,我良心不安呀!
 
这么还可不是办法啊,因为你们两人的专家分都长了.
 
to menxin:
我落后了。
 
这个问题有意思,居然没有所属的"问题分类"???!!!!
蚯蚓兄,你是怎么提问的? 介绍一下经验好吗? :-)
 
那就给我吧。
因为是我回答出问题的,你不过拣了现成,所以你觉得多了。
先LAST再RECORDCOUNT再FIRST,也不一定就必须遍历整个库,要看
DELPHI 如何实现的。至少我用下来速度不慢(可能是表小)。
 
>>先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(*)...
好了
 
xxxxxxxxx不肯来,
也无所谓,分送出去,良心就安啦!
 
后退
顶部