- •Лабораторная работа №2
- •1.Индексирование баз данных
- •Создание индекса
- •2.Создание взаимосвязей
- •Для определения связей между таблицами откройте окно конструктора бд и выполните следующие действия:
- •Определение условий целостности данных
- •Сортировка данных. Поиск данных. Фильтрация данных опции команд поиска, фильтрации
- •Поиск данных
- •Задание:
Сортировка данных. Поиск данных. Фильтрация данных опции команд поиска, фильтрации
Опции используются со многими командами. Опции определяют список имен полей, с которыми будет работать команда, количество рассматриваемых строк таблицы и порядок выполнения действий.
FIELDS – указывает на то, что команда будет использовать только те поля, которые перечислены в опции
FOR и WHILE – команда будет применена только к тем строкам таблицы, для которых истины соответствующие логические значения (<Выр.L>)
ALL – команда действует на все записи таблицы
NEXT<число> -команда действует на заданное <число> записей, считая от текущей записи
RECORD<номер> - команда действует на запись с указанным номером
REST – команда действует на все записи. Начиная от текущей записи и до конца таблицы
В FOXPRO предусмотрена специальная команда, которая устанавливает FOR-условие для всех команд обработки данных текущей базы данных:
SET FILTER TO [<условие>]
Фильтр начинает действовать только в том случае, если после команды SET FILTER TO [<условие>] произведено перемещение указателя записей в файле БД.
Команда SET FILTER TO отменяет установленный фильтр.
Поиск данных
∙Последовательный поиск
а) Начальный поиск – последовательный поиск одной самой первой записи в БД, удовлетворяющей заданному условию и находящейся в заданных границах (по умолчанию поиск ведется во всем файле, начиная с 1-ой записи ):
LOCATE FOR <условие> [<границы>] [WHILE<условие>]
При успешном завершении команды функция RECNO() возвратит номер найденной записи, а функция FOUND() –значение .Т. ,
при неудачном поиске функция RECNO() возвратит число записей БД + 1, а функция FOUND() - значение .F.
б) Продолжение поиска, начатого ранее командой LOCATE:
CONTINUE
∙Поиск по полю текущего индекса
SEEK <искомое значение>
В случае удачного и неудачного поиска команда SEEK управляет курсором так же, как и команда LOCATE.
Пример 1
Поиск методом LOCATE
**Установим путь для поиска файлов по умолчанию
Set default to e:\elena\бд_спо\решения_лабыбд\создбд_170407
close databases
Clear
close table all
**Открываем таблицу s_fio
select 0
use s_fio alias ff
Store 0 to num
Locate for Fam="Петров"
DO WHILE FOUND()
Num =Num+1
**Если найден Петров, выводим фамилию и порядковый номер записи
? "Фамилия =" AT 2,Fam AT 15,"Порядковый номер ="AT 30, Num AT 50
CONTINUE
ENDDO
Browse
Пример2
Поиск методом SEEK
**Установим путь для поиска файлов по умолчанию
Set default to e:\elena\бд_спо\решения_лабыбд\создбд_170407
close databases
Clear
close table all
**Открываем таблицу s_sessia
select 0
use s_sessia alias s
Set order to n_pred && Для поиска по наименованию предмета установим индекс по этому полю
Set Exact OFF && установим режим поиск по первым совпадающим символам
** можно воспользовааться, тем фактом, что при успешном поиске команда
** SEEK( ) возвращает .T.
IF SEEK ("Прогр")
Replace semestr with 4&& в случае успешного поиска по полю назвавание предмета изменяем
** в текущей записи поле semestr на значение 4
ENDIF
Browse
Пример3
Реализована связь трех таблиц rezultat, s_fio, s_sessia. Между таблицами s_fio и rezultat связь один ко многим и между s_sessia и rezultat связь один ко многим. Соглпсно следующей схемы:
Вывести значения из трех связанных таблиц
Set default to e:\elena\бд_спо\решения_лабыбд\создбд_170407
close databases
close tables all
clear all
*открываем дочернюю таблицу rezultat
select 0
use rezultat alias z
SET ORDER TO Stud
* открываем родит. таблицу s_fio и связываем с дочерней таблицей rezultat
select 0
use s_fio alias ff
SET RELATION TO id_stud INTO z
SET SKIP TO z && устанавливаем связь один ко многим
*
browse fields ff.fam, z.rezalt
* открываем родит. табл. s_sessia и связываем с дочерней таблицей rezultat
select 0
use s_sessia alias s
SET ORDER TO n_pred
SET RELATION TO id_pred INTO z ADDITIVE
SET SKIP TO z&& устанавливаем связь один ко многим
*
browse fields ff.fam, z.rezalt, s.name_pred, s.semestr
