- •Информационные системы
- •Пользователи информационных систем
- •Преимущество и проблемы интеграции информации
- •Проектирование баз данных
- •Выбор субд
- •Дата логическое проектирование
- •4 Нормальная форма
- •Операции над рбк
- •Обработка отношений
- •Размещение данных в памяти эвм
- •Язык запросов sql
- •Субд Microsoft Access
- •Субд FoXPro
- •Команды управления
- •Структура системных команд foxpro
- •Индексирование баз данных
- •Index on fio to kadrsex // sex – половая принадлежность
- •If found() // а если найду?
- •Язык vba (Visual Basic Application)
Команды управления
alias команда=k
Команда if
if <усл>
<k>
[else
<k>]
endif
Команда do case
do case
case <усл1>
<k1>
case < усл2>
<k2>
…
[otherwise
<k-ды>]
endcase
Команда do while
do while <усл>
<k>
enddo
Пока выполняется условие команда выполняется
exit – позволяет выходить из цикла досрочно
loop – досрочно отправляет на конец цикла
Цикл for
for <перем>=<вырN1> to <вырN2>[step <вырN3>]
….
endfor
Цикл сканирования базы данных – scan
scan [<границы>][for<усл>][while<усл>]
<k>
endscan
Пример программы
use kadr
scan for fam=”П”
zarp=zarp*2
endscan
Команда locate – поиск по условию
locate for <усл> [<границы>][while<усл>]
Эта команда находит только первую строку, соответствующую заданному условию
Она устанавливает функцию found() в состояние true.
Команда обычно используется в паре со следующими операторами:
locate -> if found()
locate do while found()
Команда continue заставляет do while искать дальше.
Структура системных команд foxpro
Название команды [<границы>][<список выражений>][for<усл>][WHILE <усл>]
[<границы>]:
ALL – весь диапазон базы данных;
REST – следующий диапазон базы данных ниже курсора;
NEXT N – следующие N записей;
RECORD N – N-ная запись.
for и while условия могут присутствовать одновременно. Приоритетным при этом является while.
Create <имя т> - создать новую таблицу
append - добавление новой строки в таблицу
list, browse, display, change (так же изменяет) – вывод данных.
go top, go bottom, go <n>, skip <n>
locate
modify command <имя ф> -
do <name> - запуск программы
Индексирование баз данных
С целью ускорения поиска таблица базы данных может быть проиндексирована, то есть как бы упорядочена по некоторому полю. Пусть таблица упорядочивается по табельному номеру.
use kadr
index on tab to kadrtab.idx compact
list tab, fio
В итоге получится:
Nз |
таб |
фио |
3 |
6 |
Кулакова |
1 |
13 |
Сидоров |
7 |
54 |
Яковлев |
2 |
98 |
Потапов |
4 |
234 |
Попов |
6 |
468 |
Миронов |
5 |
890 |
Романов |
modify file kadrtab.idx
3-6
1-13
…
5-890
Замечание: каждый файл может иметь сколько угодно индексов.
При индексации создается индексный файл, позволяющий значительно ускорить поиск информации с помощью команды SEEK <выражение>.
Все команды типа “go top”, “go end”, “list” будут работать с проиндексированным файлом.
Индекс может быть сложным, поля при этом перечисляются через запятую.
Пример:
INDEX on fio, tab
Означает, что все сначала будут по фамилиям, и уже потом по табельному номеру.
index on <выражение> to <IDX-файл>[for<усл>] [compact]
compact означает, что индексный файл необходимо сжать.
Еще один пример:
use kadr
Index on fio to kadrsex // sex – половая принадлежность
for sex=”M” compact
list fio, zarpl
Результат:
N3 |
fio |
zarp |
6 |
Миронов |
10000 |
4 |
Попов |
12000 |
2 |
Потапов |
8000 |
1 |
Сидоров |
15000 |
7 |
Яковлев |
20000 |
Работа с индексами
Индексный файл уже существует и исходную таблицу надо открыть вместе с индексом:
use <table_file> index <index_file>
Исходная база уже открыта, необходимо только подключить индекс:
use <table_name>
…
set index to <index_file>
Для выгрузки индекса используется команда:
set index to
Контрольная по foxpro:
По тем же базам данных будет задание написать программу
Первая таблица: аптека (nom1, address, tel)
nom1 |
address |
tel |
1 |
… |
350 |
2 |
… |
400 |
… |
… |
… |
preparat (nom2,name, price)
nom2 |
name |
price |
1 |
asp |
10 |
2 |
citr |
20 |
3 |
andl |
30 |
4 |
par |
150 |
5 |
… |
… |
7 |
|
|
8 |
|
|
nalichie (nom1,nom2,col-vo)
nom1 |
nom2 |
kol-vo |
1 |
1 |
100 |
1 |
2 |
500 |
1 |
5 |
1000 |
2 |
1 |
100 |
2 |
2 |
50 |
2 |
6 |
120 |
2 |
4 |
70 |
… |
… |
… |
Выдать номера, адрес, телефон аптек, в которых заданный препарат имеется в количестве меньше 100.
set talk off // отключить системные сообщения, писать не задумываясь
select a // вот в этом месте что-то вроде макросов на использование таблиц
use apteka
select b
use preparat
select c
use nalichie
nazvan = space(15) // назван становится 15-ю пробелами
str =3 // Номер строки на экране
@1,1 say «Введите название лекарства» get nazvan
read // записываем введенные данные в переменную назван (название :D)
select b // АКТИВАЦИЯ ТАБЛИЦЫ PREPARAT!11
locate for nazvan = name // есть nazvan шоле?