locate 查找命令运行后一个值得注意的问题。
LOCATE FOR 命令是一个经常用到的命令。但是当查找失败后,在这个时候运行CALCULATE 命令时可能引起计算结果失真。请看如下代码:
SELE 库存数据表
locate FOR 商品代码=c商品代码1 AND 仓库名称=ALLTRIM(仓库名称.VALUE)
IF FOUND()=.T.
REPLACE 数量 WITH n进库数量汇总1-n出库数量汇总1 ,单号 with alltrim(THISFORM.TEXT单号.VALUE);
商品类别 with c商品类别1 &&最新库存数量和最后单号写入
ELSE
CALCULATE MAX(val(序号)) TO c库存数据序号1 all &&读出最大序号
c库存数据序号1=alltrim(str(c库存数据序号1+1))
APPEND BLANK
REPLACE 数量 WITH n进库数量汇总1-n出库数量汇总1 ,单号 with alltrim(THISFORM.TEXT单号.VALUE);
商品类别 with c商品类别1,商品代码 with c商品代码1,商品名称 with c商品名称1, 单价 with n单价1;
仓库名称 with ALLTRIM(仓库名称.VALUE), 序号 with c库存数据序号1,进出库性质 with ALLTRIM(出库性质.VALUE)
endif
我在调试这段程序的时候,最后写入表的序号是“1”
经过反复检查后,我确定程序没有问题,但是问题是处在什么地方呢,后来我在调试过程中,打开表,此时表没有数据显示,也就是说,当使用locate命令查找失败后,需要用SET FILTER TO命令把表重新整理后才能使用CALCULATE命令。
不知道我的理解是否正确,请各位指正。