Основные команды 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 <параметры> – мощное средство представления данных в табличном виде, позволяющее осуществлять просмотр и редактирование (ввод) записей в одной или нескольких таблицах. Параметры представления данных могут указываться интерактивно или с помощью параметров. Перечислим некоторые параметры команды:

  1. [ FIELDS <поле>[:<ключ>],…] – перечень предъявляемых полей (по умолчанию – все). Примеры ключей: :< n > – видимый размер поля в символах : R – разрешён только просмотр поля, : H =<имя> – указание собственного заголовка поля; : W =<выражение> – условие для входа в поле;
  2. [ FOR <условие>] – фильтр для записей;
  3. [ VALID <условие> [ ERROR <сообщение>]] – контроль выхода из текущей записи (т.е. если <условие> истинно, запись покинуть разрешается, иначе появится <сообщение> об ошибке;
  4. [ WHEN <условие>] – контроль доступа к записи (если false , запись только для чтения)
  5. [ NOEDIT ] – редактирование невозможно для всей таблицы
  6. [NODELETE] – удаление записей невозможно
  7. [NOAPPEND] – дополнение базы невозможно
  8. [ NOWAIT ] – после открытия окна управление сразу передаётся программе
  9. [ LOCK < n >] – разделение окна по вертикали: линия раздела проходит за первыми n полями
  10. [ LEDIT | REDIT ] – левая или правая части окна превращаются в CHANGE

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"

назад главная вперед