回 帖 发 新 帖 刷新版面

主题:请问表达式中的for和where条件有什么区别

如题!!!谢谢!!!!!!

回复列表 (共5个回复)

沙发

如果一个 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 操作功能相同。

板凳

再补充几句:
   FOR是用于传统VFP命令,而WHERE用于SQL命令,不能相提并论!

3 楼

也补充几句:

FOR是传统的DBaS命令,WHERE也是传统的DBaS命令。DBaS是比VF更早的咚咚,那时只有DOS操作系统。

SQL好像是借鉴了传统的DBaS命令,因为DBaS用WHERE时,好像SQL数据库还没有出生。

FOR是搜编表的全部记录,WHERE是从当前记录开始搜索满足条件的记录,它们各有千秋。

4 楼

我也再再也插补充几句:

比如 LOCATE 命令

参数

FOR lExpression1

LOCATE 按顺序搜索当前表以找到满足逻辑表达式 lExpression1 的第一个记录。(停住)

而 
WHILE lExpression2

指定一个条件,只要逻辑表达式 lExpression2 计算值为“真”(.T.),就继续查找记录。

这就是我N年前初次dBASE时老搞不明白的(当时没有详细资料和互联网,不象现在那么幸福可以查可以问还可以搜,所以我能有幸回答帮狐友们的提问就回想起那美好的dBASE年代.....)

5 楼

[quote]也补充几句:

FOR是传统的DBaS命令,WHERE也是传统的DBaS命令。DBaS是比VF更早的咚咚,那时只有DOS操作系统。

SQL好像是借鉴了传统的DBaS命令,因为DBaS用WHERE时,好像SQL数据库还没有出生。

FOR是搜编表的全部记录,WHERE是从当前记录开始搜索满足条件的记录,它们各有千秋。
[/quote]
好象你说的应该是while吧,我特意提出就是估计楼主把它和where搞混了!

另外,DBaS是什么东东?SQL好象是197X年产生的,更早以前只有网状、层次数据库系统,但是70年代好象DOS还没有出生吧?!

我来回复

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