Цикл SCAN
Мы уже говорили, что язык Visual FoxPro изначально ориентирован на работус записями таблиц. По этой причине в языке Visual FoxPro предусмотрена специальная циклическая конструкция для перебора записей таблицы. Она называется SCAN.
Рассмотрим синтаксис циклической конструкции SCAN:
Команды, указанные в теле цикла, выполняются для каждой записи текущейтаблицы или для выбранных по условию записей (FOR). При этом смена текущей записи происходит автоматически, то есть сначала текущей становитсяпервая запись таблицы (или первая запись, удовлетворяющая условию) и длянее выполняются все команды тела цикла, затем вторая запись и для нее выполняются все команды тела цикла и так далее до конца таблицы. Таким образом, приведенный выше пример, реализованный циклами FOR и DO WHILE, можно записать так:
Замечательным свойством цикла SCAN является возможность перебиратьтолько выбранные по условию записи. И разработчики довольно часто прибегают к ее использованию. Например, требуется отобразить из таблицы Staffтолько поле Whois записей со значением поля sum > 15000.
Рассмотрим применение конструкции SCAN на примере. Допустим, требуется выводить значения числовых полей NumVals, пока пользователь не прерветвывод сообщений.
В случае, когда дополнительно требуется не выводить нулевые значенияполя, предыдущий пример изменится следующим образом:
Попробуем использовать циклы для создания программы отображения данных из таблиц нашего примера со списком сотрудников и списком должностей(созданных в упражнениях второй главы). Будем выводить в окне сообщенийтабельный номер, имена и оклады сотрудников. Обратите внимание на то, чтотабельный номер и имена сотрудников хранятся в таблице со списком сотрудников, а оклады сотрудников хранятся в таблице со списком должностей. Соответственно, придется связывать эти таблицы для синхронного перехода содной записи на другую. Для этой цели используется команда SET RELATION,рассмотрению которой был посвящен раздел «Связывание таблиц» (глава 2).При этом должно выполняться условие обязательной индексации таблицы, скоторой связывается основная таблица. В нашем случае обе таблицы проиндексированы, поэтому мы без дополнительных действий вольны выбирать, какаятаблица будет основной, а какая будет вспомогательной. Имеет смысл организовать цикл по таблице со списком сотрудников (эта таблица будет основной).
Для создания программы отображения данных из таблиц нашего примеравыполните следующие действия:
1. Смените текущую папку, выполнив в окне Command команду
CD ?
2. Откроется окно, в котором нужно найти созданную нами ранее папкуexample.
3. Выберите из меню File (Файл) команду New (Новый) или щелкните мышью по кнопкена панели инструментов Стандартная. Откроется окно,представленное на рис. 3.1. Выберите пункт Program (Программа), а затем щелкните мышью по кнопке New file (Новый файл). Откроется пустое окно, предназначенное для ввода текста программы.
4. Ведите следующий ниже текст программы:
5. Сохраните программу в файле, для чего выберите изменю File (Файл)команду Save (Сохранить) или щелкните по кнопкепа панели инструментов Стандартная. В результате откроется стандартное окно сохранения документа, где тип файла уже будет указан, а от вас потребуетсяуказать имя файла. Назовем наш файл с программой MyPrg4. Щелкнитемышью в поле Save Document (Сохранить документ) и введите MyPrg4.После этого щелкните мышью но кнопке Сохранить (Save).
6. Выберите команду Do MyPrg4 (Выполнить) из меню Program (Программа), либо щелкните по кнопкена панели инструментов Стандартная.Программа запустится на выполнение, и на экране появится вопрос окорректировке.
7. Щелкайте по кнопке Да (Yes), если хотите продолжать просмотр записей, и по кнопке Нет (No), если есть желание прекратить просмотр.