主题:请问表达式中的for和where条件有什么区别
morphy
[专家分:0] 发布于 2009-06-06 10:25:00
如题!!!谢谢!!!!!!
回复列表 (共5个回复)
沙发
liupeisong [专家分:2340] 发布于 2009-06-06 14:01:00
如果一个 Visual FoxPro 命令带有 Scope 子句,就可以指定该命令要作用的记录范围。
下表描述了可使用的 Scope 子句。
Scope 说明
ALL
命令影响该表中的所有记录。
NEXT nExpr
命令影响以当前记录开始的下 nExpr 条记录。
在下面示例子中,REPLACE 命令作用于当前记录和下面两条记录:
REPLACE status WITH "open" NEXT 3
RECORD nRecordNumber
命令只影响指定编号的记录。
在下面示例中,REPLACE 命令作用于记录号为 5 的记录:
REPLACE status WITH "open" RECORD 5
REST
命令影响表中以当前记录开始并以最后一条记录结束的记录范围。
在下面示例中,REPLACE 命令在余下的记录中存储了 Null 值:
REPLACE status WITH .NULL. REST
Scope 说明
ALL
命令影响该表中的所有记录。
NEXT nExpr
FOR 子句导致一条命令作用于满足指定逻辑条件的每条记录。FOR 子句拥有下列语法:
下面示例在 total 字段内容小于 500 的所有记录的 alert 字段中存储了 low balance。
FOR lExpr
REPLACE ALL alert WITH "low balance" FOR total < 500
WHILE 子句导致命令作用于只要该逻辑表达式计算为真(.T.)的每条记录。一旦该表达式计算为假(.F.),该命令即停止而不尝试任何剩余的记录。该表达式通常用于在 WHILE 表达式所包含的字段上已经排序或索引的表。例如,下面示例穿行于一个已索引的表以定位满足该条件的第一条记录,随后 REPLACE 命令作用于那些满足 WHILE 条件的记录。
USE Mytable INDEX street
LOCATE FOR UPPER(street) = "MAIN"
REPLACE street WITH "Maine" WHILE UPPER(street) = "MAIN"
可以在同一个 Visual FoxPro 命令中使用 Scope、FOR 和 WHILE 表达式。例如,下面示例在几个记录的 status 字段中存储了一个新值。
REPLACE ALL status WITH "Active" FOR total > 30 ;
WHILE expd > {^1998/02/16}
当同时指定 FOR 和 WHILE 时,WHILE 表达式获得优先,而 FOR 子句被用于筛选由 WHILE 选定的记录。
WHERE 子句指定连接和筛选条件,用于决定查询返回的行。WHERE 子句中的连接条件与 FROM 子句中的 JOIN 操作功能相同。
板凳
liupeisong [专家分:2340] 发布于 2009-06-06 14:02:00
再补充几句:
FOR是用于传统VFP命令,而WHERE用于SQL命令,不能相提并论!
3 楼
0901chang [专家分:10660] 发布于 2009-06-06 17:41:00
也补充几句:
FOR是传统的DBaS命令,WHERE也是传统的DBaS命令。DBaS是比VF更早的咚咚,那时只有DOS操作系统。
SQL好像是借鉴了传统的DBaS命令,因为DBaS用WHERE时,好像SQL数据库还没有出生。
FOR是搜编表的全部记录,WHERE是从当前记录开始搜索满足条件的记录,它们各有千秋。
4 楼
foxdb [专家分:1830] 发布于 2009-06-06 20:39:00
我也再再也插补充几句:
比如 LOCATE 命令
参数
FOR lExpression1
LOCATE 按顺序搜索当前表以找到满足逻辑表达式 lExpression1 的第一个记录。(停住)
而
WHILE lExpression2
指定一个条件,只要逻辑表达式 lExpression2 计算值为“真”(.T.),就继续查找记录。
这就是我N年前初次dBASE时老搞不明白的(当时没有详细资料和互联网,不象现在那么幸福可以查可以问还可以搜,所以我能有幸回答帮狐友们的提问就回想起那美好的dBASE年代.....)
5 楼
liupeisong [专家分:2340] 发布于 2009-06-06 22:11:00
[quote]也补充几句:
FOR是传统的DBaS命令,WHERE也是传统的DBaS命令。DBaS是比VF更早的咚咚,那时只有DOS操作系统。
SQL好像是借鉴了传统的DBaS命令,因为DBaS用WHERE时,好像SQL数据库还没有出生。
FOR是搜编表的全部记录,WHERE是从当前记录开始搜索满足条件的记录,它们各有千秋。
[/quote]
好象你说的应该是while吧,我特意提出就是估计楼主把它和where搞混了!
另外,DBaS是什么东东?SQL好象是197X年产生的,更早以前只有网状、层次数据库系统,但是70年代好象DOS还没有出生吧?!
我来回复