Добавлен: 28.11.2018

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

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

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
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 

РОМАНОВА

М

.

С