Добавлен: 28.11.2018

Просмотров: 2438

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

21

SET TALK ON 
USE kadr 
LOCATE FOR 

ро

l='

Ж

Record = 3 

 

 

(

Запись

 

З

CONTINUE 
Record = 5 

 

 

(

Запись

 5) 

CONTINUE 
End of Locate scope.       (

Конец

 

границы

 

поиска

.) 

 

Кроме

 

рассмотренных

 

команд

 

имеется

 

полезная

 

функция

 

поиска

 

 LOOKUP(<

поле

1>,<

выр

>,<

поле

2>) 

Функция

 

ищет

 

первое

 

вхождение

 

искомого

 <

выражения

в

 

указанном

 <

поле

 2> 

активной

 

базы

 

данных

 

и

 

возвращает

 

значе

-

ние

 <

поля

 1> 

из

 

той

 

же

 

базы

Если

 

файл

 

индексирован

 

и

 

индекс

 

открыт

поиск

 

ведется

 

ускоренным

 

методом

если

 

нет

 - 

последо

-

вал

 

тельным

  (

подобно

 

команде

 LOCATE). 

Если

 

поиск

 

оказался

 

безуспешным

функция

 

возвращает

 

пустую

 

строку

а

 

указатель

 

записей

 

становится

 

ниже

 

последней

 

записи

 

базы

 (EOF()=.T.). 

Пример

. 

В

 

базе

 KADR.DBF 

с

 

помощью

 

функции

 LOOKUP() 

ищется

 

в

 

поле

 FAM 

первая

 

фамилия

начинающаяся

 

на

 

букву

 

'

П

', 

и

 

выводится

 

ее

 

табельный

 

номер

Кроме

 

того

для

 

проверки

 

в

 

команде

 ? 

выводится

 

и

 

сама

 

фамилия

и

 

номер

 

записи

 (FAM 

и

 

RECNO()). 

Результаты

 

работы

 

команды

 

приведены

 

справа

 

по

-

сле

 

знаков

 &&. 

Видим

что

 

сначала

 

выводится

 

табельный

 

номер

 

98 (

ПОТАПОВ

 

Д

.

П

. - 

запись

 

номер

 2). 

После

 

открытия

 

индексно

-

го

 

файла

  KADRFAM.IDX  (

индексирование

 

сделано

 

по

 

полю

 

FAM) 

выводятся

 

уже

 

данные

 

для

 

ПОПОВА

 

А

.

А

. (

запись

 

номер

 4), 

поскольку

 

по

 

алфавиту

 

он

 

стоит

 

выше

 

ПОТАПОВА

 

Д

.

П

USE kadr 
? LOOKUP(tab,'

П

',fam),fam,RECNO() 

&& 98 

ПОТАПОВ

 

Д

.

П

. 2 

SET INDEX TO kadrfam 
? LOOKUP(tab,'

П

',fam),fam,RECNO() 

&& 98 234 

ПОПОВ

 

А

.

А

. 4 

 

Математическая

 

обработка

 

базы

 

данных

 

 

COUNT [<

границы

>] [WHILE <

условие

>] [FOR <

условие

>] 

[

ТО

 <

переменная

>] 


background image

 

22

По

 

команде

 COUNT 

подсчитывается

 

число

 

записей

 

в

 

за

-

данных

 

границах

удовлетворяющих

 

условиям

которое

 

заносит

-

ся

 

в

 

указанную

 <

переменную

>. 

 
SUM [<

границы

>] [WHILE <

условие

>][FOR <

условие

>] 

<

список

 

выражений

>[

ТО

  <

переменные

>/

ТО

 ARRAY <

мас

-

сив

>] 

По

 

команде

 SUM 

суммируются

 

значения

 

перечисленных

 

числовых

 

полей

 

в

 

указанные

 <

переменные

или

 <

массив

 

 

А

VERAGE [<

границы

>] [WHILE <

условие

>] [FOR <

усло

-

вие

>] <

список

 

выражений

> [

ТО

  <

переменные

>/

ТО

 ARRAY 

<

массив

>] 

По

 

команде

 AVERAGE 

подсчитывается

 

среднее

 

арифме

-

тическое

 

при

 

тех

 

же

 

допущениях

что

 

и

 

для

 

предыдущей

 

коман

-

ды

 
CALCULATE [<

границы

>] [WHILE <

условие

[FOR <

условие

>] <

список

 

выражений

 [

ТО

 <

переменные

>/

ТО

 ARRAY <

массив

>] 

Команда

 CALCULATE 

позволяет

 

вести

 

математические

 

расчеты

 

в

 

базе

 

данных

. <

Список

 

выражений

может

 

содержать

 

любую

 

комбинацию

 

следующих

 

внутренних

 

для

 

данной

 

команды

 

функций

-AVG(<

выр

N>) - 

среднее

 

арифметическое

 

для

 

выражения

 

с

 

полем

, -CNT()  - 

число

 

записей

 

в

 

базе

 

данных

-

МАХ

(<

выр

>) - 

максимальное

 

значение

 <

выр

от

 

поля

 

лю

-

бого

 

типа

-MIN(<

выр

>)  - 

минимальное

 

значение

  <

выр

от

 

поля

 

лю

-

бого

 

типа

 
 
 
 
 
 
 
 
 
 


background image

 

23

Задание

  1 

 

1. 

Создать

 

файлы

 

со

 

следующей

 

структурой

 

Имя

 

файла

 : GROUP 

 

Имя

 

поля

 

Тип

 

поля

 

Содержание

 

NSTUD 

Числовое

 

Идентификатор

 

FAMILY 

символьное

 

Фамилия

 

NAME 

Символьное

 

Имя

 

DATE 

Дата

 

Дата

 

рождения

 

SEX 

Символьное

 

Пол

 

студента

 

POLICE 

Номер

 

полиса

 

 

PLASE Memo- 

поле

 

Адрес

  

 

Имя

 

файла

 : STUDY 

 

NSUD 

Числовое

 

Идентификатор

 

SUBJECT 

символьное

 

Название

 

предмета

 

BALL 

Числовое

 

оценка

 

 

2. 

Заполнить

 

файлы

 

значениями

 

данных

 ( 

не

 

менее

 10 

в

 

файле

 

GROUP 

и

 

не

 

менее

 30 

в

 

файле

 STUDY. 

3. 

Вывести

 

для

 

просмотра

 

на

 

экран

 

содержимое

 

файлов

 

с

 

соот

-

ветствующими

 

заголовками

 

полей

 

на

 

русском

 

языке

4. 

Увеличить

   

все

 

значения

 

в

 

поле

 NSTUD 

на

  10 

для

 

файла

 

STUDY ( 

для

 

выполенеия

 

этого

 

задания

 

создать

 

файл

 

STUDY1, 

в

 

который

 

предварительно

 

копируется

 

вся

 

инфор

-

мация

 

из

 

исходного

 

файла

) . 

5. 

Пометить

 

для

 

удаления

 

все

 

записи

 

файла

 STUDY1, 

относя

-

щиеся

 

к

  

математике

6. 

Вывети

 

в

 

текстовый

 

файл

 

всю

 

информацию

 

из

 

файла

 

GROUP 

для

 

студентов

родившихся

 

до

 1.01.1985 

г

7. 

Вывести

 

в

 

текстовые

 

файлы

 

поля

 NSTUD, FAMILY, NAME, 

DATA 

отдельно

 

для

 

мужчин

 

и

 

женщин

 

Для

 

проверки

 

выполнения

 

лабораторной

 

работы

 

студент

 

должен

 

представить

 

файлы

-DBF : GROUP, STUDY,STUDY1  

и

 

текстовые

 

файлы

 

с

 

результатами

 

выполнения

 

заданий

 6, 7. 

 
 


background image

 

24

2. 

ИНДЕКСИРОВАНИЕ

 

БАЗ

 

ДАННЫХ

 

 

Важнейшим

 

элементом

 

любой

 

системы

 

управления

 

база

-

ми

 

данных

 

является

 

наличие

 

средств

 

ускоренного

 

поиска

 

дан

-

ных

поскольку

 

поиск

 - 

самая

 

распространенная

 

операция

 

в

 

сис

-

темах

 

обработки

 

данных

Этот

 

механизм

 

обычно

 

реализуется

 

введением

 

так

 

называемых

 

индексных

 

файлов

  (

индексов

). 

Они

 

имеют

 

расширение

 

имени

 IDX 

или

 CDX. 

Если

 

файл

 

проиндексирован

команды

 DISPLAY, EDIT, 

BROWSE, SKIP, REPLACE 

и

 

все

 

другие

 

команды

связанные

 

с

 

движением

 

в

 

базе

 

данных

перемещают

 

указатель

 

записей

 

в

 

со

-

ответствии

 

с

 

индексом

а

 

не

 

с

 

физическим

 

порядком

 

расположе

-

ния

 

записей

Так

команды

 GO TOP 

и

 GO BOTTOM 

устанавли

-

вают

 

указатель

 

записей

 

не

 

на

 

первую

  (

номер

 1) 

и

 

последнюю

 

физические

 

записи

а

 

на

 

начальную

 

и

 

конечную

 

записи

 

индекса

 

соответственно

Один

 

файл

 

базы

 

данных

 

может

 

быть

 

проиндексирован

 

по

 

нескольким

 

полям

 

и

 

иметь

 

любое

 

число

 

индексов

  (

индексных

 

файлов

), 

которое

 

ограничено

 

только

 

дисковой

 

памятью

 

компью

-

тера

Индексные

 

файлы

 

содержат

 

информацию

 

о

 

расположении

 

записей

 

файла

 

базы

 

данных

 

в

 

алфавитном

хронологическом

 

или

 

числовом

 

порядке

 

для

 

того

 

поля

/

полей

по

 

которому

 

выпол

-

нено

 

индексирование

Допускается

 

индексирование

 

и

 

по

 

логиче

-

ским

 

полям

Расширение

 

индексного

 

файла

 – IDX. 

Размер

 

индексного

 

файла

 

сравним

 

с

 

объемом

 

дискового

 

пространства

занимаемого

 

полем

 

базы

 

данных

по

 

которому

 

было

 

произведено

 

индексирование

Таким

 

образом

например

если

 

база

 

проиндексирована

 

по

 

всем

 

полям

суммарный

 

размер

 

всех

 

индексов

 

будет

 

близок

  (

или

 

больше

к

 

размеру

 

всей

 

базы

 

данных

Кроме

 

того

замедляются

 

операции

 

ввода

/

редак

-

тирования

 

данных

 

в

 

базе

поскольку

 

при

 

дополнении

 

ее

 

новой

 

записью

 

индексный

 

файл

 

должен

 

быть

 

автоматически

 

пере

-

строен

 

в

 

соответствии

 

с

 

новыми

 

или

 

измененными

 

данными

Индексирование

 

выполняется

 

следующей

 

командой

 INDEX 

ON 

<

выр

>

ТО

 <IDX-

файл

[FOR <

условие

>] [COMPACT] [DESCENDING] 

[UNIQUE] [ADDITIVE] 
 
 


background image

 

25

Опции

 

команды

<

выр

> - 

индексный

 

ключ

-

выражение

Его

 

длина

 

может

 

достигать

 100 

символов

 

для

 IDX-

файлов

 

и

 240 

для

 CDX-

файлов

Чаще

 

всего

 

ключ

 

это

 

имя

 

поля

по

 

которому

 

нужно

 

упорядочить

 

файл

Однако

ключ

 

может

 

быть

 

и

 

составным

 - 

из

 

нескольких

 

полей

Он

 

может

 

быть

 

и

 

функцией

 

полей

 

и

 

переменных

ТО

 <IDX-

файл

> - 

дает

 

имя

 

одноиндексному

 

файлу

FOR <

условие

> -  

устанавливает

 

режим

 

отбора

 

в

 

индекс

 

только

 

тех

 

записей

 

базы

 

данных

которые

 

отвечают

 

заданному

 

<

условию

>. 

При

 

наличии

 

такого

действующего

как

 

фильтр

ин

-

декса

 

доступ

 

к

 

нужным

 

данным

 

осуществляется

 

исключительно

 

быстро

COMPACT

 

с

 

этой

 

опцией

 

будет

 

создан

 

компактный

 IDX-

файл

Целесообразно

 

использовать

 

только

 

компактные

 

индексы

 

Для

 IDX-

файлов

 

индексирование

 

всегда

 

осуществляется

 

по

 

возрастанию

однако

 

параметр

 DESCENDING 

можно

 

вклю

-

чить

 

в

 

команды

 

открытия

 

индексов

 

любого

 

типа

независимо

 

от

 

того

какой

 

закон

 

был

 

указан

 

в

 

команде

 

индексирования

По

 

умолчанию

 

индексирование

 

выполняется

 

по

 

возрастанию

UNIQUE - 

означает

что

если

 

в

 

базе

 

данных

 

встречаются

 

записи

 

с

 

одинаковым

 

значением

 

ключа

все

 

такие

 

записи

кроме

 

первой

игнорируются

  (

не

 

включаются

 

в

 

индекс

). 

Этим

 

процес

-

сом

 

можно

 

управлять

 

также

 

с

 

помощью

 

команды

 SET UNIQUE 

TO. 

ADDITIVE

 

вновь

 

создаваемые

 

индексные

 

файлы

 

не

 

за

-

кроют

 

уже

 

открытые

 

к

 

этому

 

моменту

По

 

умолчанию

 

вновь

 

соз

-

даваемые

 

индексы

 

закрывают

 

все

 

ранее

 

открытые

 

индексы

 

для

 

текущей

 

базы

 

данных

Пример

. 

Пусть

 

мы

 

хотим

 

упорядочить

 

базу

 KADR 

в

 

поряд

-

ке

 

возрастания

 

табельных

 

номеров

Тогда

 

необходимо

 

создать

 

индексный

 

файл

 

по

 

полю

 TAB. 

Назовем

 

его

 KADRTAB.IDX. 

USE kadr 
INDEX ON tab TO kadrtab 
LIST tab,fam 
Record 

 TAB 

 FAM 

3   6  

КУЛАКОВА

 

М

.

И

1   13 

 

СИДОРОВ

 

П

.

С

7   54 

 

ЯКОВЛЕВ

 

А

.

И

2   98 

 

ПОТАПОВ

 

Д

.

П

4   234 

 

ПОПОВ

 

А

.

А

6   468 

 

МИРОНОВ

 

Р

.

И

5   890 

 

РОМАНОВА

 

М

.

С