Команда LOCATE

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

Синтаксис:

LOCATE FOR lExpression1
	[Scope]
	[WHILE ]
	[NOOPTIMIZE]

Параметры:
FOR lExpression1
Команда LOCATE последовательно просматривает текущую таблицу в поисках первой записи, соответствующей логическому выражению lExpression1.
Технология Rushmore оптимизирует запрос, формируемый командой LOCATE FOR, если lExpression1 является оптимизируемым выражением. Для повышения производительности используйте в предложении FOR оптимизируемое выражение. Подробнее об этом см. темы SET OPTIMIZE и Основы технологии Rushmore и главу 17 "Оптимизация приложений" Руководства разработчика.
Scope
Задает диапазон записей. Поиск будет вестись только среди записей, попадающих в данный диапазон. Он задается следующими предложениями: ALL, NEXT nRecords, RECORD nRecordNumber и REST. Подробнее о предложениях диапазона см. тему Предложения диапазона и главу 2 "Обзор языка программирования" Руководства разработчика. Команды, использующие параметр Scope, воздействуют только на таблицу в активной рабочей области.
По умолчанию команда LOCATE использует диапазон ALL все записи.
WHILE lExpression2
Задает условие, в соответствии с которым записи ищутся, пока логическое выражение lExpression2 остается истинным (.T.).
NOOPTIMIZE
Запрещает оптимизацию команды LOCATE по технологии Rushmore. Подробнее об этом см. темы SET OPTIMIZE и Основы технологии Rushmore или главу 17 "Оптимизация приложений" Руководстао разработчика.

Комментарии:
Данная таблица не обязательно должна быть индексирована.
Если команда LOCATE находит запись, удовлетворяющую условиям поиска, с помощью функции RECNO( ) можно получить номер этой записи. Если нужная запись найдена, функция FOUND( ) возвращает значение "истина" (.T.), а EOF( ) "ложь" (.F.). Если действует установка SET TALK ON, на экране появляется номер найденной записи.
После того как LOCATE найдет подходящую запись, можно выдать команду CONTINUE, чтобы продолжить поиск в оставшейся части таблицы. По команде CONTINUE процесс поиска возобновляется с записи, непосредственно следующей за только что найденной. Команды CONTINUE можно выдавать повторно, пока не будет достигнута граница диапазона или конец таблицы.
Если записи, соответствующей требуемому условию, не найдено, RECNO( ) возвращает число записей в таблице, увеличенное на 1, FOUND( ) возвращает "ложь" (.F.), а EOF( ) "истину" (.T.).
Команды LOCATE и CONTINUE привязаны к текущей рабочей области. Если выбрать другую рабочую область, первоначальный процесс поиска можно будет продолжить после того, как исходная рабочая область будет выбрана вновь.

Пример:

* В следующем примере идет поиск всех записей, относящихся к клиентам
* из Германии. Затем на экране отображается общее количество.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer  && Open Customer table
SET TALK OFF

STORE 0 TO gnCount
LOCATE FOR ALLTRIM(UPPER(customer.country)) = 'GERMANY' 
DO WHILE FOUND( )
	gnCount = gnCount + 1
	? company
	CONTINUE
ENDDO

? 'Total companies Germany: '+ LTRIM(STR(gnCount))

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 16.02.2003