了解Foxpro IF语句

时间:2019-01-02 01:24:53

标签: visual-foxpro

我不确定标题应该是什么,如果您能提出更好的建议,请随时编辑我的帖子并进行更改。

使用Foxpro的资源并不多,我要做的就是了解正在发生的事情。

lldisdead=.t.

Select .f. as chkbox, * from a_counties ;
    order by cn_area, cn_desc ;
    into dbf (StrTmpFile1)


scan while !EOF()
     IF ChkBox
          selected_some_cnty = .t
     endif
endscan

这是我的理解:

  • 只要您不在最后一条记录中,请执行以下操作 表格:
  • IF ChkBox
  • 设置selected_some_cnty等于.t
  • 停止检查下一条记录
  • 继续这样做,直到记录不足。

IF CHKBOX是什么意思?

  

是说如果CHKBOX列不为空,请执行以下操作,   否则,什么都不做。

编辑:添加了其他代码

2 个答案:

答案 0 :(得分:2)

从SQL查询中,数据将根据变量“ StrTmpFile1”指向的内容进入物理表。还要注意,此select语句的第一列是“ .f。as ChkBox”。因此,这为查询中的每个记录都准备了始终为False(因此为.f。)的前导列。

Select .f. as chkbox, * from a_counties ;
    order by cn_area, cn_desc ;
    into dbf (StrTmpFile1)

现在,我怀疑还有其他一些使用此结果表的用户界面操作,例如以表格形式显示在网格中,并允许列上的复选框让用户选择一个或多个条目来做进一步的操作

进行上述选择后(再次,推测意图),将仅通过循环查找表中“ ChkBox”列已设置为true并将标记设置为.t的那些记录。选择了某些东西。

总体而言,这是一个非常新手的方法,但这是一个不同的问题。如果记录已标记,则获取答案的快捷方式

select (the table)
Locate for ChkBox
selected_some_cnty = found()

希望这会有所帮助,如果您需要其他说明,请发表评论。

答案 1 :(得分:2)

If chkBox
在VFP中,

表示:

if (chkBox)

在所有其他众所周知的语言中也是如此,例如C,C ++,C#,Java,Go,Dart,Ruby,...您也可以这样命名-某些语言的括号是强制性的,而有些则不是。它仅表示“ 如果chkBox为true ”。有时您会看到它写为:

If chkBox = .T.

喜欢:

If chkBox == true

就像其他语言一样,但是它比所需的更为冗长,并且经验丰富的开发人员不会这样写(毕竟,“ if true为真”这样的写法很尴尬,只是“ 如果为真”就可以)。

对此进行了解释,并在代码中添加了注释:

* Initialize a memory variable named lldisdead as .t. (true)

lldisdead=.t.

* Select some fields into a table named m.StrTmpFile1
* StrTmpFile1 is a variable holding a string name of the table
* selecting all fields of a_counties table
* plus a boolean field named "chkBox" which is initially
* filled with .F. (false) value
Select .f. as chkbox, * from a_counties ;
    order by cn_area, cn_desc ;
    into dbf (StrTmpFile1)

* select's result table is table open in the current 
* work area and by default located on first record.
* scanning the whole table
* with an unnecessary "while !EOF()" addition
* Default scope of scan is until EOF 
scan while !EOF()
     * Checking if chkBox field has a value of true
     IF ChkBox 
          * if it has, than set "selected_some_cnty" memory variable to true
          selected_some_cnty = .t 
     endif
endscan

话虽如此,这部分:

scan while !EOF()
     IF ChkBox 
          selected_some_cnty = .t. 
     endif
endscan

可以写为:

scan
     IF ChkBox 
          selected_some_cnty = .t 
     endif
endscan

更多:

LOCATE FOR ChkBox 
selected_some_cnty = !EOF() 

但是,由于我们知道所有chkBox值都是.F。,所以这段代码完全没有用,可以一起删除。