Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД_ЛАБОРАТОРНАЯ РАБОТА_2_VFP.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
123.39 Кб
Скачать
  1. Сортировка данных. Поиск данных. Фильтрация данных опции команд поиска, фильтрации

Опции используются со многими командами. Опции определяют список имен полей, с которыми будет работать команда, количество рассматриваемых строк таблицы и порядок выполнения действий.

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