1. 在设置了 set near on 时,根本不需要引用 recn(0),直接引用 recn()即可。我的理解是:recn(0)只有在 set near off 时才有意义
2. 即使 seek 命令搜索成功,即:found()=.t.,也有可能 recn()≠recn(0)。在帮助文件中也说了,“在 SEEK 命令搜索失败时,recn(0)返回最匹配记录的记录号”,但并未说搜索成功时,recn(0)也返回最匹配记录的记录号。
3. 由于 recn(0)可能返回 0,而 go 0 是错误的,因此,在执行 go 语句前必须判断记录跳转值
下面是我改进后的示例:
示例一:
SELECT sxb
wcbfd = 34.958
r = RECCOUNT() &&表总行数
SET NEAR ON
INDEX on zhbfd TAG wc
SEEK wcbfd
z = RECNO()
? z
if !found()
? '未找到匹配记录!'
retu
endif
GO z
SCATTER TO aLs
REPLACE bzk WITH "囙"
IF r-z > 91
GO z+91
DELETE REST
ENDIF
示例二:
SELECT sxb
wcbfd = 34.958
r = RECCOUNT() &&表总行数
SET NEAR OFF
INDEX on zhbfd TAG wc
SEEK wcbfd
if found()
z = RECNO()
else
z = recno(0)
if z = 0
? '未找到匹配记录!'
retu
endif
endif
?z
GO z
SCATTER TO aLs
REPLACE bzk WITH "囙"
IF r-z > 91
GO z+91
DELETE REST
ENDIF