Основные команды FoxBASE |
1) Выбор таблицы . В среде FoxPro только одна таблица может быть активной. USE <имя таблицы> – открытие таблицы в текущей рабочей области USE без параметров – закрывает таблицу SELECT < i > – переход в рабочую область с индексом i CLOSE ALL – закрытие всех файлов и переход в рабочую область 1 2) Перемещение по таблице и контроль перемещения. GO { TOP | BOTTOM | < n >} – переход к первой, последней или записи с номером n SKIP [< n >] – переход к записи, отстоящей на n от текущей или на следующую запись Recno ([< i >]) – функция, возвращающая номер текущей записи в области i Reccount ([< i >]) – выдаёт общее число записей в таблице (включая помеченные на удаление) Eof ([< i >]), Bof ([< i >]) – функции, отмечающие конец и начало таблицы 3) Вставка и удаление записей APPEND [ BLANK ] – дополнение таблицы интерактивное (открывается окно ввода данных) или пустой записью INSERT [ BEFORE ] – вставка новой записи после (или до) текущей (открывается окно ввода данных) DELETE – пометка к удалению записей в указанных границах или отвечающих указанным условиям PACK – физическое удаление помеченных ранее записей и сжатие файла. USE Peoples GO BOTTOM SKIP -3 DELETE NEXT 3 PACK Просмотр содержимого таблицы LIST – выводит записи активной таблицы на главное окно CHANGE <параметры> – вызывает окно редактора отдельных записей таблицы с возможностью интерактивного или предварительного задания параметров редактирования (в т.ч. ввод значений по умолчанию). BROWSE <параметры> – мощное средство представления данных в табличном виде, позволяющее осуществлять просмотр и редактирование (ввод) записей в одной или нескольких таблицах. Параметры представления данных могут указываться интерактивно или с помощью параметров. Перечислим некоторые параметры команды:
USE Students BROWSE BROWSE NOEDIT LOCK 3 REDIT FIELDS new=Family + Lastname + Left(Firstname,1) + '.' +; Left(Patronymic,1) + '.' :25:H=' ФИО ', BirthDate:H=' Дата рождения ' FOR group=21402 Индексирование таблицы Индекные файлы в FoxPro бывают нескольких видов: 1) одноиндексные – индекс по одному полю, высший приоритет. Файл с расширением . idx . 2) мультииндексный структурный. Имя совпадает с именем таблицы, автоматически открывается для своей таблицы, и не указывается в списке индексных файлов. Расширение файла . cdx . 3) мультииндексный обычный. Может создаваться и подключаться к таблицам программно. Низший приоритет. INDEX <параметры> – команда создания индексных файлов SER INDEX TO [<список индексных файлов>] [ ORDER <ведущий индекс>] – открывает индексны INе файлы для активной таблицы. SER DEX TO без параметров – закрывает все индексные файлы кроме структурного. Синоним – CLOSE INDEX REINDEX – обновляет все индексные файлы, открытые в текущей рабочей области. По умолчанию при редактировании и добавлении данных индексы отключаются. И если их по окончанию редактирования не перестроить, возникает фатальная ошибка обработки данных в базе. Поиск и упорядочение информации в таблице SET FILTER TO <условие> – установка условия для всех следующих команд обработки данных SET FILTER TO без параметров – отмена ранее поставленных условий LOCATE FOR <условие> [<границы>] [ WHILE <условие>] – последовательный поиск. Предварительное индексирование не требуется. При успешном поиске функция Found () выдает значение True , а функция Recno () указывает на номер искомой записи с первым вхождением заданного условия поиска. Продолжение поиска осуществляется командой CONTINUE . USE Students SET FILTER TO Group=21402 LOCATE FOR Name=” Екатерина ” DISPLAY CONTINUE SORT ON <список полей с ключами> TO <имя новой таблицы> [<границы>][<условия>] – создание новой таблицы, в которой физическое размещение записей соответствует заданному принципу. Первое поле в списке считается главным. Ключи: / A – сортировка по возрастанию, / D – сортировка по убыванию. SEEK <выражение> – быстный поиск по ведущему индексу. Если поиск удачен, Found () возвращает True , а Recno () – номер первой записи, удовлетворяющей условию (при этом остальные искать не надо, они находятся ниже по соседству). Помимо команды SEEK и её синонима FIND существует аналогично работающая функция Seek (<выражение>), возвращающая True , если поиск удачен. Пример программы изменения данных в таблице: откроем БД Streets , найдём запись со значением «Урицкого» (считаем, что запись уникальная) и заменим её на «Александра Невского». Clear ALL Set near off && включаем нежёсткий режим поиска Use Streets Set index to && закрываем все дополнительные индексные файлы INDEX on street_nam to ind_name && создаём новый индексный файл по полю street_nam SEEK ”Урицкого” && быстрый поиск возможен только с использованием индекса If Found() Replace street_nam WITH ” Александра Невского ” else ? ”Нет такого имени” endif BROWSE && проверим, что сейчас таблица упорядочена по алфавиту по полю street _ nam Set index to Связи между таблицами SET RELATION TO < ключевое поле > INTO < область >, … [ ADDITIVE ] – связывает указатель записей в активной рабочей области с указателями записей из других рабочих областей по заданному полю. Дочерние таблицы должны быть открыты, и в обязательном порядке проиндексированы по ключевым полям. Создаётся связь вида 1:1. SET RELATION TO без параметров – разрывает связи между всеми таблицами. SET SKIP TO <область> – преобразует связь 1:1 к связи 1:М JOIN <параметры> – альтернативный вариант команды для связывания таблиц Пример: создадим программу, осуществляющую выборку из двух таблиц, связанных по одному индексному полю. Программа должна запросить фамилию и вывести на экран владельцев телефонов с заданными фамилиями, номера их телефонов и адреса. clear select 1 use streets index on id_street to id_1 unique && совершенно очевидно, что код улицы уникален pathind = ndx (1) && функция возвращает путь к индексному файлу select 2 use phones_flat set relation to id_street into streets && связь один-к-одному var _ name = Space (30) && определим переменную текстового типа @ 4,4 SAY "Введите имя для дальнейшего поиска:" @ 5,4 GET var _ name PICTURE "@!" && воспользуемся простыми средствами ввода данных READ set filter to Alltrim(Upper(name))==AllTrim(m.var_name) && можно и так ... i=1 FormatFont =" FONT ' Courier ',12 " && эта переменная будет использована как макроподстановка @ 6,1 && всего лишь начало области вывода do while not eof () && самая простая команда вывода при желании может обрести неожиданный вес ? i PICTURE "@L 9999 " &FormatFont STYLE 'BI',; Padr(Substr(surname,1,At(" ",surname)),20," ") &FormatFont ,; house PICTURE "@R дом 9999 " FONT 'Tahoma',14 STYLE 'B',; " по ",; AllTrim(streets.street_typ) &FormatFont,; streets->street_nam &FormatFont i=i+1 skip enddo set filter to set relation to close indexes close tables erase "&pathind" |