ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 2684
Скачиваний: 8
16
Примеры
:
USE kadr
DISPLAY ALL TO FILE kadr
-
выдача
всех
записей
в
файл
KADR.
ТХТ
DISPLAY fam WHILE tab#'890'-
выдача
полей
FAM
всех
записей
до
тех
пор
,
пока
не
встретится
за
-
пись
с
ТАВ
='890’
GO
4
-
переход
к
четвертой
записи
DISPLAY REST FOR pol=’
Ж
’ .AND.sem='
Б
'
-
выдача
всех
записей
файла
,
начиная
с
четвертой
,
для
всех
женщин
,
состоящих
а
браке
GO TOP
-
переход
в
начало
файла
SET MEMOWIDTH
ТО
40
-
установление
ширины
вывода
мемо
-
поля
в
40
символов
DISPLAY fam, per OFF
-
вывод
иэ
текущей
(
первой
)
записи
поля
FAM
и
мемо
-
поля
PER.
Номер
записи
не
выводится
Команда
с
похожими
функциями
LIST
не
делает
периоди
-
ческих
остановок
при
выдаче
данных
,
и
по
умолчанию
область
ее
действия
не
текущая
запись
,
а
весь
файл
.
Ввиду
этого
ко
-
манда
более
пригодна
для
выдачи
данных
на
принтер
/
файл
.
Удаление
данных
В
FoxPro
имеется
несколько
команд
удаления
данных
:
ERASE <
файл
>
−
удаление
любого
не
открытого
в
данный
момент
файла
.
Расширение
имени
обязательно
.
Совершенно
аналогичные
функции
выполняет
команда
DELETE FILE
<
файл
>.
ZAP -
удаление
всех
записей
в
активном
файле
базы
дан
-
ных
с
сохранением
его
структуры
.
DELETE [<
границы
>] [WHILE <
условие
>] [FOR <
условие
>]
-
пометка
к
удалению
записей
в
указанных
границах
и
/
или
от
-
вечающих
указанным
условиям
. DELETE
без
параметров
по
-
мечает
только
одну
текущую
запись
.
PACK [MEMO][DBF] -
физическое
удаление
помеченных
ранее
записей
и
сжатие
файла
.
После
выполнения
команды
ука
-
затель
записей
устанавливается
в
начало
базы
.
Если
имеются
открытые
индексы
,
они
перестраиваются
.
По
умолчанию
упа
-
ковывается
как
файл
данных
(DBF),
так
и
файл
мемо
-
полей
(FPT).
Если
указан
параметр
MEMO,
то
упаковывается
только
FPT-
файл
,
если
DBF -
то
только
DBF-
файл
.
17
RECALL [<
границы
>] [WHILE <
условие
>] [FOR <
условие
>]
−
снятие
пометок
к
удалению
. RECALL
без
параметров
действует
только
на
текущую
запись
.
Удаление
записей
в
базе
данных
выполняется
в
два
эта
-
па
:
сначала
пометка
записей
на
удаление
(
она
возможна
и
в
ок
-
нах
редактирования
нажатием
клавиш
Ctrl-T)
командой
DELETE,
а
затем
их
физическое
уничтожение
командой
PACK.
Если
упа
-
ковка
файла
еще
не
произведена
,
можно
спасти
нужные
записи
командой
RECALL.
Команду
PACK
имеет
смысл
применять
не
только
для
удаления
записей
,
но
и
для
сжатия
мемо
-
полей
(PACK MEMO).
Дело
в
том
,
что
даже
при
видимом
уменьшении
размера
мемо
-
поля
(
например
,
в
результате
редактирования
)
уменьшается
только
доступная
пользователю
часть
,
но
размер
самого
FPT-
файла
никогда
не
сокращается
.
Таким
образом
,
при
интенсив
-
ном
обновлении
данных
с
участием
мемо
-
полей
вполне
возмож
-
но
недопустимое
«
разбухание
»
файла
примечаний
.
Примеры
:
USE kadr
?RECNO(),RECCOUNT() -
выдача
номера
текущей
записи
и
общего
их
числа
1 7
GO 5 —
переход
к
пятой
записи
SKIP
–3
—
возврат
ко
второй
записи
DELETE NEXT 3
-
пометка
к
удалению
Записей
2,3,4
RECALL RECORD 4
-
снятие
пометки
о
Записи
4
PACK
-
сжатие
файла
с
Возвратом
в
начало
?RECNO(),RECCOUNT()
1 5 -
осталось
5
записей
Для
иллюстрации
работы
FoxPro
применена
команда
,
вы
-
дающая
на
экран
перечисленные
в
ней
выражения
.
Более
под
-
робно
команда
будет
рассмотрена
позже
.
Команда
сжатия
PACK
в
базе
реальных
размеров
выпол
-
няется
медленно
,
и
поэтому
лучше
ее
делать
один
раз
в
день
или
даже
раз
в
несколько
дней
.
Чтобы
помеченные
к
удалению
записи
до
их
уничтожения
не
участвовали
далее
в
обработке
данных
,
можно
использовать
команду
SET DELETED ON
При
этом
такие
записи
делаются
как
бы
невидимыми
для
FoxPro
и
пользователя
,
за
исключением
случаев
прямого
на
них
указания
.
Например
,
команда
GO 20
установит
указатель
запи
-
сей
на
двадцатую
запись
независимо
от
того
,
была
или
нет
она
помечена
.
По
умолчанию
принято
значение
OFF.
18
Изменение
данных
В
FoxPro
имеется
возможность
не
только
вручную
редак
-
тировать
данные
,
но
и
изменять
их
путем
присвоений
или
вы
-
числений
.
REPLACE [<
границы
>] [WHILE <
условие
>] [FOR <
усло
-
вие
>] <
поле
1> WITH <
выражение
> [,<
поле
2> WITH <
вы
-
ражение
> ...]
[ADDITIVE][NOOPTIMIZE]
Эта
команда
осуществляет
множественное
изменение
по
-
лей
базы
данных
в
соответствии
с
заданными
выражениями
,
в
установленных
границах
и
при
заданных
условиях
.
Если
отсут
-
ствует
параметр
<
границы
>
или
<
условия
>,
изменена
будет
только
текущая
запись
.
Параметр
ADDITIVE
действует
для
ме
-
мо
-
полей
и
означает
,
что
заданное
<
выражение
>
будет
дописы
-
ваться
в
конец
поля
.
Если
этот
параметр
опущен
,
то
старое
зна
-
чение
мемо
-
поля
будет
замещено
<
выражением
>.
Для
иллюстрации
применения
этой
команды
создадим
еще
один
файл
базы
данных
по
учету
месячной
выработки
(
зар
-
платы
без
вычетов
)
всех
членов
бригады
номер
1.
Назовем
его
BRIG1.DBF.
Файл
будет
иметь
два
поля
: TAB -
табельный
номер
и
VIR -
выработка
-
зарплата
.
Командой
CREATE brig
установим
структуру
файла
(
рис
.1.7).
Name
Type
Uldth
Dec
TAB
VIR
NAMERIC
NAMERIC
3
7
0
0
Рис
1.7
Пример
.
Предположим
,
что
бригаде
1 (
файл
BRIG1.DBF)
выделена
премия
в
размере
20%
зарплаты
,
а
бригадиру
(
та
-
бельный
номер
98) -
еще
500000
руб
.
Премия
не
начисляется
тем
рабочим
,
которые
в
данном
месяце
отработали
менее
одно
-
го
дня
(
выработка
менее
10000
руб
.).
С
учетом
сказанного
в
файле
необходимо
увеличить
значения
всех
полей
VIR
в
1.2
раза
,
если
VIR> 10000,
а
в
записи
с
ТАВ
=98
прибавить
еще
100000.
USE brig1
REPLACE vir WITH vir*1.2 FOR vir>10000
REPLACE vir WITH vir+100000 FOR tab=98
Начальное
содержимое
базы
данных
представлено
на
рис
.1.8,
а
новое
-
на
рис
.1.9.
19
TAB
VIR
TAB
VIR
1
2
3
4
98
6
13
68
250000
14000
400
201000
1
2
3
4
98
6
13
68
400000
168000
4000
241200
Рис
. 1.8
Рис
. 1.9
Команда
REPLACE
эквивалентна
знаку
равенства
в
опе
-
рации
присвоения
для
переменных
.
Буквально
фраза
<
поле
>
WITH <
выражение
>
соответствует
присвоению
<
по
-
ле
>=<
выражение
>.
Очистку
полей
базы
данных
выполняет
команда
BLANK [<
границы
>] [FIELDS <
поля
>]
[WHILE <
условие
>] [FOR <
условие
>] [NOOPTIMIZE
Если
отсутствуют
<
границы
>
или
<
условия
>,
очищена
бу
-
дет
только
текущая
запись
. BLANK
без
параметра
FIELDS
очи
-
щает
все
поля
базы
.
Локализация
и
поиск
данных
Фильтрация
данных
Хотя
в
команде
BROWSE,
например
,
имеется
возмож
-
ность
осуществить
отбор
записей
из
базы
с
помощью
опций
FOR
и
KEY,
в
других
командах
это
может
оказаться
невозмож
-
ным
или
неудобным
.
В
силу
этого
в
FoxPro
предусмотрена
спе
-
циальная
команда
вида
SET FILTER TO [<
условие
>],
которая
позволяет
установить
FOR-
условие
для
всех
без
исклю
-
чения
команд
обработки
данных
.
Здесь
<
условие
>
указывает
на
то
,
какие
именно
записи
могут
быть
доступны
для
обработки
.
Например
,
команда
SET FILTER TO fam='
И
B'
сделает
доступными
для
обработки
только
записи
,
в
которых
фамилия
сотрудника
начинается
с
букв
«
ИВ
».
Команда
SET
FILTER
действует
исключительно
на
ту
базу
,
которая
открыта
и
активна
в
данный
момент
.
Выяснить
выражение
фильтра
для
текущей
или
указанной
рабочей
области
можно
с
помощью
функции
FILTER([<
область
>])
20
В
FoxPro
имеются
разнообразные
команды
поиска
запи
-
сей
,
которые
реализуют
как
последовательный
,
так
и
ускорен
-
ный
алгоритмы
.
При
последовательном
поиске
выполняется
сплошной
перебор
записей
файла
базы
данных
до
установки
указателя
записей
на
искомую
запись
.
Начальный
поиск
данных
Следующая
команда
осуществляет
последовательный
поиск
одной
самой
первой
записи
в
базе
данных
,
удовлетво
-
ряющей
заданному
FOR-
условию
,
среди
записей
,
находящихся
в
заданных
границах
,
и
до
тех
пор
,
пока
соблюдается
WHILE-
условие
(
если
есть
).
•
LOCATE [<
границы
>] FOR <
условие
> [WHILE <
условие
>]
В
случае
,
если
границы
и
WHILE-
условие
отсутствуют
,
по
-
иск
ведется
во
всем
файле
,
начиная
с
первой
записи
.
При
ус
-
пешном
поиске
указатель
записей
устанавливается
на
найден
-
ную
запись
,
функция
RECNO()
равна
номеру
этой
записи
,
а
функция
FOUND(),
оценивающая
результат
поиска
,
возвращает
значение
«
Истина
» (.
Т
.).
При
неудачном
поиске
функция
RECNO()
равна
числу
записей
в
базе
плюс
1, FOUND()=.F.,
а
функция
достижения
конца
файла
EOF()
возвращает
.
Т
.
Продолжение
поиска
Команда
,
которая
продолжает
поиск
записей
,
начатый
ра
-
нее
командой
LOCATE,
приведена
ниже
:
•
CONTINUE,
которая
эквивалентна
команде
LOCATE REST FOR <
условие
>
[WHILE <
условие
>].
Если
командой
LOCATE
или
CONTINUE
не
было
найдено
нужных
записей
,
указатель
записей
устанавлива
-
ется
на
нижнюю
границу
поиска
(
если
она
введена
в
команде
)
или
на
конец
файла
(EOF()=.T.).
Результатом
применения
команд
(
если
SET TALK ON)
яв
-
ляются
сообщения
о
номере
каждой
найденной
записи
или
/
и
достижении
границы
поиска
.
Пример
.
В
файле
KADR (
его
содержимое
представлено
при
описании
команды
BROWSE)
необходимо
найти
все
записи
о
женщинах
,
т
.
е
.
те
записи
,
в
которых
POL=’
Ж
’.
Вводимые
ко
-
манды
и
реакции
системы
изображены
ниже
(
найдены
записи
с
номерами
3
и
5).