回 帖 发 新 帖 刷新版面

主题:请教如何seek到倒数第一条记录?

有没有更好的方法?     
i=0    
seek ....  
do  while found()
    i=reccno()
    continue    
enddo  
if i>0 goto i  
又或者
  set filter   
  goto bottom
(没有视图能用吗?)  
哪个更快点?有没有更方便更高效更快的办法?用SQL好像慢很多。

回复列表 (共32个回复)

21 楼

select语句有一个去掉重复关键字值的参数DISTINCT,能不能用这个参数将同一名字的订单只保留最后日期的

22 楼


用 SELECT 加参数:
ORDER BY Order_Item [ASC | DESC]

选 DESC 降排序,得到一个降排序的集,搞店。

23 楼

那有何用?
还不是得全部过滤遍历一次?

24 楼

你建立索引之后,指定索引后select还要全部过虑吗,我没有实际用过select语句,但我想作vfp的人肯定比我聪明。

25 楼

1.  传说SQL会自动使用索引
    (可能会有某些误区,我甚至怀疑它自动使用的索引是它使用时临时建的,
     其实临时建索引并不会耗费多少时间,但毕竟会影响效率)
2.  SQL的结果是一个集,不可避免的返回一个或多个记录集,
    占用建集及处理集的时间,效率当然不可能比得上SEEK
3.  这里的疑问就是当同一个名字的记录很多时,无法自动比较时间而加快筛选时间.

26 楼

在对人员进行管理时,会有姓名相同的人,这种操作你当然不能用姓名做主索引。常用的解决方法是:系统给每个人分配一个标识号,这种操作以标识号做主索引。

建立索引后,既便记录很多,若在几百条以下,速度比seek慢不了多少,seek之后你也要copy whil 条件 to 临时表,浏览该人的全部记录才好判断,也是一个集,耗费的时间基本相同。

select用 whil 条件 形成 临时表时,我猜其速度应该与 copy whil 条件 to 临时表 基本相同。

建立的索引:
inde on 标识号+登记日期 tag 索引? DESCENDING && 标识号、登记日期都是字符型

27 楼

其实想来想去,复合索引的确算是比较合适的办法了,

但如果需求的字段太多的话,最后还是决定使用SQL语句方便些好了.

28 楼

现在的做法是:

D_date=date()-60
select ..... where 日期>D_date ......
if _tally=0
   select ..... where  ......
endif
if _tally>0
   go bottom
endif

29 楼

[quote]现在的做法是:

D_date=date()-60
select ..... where 日期>D_date ......
if _tally=0
   select ..... where  ......
endif
if _tally>0
   go bottom
endif
[/quote]

这不是最佳方案,它没体现出 VFp 的神奇速度!
你相信在 100 万条记录中,按你得条件,能在 0.5 秒内完成(必须遍历全数据表)查询一条或若干条记录吗。

30 楼

用SQL命令
select * top 2 from t1 where ... order by rq
然后简单处理一下就是了三

用SQL只要索引建好了不可能更慢的
注意使用TOP子句,可以控制只返回指定数目的记录

我来回复

您尚未登录,请登录后再回复。点此登录或注册