Перемещает указатель записи по таблице, выбранной в данный момент, и для каждой записи, удовлетворяющей указанным условиям, выполняет определенный блок команд.

SCAN [NOOPTIMIZE] [Scope] [FOR lExpression1] [WHILE lExpression2]
   [Commands]
   [LOOP]
   [EXIT] 
ENDSCAN

Параметры

NOOPTIMIZE

Запрещает оптимизацию выполнения команды SCAN по технологии Rushmore.

Подробнее об этом см. описание команды SET OPTIMIZE а также Использование оптимизации запросов Rushmore для ускорения доступа к данным.

Scope

Задает просматриваемый диапазон записей. Будут анализироваться только записи, принадлежащие заданному диапазону. Диапазон определяется следующими предложениями: ALL, NEXT nRecords, RECORD nRecordNumber, и REST. Подробнее о предложениях диапазона см. Scope Clauses .

По умолчанию областью действия команды SCAN являются все записи (предложение ALL).

FOR lExpression1

Задает выполнение команд только для тех записей, для которых значением выражения lExpression1 является "истина" (.T.). Включите предложение FOR для тфильтрации записей, которые не нужно просматривать.

Технология Rushmore позволяет оптимизировать запрос, сформированный командой SCAN ... FOR, если lExpression1представляет собой оптимизируемое выражение. В целях повышения производительности используйте в предложении FOR оптимизируемое выражение.

Подробнее об этом см. описание команды SET OPTIMIZE а также Использование оптимизации запросов Rushmore для ускорения доступа к данным.

WHILE lExpression2

Задает условие, в соответствии с которым команды будут выполняться, пока значением выражения lExpression2 остается "истина" (.T.).

Commands

Задает команды Visual FoxPro, которые следует выполнять.

LOOP

Возвращает управление непосредственно оператору SCAN. Оператор LOOP можно ставить в любом месте между SCAN и ENDSCAN.

EXIT

Передает управление из цикла SCAN ... ENDSCAN первой команде, следующей за ENDSCAN. Оператор EXIT можно ставить в любом месте между SCAN и ENDSCAN.

ENDSCAN

Отмечает конец процедуры SCAN.

Expand imageЗамечания

SCAN автоматически продвигает указатель записи к следующей записи, удовлетворяющей заданным условиям, и выполняет блок команд.

После оператора ENDSCAN в той же строке можно писать комментарии. Они игнорируются в процессе компиляции и выполнения программы.

при достижении ENDSCAN текущей становится таблица, которая была выбрана на момент начала SCAN.

Expand imageПример

В следующем примере используется цикл SCAN ... ENDSCAN, выдающий на экран все компании в Швеции.

  CopyCode imageCopy Code
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE customer  && Opens Customer table
CLEAR

SCAN FOR UPPER(country) = 'SWEDEN'
   ? contact, company, city
ENDSCAN

Expand imageСмотрите также