Команды FOXPRO: перемещение по БД, просмотр данных, удаление данных, изменение данных, фильтрация данных, поиск информации.
При работе с БД необходимы средства перемещения внутри нее. Запись, на которой находится указатель записей, является текущей, и только к ней в данный момент возможен непосредственный доступ. Имеется несколько разновидностей команд, изменяющих положение указателя записей:
GO TOP – переход к самой первой записи файла;
GO BOTTOM – переход к самой последней записи;
GO <вырN> – переход к записи с указанным в <вырN> номером;
SKIP <вырN>- переход к записи, отстоящей от текущей на указанное в <вырN> число записей.
В последней команде <вырN> может быть и отрицательным, что означает движение указателя назад. SKIP без параметра идентичен SKIP 1 (переход на следующую запись).
Для контроля положения указателя и наличия записей в файле предусмотрены функции:
RECNO([<область>]) – указывает номер текущей записи;
RECCOUNT([<область>]) – выдает общее число записей в файле БД, включая записи, помеченные к удалению;
EOF([<область>]) – функция конца файла. Она истинна, если конец достигнут, и ложна в противном случае BOF([<область>]) – то же, но для начала файла.
Необязательный параметр <область> указывает, для какой рабочей области запрашивается значение функции. По умолчанию текущая область.
Функции в FoxPro имеют характерный синтаксис – скобки, даже если никакого аргумента нет и они остаются пустыми.
Просмотр данных в FoxPro осуществляется очень близкими по смыслу и синтаксису командами LIST и DISPLAY (см. Помощь). Команда LIST не делает периодических остановок при выдаче данных, и по умолчанию область ее действия не текущая запись, а весь файл. Ввиду этого команда более пригодна для выдачи данных на принтер/файл. Приведенные команды удобны скорее для просмотра данных при отладке программ. Для включения их в программы они слишком грубы, и здесь лучше использовать более гибкие команды ? и @ ...SAY.
DELETE (см.Помощь) – пометка к удалению записей в указанных границах и/или отвечающих указанным условиям. Без параметров помечает только одну текущую запись.
RECALL (см.Помощь) – снятие пометок к удалению. Без параметров действует только на одну текущую запись. Физическое удаление записей осуществляется командой PACK.
В FoxPro имеется возможность не только вручную редактировать данные, но и изменять их путем присваивания или вычисления.
REPLACE (см. Помощь) – осуществляет множественное изменение полей БД в соответствии с заданными выражениями, в установленных границах и при заданных условиях. Практически (за некоторыми исключениями) только командой REPLACE в FoxPro можно изменять значения полей файла БД. В этом смысле она эквивалентна знаку равенства в операции присвоения для переменных.
Синтаксис
REPLACE FieldName1 WITH eExpression1
[, FieldName2 WITH eExpression2] ...
[Scope] [FOR lExpression1] [WHILE lExpression2]
Параметры
FieldName1 WITH eExpression1 [, FieldName2 WITH eExpression2 ... ]
Указывает, что данные в поле FieldName1 должны быть заменены значением выражения eExpression1, данные в поле FieldName2 _ значением выражения eExpression2 и т.д.
Если значение выражения не вмещается по ширине в числовое поле, команда REPLACE вписывает выражение в поле путем дополнительной обработки:
1. Вначале REPLACE отбрасывает несколько десятичных знаков и округляет оставшуюся десятичную часть поля.
2. Если значение по-прежнему не помещается, REPLACE сохраняет содержимое поля, используя экспоненциальное представление.
3. Если значение все равно не помещается, REPLACE замещает содержимое поля звездочками.
Scope
Задает диапазон заменяемых записей. Будут заменены только записи, попадающие в указанный диапазон. Он задается следующими предложениями: ALL, NEXT nRecords, RECORD nRecordNumber и REST. По умолчанию областью действия команды REPLACE является одна текущая запись (NEXT 1).
FOR lExpression1
Указывает, что заданные поля могут быть замещены только в тех записях, для которых выражение lExpression1 имеет значение "истина" (.T.). Предложение FOR позволяет производить условную замену записей, отфильтровывая те из них, которые не нужно менять.
WHILE lExpression2
Задает условие, в соответствии с которым поля будут заменяться, пока значением логического выражения lExpression2 остается "истина" (.T.).
Буквально фраза <поле> WITH <выражение> соответствует присвоению <поле>=<выражение>.
Исключительно важную группу команд в FoxPro образуют средства выделения и поиска данных в БД.
Фильтрация данных
В FoxPro предусмотрена специальная команда вида SET FILTER TO [<условие>] (см. Помощь), которая позволяет установить FOR-условие для всех без исключения команд обработки данных.
Последовательный поиск
Начальный поиск:
LOCATE (см. Помощь) осуществляет последовательный поиск одной самой первой записи в БД, удовлетворяющей заданному условию, среди записей, находящихся в заданных границах. в случае, если границы и WHILE-условие отсутствуют, поиск ведется во всем файле, начиная с первой записи. При успешном поиске указатель записей устанавливается на найденную запись, функция RECNO() равна номеру этой записи, а функция FOUND(), оценивающая результат поиска, возвращает значение “Истина”. В противном случае функция RECNO() равна числу записей в базе плюс 1, а функция FOUND()=.F., а функция достижения конца файла EOF() возвращает .Т.
Продолжение поиска
CONTINUE – команда, которая продолжает поиск записей, начатых ранее командой LOCATE. Если не было найдено нужных записей, указатель записей устанавливается на нижнюю границу поиска (если она введена в команде) или на конец файла (EOF()=.T.).