Понимание заявления Foxpro IF - PullRequest
0 голосов
/ 02 января 2019

Я не был уверен, каким должен быть мой заголовок, не стесняйтесь редактировать мой пост и менять его, если вы можете придумать что-нибудь получше.

Существует не так много доступных ресурсов по использованию 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 не равен NULL, выполните следующие действия, в противном случае ничего не делайте.

Редактировать: добавлен дополнительный код

Ответы [ 2 ]

0 голосов
/ 02 января 2019
If chkBox

в VFP, означает:

if (chkBox)

также во всех других известных языках, таких как C, C ++, C #, Java, Go, Dart, Ruby, ... вы называете это - в некоторых языках круглые скобки обязательны, а некоторые нет. Это просто означает ", если chkBox истинно ". Иногда вы могли бы видеть это в виде:

If chkBox = .T.

как:

If chkBox == true

как и в других языках, но это более многословно, чем нужно, и опытные разработчики не пишут это так (ведь писать как ", если true - 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., Этот фрагмент кода абсолютно бесполезен и может быть удален все вместе.

0 голосов
/ 02 января 2019

Из запроса SQL данные поступают в физическую таблицу в зависимости от того, на что указывает переменная имени «StrTmpFile1».Также обратите внимание, что первый столбец в этом операторе выбора - «.f. As ChkBox».Таким образом, это готовит КАЖДУЮ ЗАПИСЬ в запросе с ведущим столбцом, который ВСЕГДА ложен (следовательно, .f.)

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

Теперь, я подозреваю, что есть какое-то другое действие пользовательского интерфейса, которое использует эту таблицу результатовнапример, представление в сетке в форме и разрешение флажка в столбце, чтобы позволить пользователю выбрать одну или несколько записей, чтобы сделать что-то еще.

После указанного выбора (опять же, предполагающего намерения), он проходитцикл, чтобы найти только те записи, в которых для столбца COLUMN IN THE TABLE "ChkBox" установлено значение true и установлен флаг .t.что-то БЫЛО выбрано.

В целом очень новичок, но это уже другая проблема.Ярлык для получения ответа, если отмеченная запись будет

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

Надеюсь, это поможет, и если вам нужны дополнительные разъяснения, сделайте комментарий.

...