СУБД Fox-Pro - Томский политехнический университет

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Государственное автономное образовательное учреждение высшего образования
«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Учебно-методические указания к
лабораторным работам №4-5
СУБД FoxPro
Томск 2015 г.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
4
1
Понятие базы данных
5
2
FoxPro
7
3
2.1 Работа с данными в среде FoxPro
8
2.2 Создание программных продуктов
8
Системный интерфейс FoxPro
9
3.1 Главное меню СУБД
4
5
9
3.1.1
Меню FoxPro для DOS
3.1.2
Главное окно и меню FoxPro для Windows.
9
Обозначения и структура команд СУБД
12
12
4.1 Знаки операций
13
4.2 Структура команд
14
Создание файла базы данных
15
5.1 Создание структуры файла
15
5.2 Заполнение базы данных
16
5.3 Дополнение БД
17
6
Окно редактирования
17
7
Команда BROWSE
18
8
Перемещения в базе данных
18
9
Просмотр данных
18
Удаление данных
19
10
ИЗМЕНЕНИЕ ДАННЫХ
19
11
ЛОКАЛИЗАЦИЯ И ПОИСК ДАННЫХ В БАЗЕ
20
11.1
Фильтрация данных
21
11.2
Последовательный поиск
21
11.3
Продолжение поиска
21
12
Индексирование баз данных
21
13
Работа с несколькими базами
23
13.1
Понятие о рабочих областях
23
13.2
Связь вида одна_запись_к_одной
24
2
13.3
Связь вида одна_запись_ко_многим
24
14
СОЗДАНИЕ КОМАНДНЫХ ФАЙЛОВ
24
15
Команды ввода-вывода
25
16
Работа с переменными
25
17
Команды управления
26
18
Организация циклов
26
19
20
21
18.1
Цикл с условием
26
18.2
Цикл с параметром
27
18.3
Цикл сканирования базы данных
27
Функции СУБД
27
19.1
Математические функции
27
19.2
Строковые функции
28
19.3
Функции работы с датами
28
19.4
Функции преобразования типов данных
28
19.5
Функция анализа условий
28
Манипулирование файлами
28
20.1
Копирование файлов БД
28
20.2
Сортировка данных
28
20.3
Математическая обработка БД
29
20.4
Вывод текстовых файлов
29
Команды языка запросов SQL
29
21.1
Создание баз данных
29
21.2
Дополнение базы
29
21.3
Формирование запросов из базы данных (команда SELECT)
30
3
ВВЕДЕНИЕ
Данные
учебно-методические указания содержат
теоретический
материал
необходимый для выполнения лабораторных работ №4-5 «Основы работы в СУБД
FoxPro» по курсу Информатика 1.1. В частности, рассматриваются понятие базы
данных, системный интерфейс и некоторые приемы работы в СУБД FoxPro.
4
1 Понятие базы данных
В широком смысле слова БД – это совокупность сведений о конкретных объектах
реального мира в какой-либо предметной области или разделе предметной области. В
этом определении, вообще говоря, отсутствует упоминание о персональном
компьютере. Например, если Вы – частный врач, то базой данных можно считать
картотеку Вашего кабинета, которую Вы ведете на бумажных или картонных
карточках и храните на стеллажах или в коробках. В общем смысле термин “база
данных”
можно
применить
к
любой
совокупности
связанной
информации,
объединенной вместе по определенному признаку. Набор данных должен быть
организован определенным образом, поэтому, например, расписание движения поездов
может быть рассмотрено как база данных, а Ваша записная книжка, если только Вы не
записываете в нее информацию в виде таблицы, не может считаться БД.
Большинство БД для хранения данных используют таблицы. Каждая таблица
состоит из строк и столбцов, которые в компьютерных базах данных называются,
соответственно, записями и полями.
Все записи состоят из одинаковых полей. Данные для одного поля во всех
записях имеют одинаковый тип, но разные поля могут иметь разный тип данных.
Основным назначением баз данных является быстрый поиск содержащейся в них
информации. Компьютерные базы данных обеспечивают высокую скорость поиска
информации, их достаточно просто можно модифицировать, они обладают высокой
компактностью.
Существует
значительное
количество
программ,
которые
позволяют
организовать информацию и поместить ее в таблицу. Однако далеко не любая
СУБД
БД
ПОЛЬЗОВАТЕЛИ
Рис.1. Взаимодействие БД, СУБД и конечных пользователей
программа
позволяет
пользователю
широкие
возможности
по
эффективному
управлению базой данных.
Для взаимодействия пользователя с БД используются системы управления базами
данных (СУБД).
Современные СУБД обеспечивают:
5
 набор средств для поддержки таблиц и соотношений между связанными
таблицами;
 развитый пользовательский интерфейс, который позволяет Вам вводить и
модифицировать информацию, выполнять поиск и представлять информацию в
текстовом или графическом виде;
 средства программирования высокого уровня, с помощью которых Вы можете
создать собственные приложения.
В наиболее полном варианте они могут иметь следующие компоненты:
а) Среда пользователя, дающая возможность непосредственного управления
данными с клавиатуры.
б) Алгоритмический язык для программирования прикладных систем обработки
данных, реализованный как интерпретатор. Последнее позволяет быстро создавать и
отлаживать программы.
в)
Компилятор
для
придания
завершенной
программе
вида
готового
рутинных
операций
коммерческого продукта в форме независимого EXE-файла.
г)
Программы-утилиты
быстрого
программирования
(генераторы отчетов, экранов, меню и других приложений).
Собственно СУБД – это, конечно, оболочка пользователя. Ввиду того, что такая
среда ориентирована на немедленное удовлетворение его запросов, это всегда системаинтерпретатор. Наличие в СУБД языка программирования позволяет создавать
сложные системы обработки данных, ориентированные под конкретные задачи и даже
под конкретного пользователя.
С помощью СУБД Вы можете:

выбрать информацию, представляющую для Вас интерес;

напечатать всю таблицу или только выбранные записи и поля в
различных форматах;

выполнить различные вычисления в процессе подготовки отчетов или
выбора данных из таблиц и т.д.
Важнейшей характеристикой любой СУБД является используемый в ней тип
транслятора (интерпретатор или компилятор). Программы, написанные для системыинтерпретатора, исполняются лишь в присутствии самой системы.
6
2 FoxPro
СУБД FoxPro (фирма Fox Software) обладает исключительно высокими
скоростными
характеристиками.
Набор
команд
и
функций,
предлагаемых
разработчикам программных продуктов в среде FoxPro, по мощи и гибкости отвечает
любым современным требованиям к представлению и обработке данных. Здесь может
быть реализован максимально удобный, гибкий и эффектный пользовательский
интерфейс. В FoxPro поддерживаются разнообразные всплывающие и многоуровневые
меню, работа с окнами и мышью, реализованы управление цветами, настройка
принтера и т.д. Система также обладает средствами быстрой генерации экранов,
отчетов и меню, хорошо работает в сети. В пакете имеется компилятор, позволяющий
при желании сформировать EXE-файлы готовых программ.
В России FoxPro долгое время был самым популярным инструментом для
создания баз данных. В настоящее время его несколько потеснили такие средства
разработки как Delphi, MS Access и MS Visual Basic. Но и сейчас Foxpro остается одним
из самых популярных инструментов для разработки баз. На нем написано БОЛЬШЕ
ВСЕГО бухгалтерских, экономических и других приложений, связанных с расчетами и
хранением информации. На данный момент вышла уже 9 версия Visual Foxpro.
В данной лабораторной работе мы будем использовать несколько устаревшие
версии, что связано с наличием для них встроенной помощи на русском языке.
В компьютерном классе ФТФ запуск FoxPro можно осуществлять:
1) FoxPro
для
DOS
–
находясь
на
диске
U:\,
выполнить
команду
L:\foxpro\foxpror.exe;
2) FoxPro для Windows – выполнить команду L:\FP26W\foxprow_.exe (и
использовать для выполнения задания файлы с диска L:, имена которых заканчиваются
на w).
В FoxPro можно создавать и обрабатывать несколько типов дисковых файлов. Для
всех файлов FoxPro установлены стандартные расширения. Основные из них:
<имя>.DBF – файл базы данных – являются главными файлами данных в СУБД и
термин “База Данных” будем относить именно к ним; <имя>.IDX – индексный файл;
<имя>.PRG – командный, программный файл; <имя>.FXP – откомпилированный
командный файл PRG.
Файлы БД типа DBF являются основными носителями данных на диске. Они
имеют следующие характеристики: число записей в файле – до 1 млрд., размер записи
7
(в байтах) – до 4000, число полей в записи – до 255, число одновременно открытых баз
– до 25.
Типы и размеры полей (в байтах): символьные поля – до 254; числовые поля – до
20; поля дат – 8; логические поля – 1.
Символьные поля (поля типа С) допускают ввод любых алфавитно-цифровых
символов, знаков препинания и т.д.
2.1
Работа с данными в среде FoxPro
Обработка данных в FoxPro может выполняться следующим образом:
 непосредственная обработка данных пользователем через системные меню
FoxPro – для этого необходимо хорошо владеть интерфейсом системы и уметь читать
англоязычные сообщения. Здесь могут быть поставлены лишь очень простые задачи:
 обработка данных с помощью прикладных программ. Создание прикладных
продуктов в среде FoxPro может быть выполнено только квалифицированным
программистом. Использование готовых прикладных пакетов совершенно освобождает
пользователя от необходимости что-нибудь изучать, кроме самой прикладной системы,
а также от выполнения каких-либо технических действий по обработке данных и
позволяет сосредоточиться только на принятии содержательных решений.
 обработка данных с помощью программ, созданных средствами генератора
приложений.
2.2
FoxPro
Создание программных продуктов
обладает
эффективным
языком
программирования
прикладных
информационных систем, который напоминает такие языки, как Паскаль и С.
Ввиду того, что языки создания информационных систем ориентированы на
непосредственный диалог с пользователем по обработке данных, находящихся в
дисковых файлах, для них обычно характерны следующие особенности:
 наличие мощных команд обработки файлов; развитые средства ведения диалога
(меню, “горячие” клавиши);
 удобные средства ввода/редактирования данных; возможность ускоренного
доступа к данным (индексирование);
 удобный вывод данных на экран, бумагу, в текстовый файл; развитый аппарат
обработки символьных данных.
Всеми этими возможностями в высокой степени обладает язык FoxPro.
8
3 Системный интерфейс FoxPro
Рассмотрим основное меню системы. Остановимся только на важнейших
функциях интерфейса. Многие из пунктов основного и других меню подразумевают
возможность обращения к средствам управления следующего, более низкого уровня,
которые могут быть окнами ввода, меню или кнопками. В FoxPro такие пункты
завершаются многоточием и вызов, который они осуществляют, определяется
термином “вызов диалога”.
3.1
Главное меню СУБД
Сразу после загрузки системы на экране предъявляется главное меню СУБД,
через которое Вы можете непосредственно управлять данными, писать и отлаживать
программы, а также настраивать рабочую среду системы. Активация строки главного
меню осуществляется нажатием клавиши F10 или Alt. Непосредственный вызов
нужного пункта меню может быть осуществлен и нажатием клавиш Alt и выделенной
цветом (“горячей”) буквы пункта. При вызове меню может оказаться, что некоторые
его элементы окрашены в иной (“приглушенный”) цвет. Это значит, что они не могут
быть выбраны в данный момент (курсор не фиксируется на них) ввиду того, что нет
соответствующего объекта. Например, невозможно просмотреть базу данных, если она
еще не открыта.
3.1.1
Меню FoxPro для DOS
Общесистемные функции (SYSTEM-меню). Здесь реализованы средства доступа к
файлам, Help, а также “настольная оргтехника” – календарь, калькулятор и т.д.
Исключительно полезным является доступ к справочной информации через это меню
или просто с помощью клавиши F1. Окно Помощи кроме содержательной части
содержит ряд управляющих средств. Кнопки Topics, Next и Previous переносят читателя
назад в оглавление или к следующему/предыдущему разделу помощи. Через мен See
Also можно сразу перейти к разделам, на которые есть ссылки в данном месте.
Если Вы находитесь в окне Помощи, то получить нужную справку, например, по
функции MIN(), можно, быстренько нажав буквы M и I (то есть 1 или 2 первые буквы).
Работа с файлами СУБД (FILE-меню). В этом меню находятся средства
управления (открытие, закрытие, создание и т.п.) файлами, принадлежащими только
FoxPro:
9
New – создание нового файла;
Open – открытие имеющегося файла;
Close – закрытие активного окна;
Save – сохранение файла с тем же именем;
Save as – сохранение файла с новым именем;
Revert – выдача предыдущей версии текстового файла до всех изменений;
Printer Setup – определение принтера/порта для выдачи файла, форматирование
листа;
Print – печать файла;
Quit – выход в ДОС.
Работа с текстовым редактором (EDIT-меню). Редактор является важнейшим
инструментом при написании и отладке программ. Встроенный редактор FoxPro имеет
развитые возможности при работе с текстами, и их необходимо хорошенько изучить:
Undo – отмена последнего выполненного действия;
Redo – повторение действия, отмененного в Undo;
Cut – удаление из текста выделенной области с взятием ее в буфер клавиатуры;
Copy – копирование выделенного текста в буфер;
Paste – вывод содержимого буфера в текст;
Clear – очистка выделенной области без взятия ее в буфер;
Select All – выделение всего текста окна;
Goto Line – переход к строке с указанным номером;
Find – поиск заданного фрагмента текста;
Find Again – поиск следующего вхождения текста;
Replace And find Again – последовательный поиск вхождения с заменой;
Replace All – полная замена всех вхождений текста;
Preferences – настройка редактора.
Работа с базой данных (DATABASE-меню). Это меню содержит исключительно
средства управления базой данных и связанными с ней файлами:
Setup – модификация/создание/открытие баз данных, а также индексов и
фильтров;
Browse – вызов команды полноэкранного редактирования, при этом главное меню
дополняется справа пунктом Browse;
Append From – добавление записей из других БД/файлов;
10
Copy To – копирование в другие БД/файлы;
Sort – сортировка записей;
Total – создание БД с суммами по заданному признаку;
Average – среднее арифметическое числовых полей;
Count – подсчет записей с указанным признаком;
Sum – суммирование числовых полей;
Calculate – вычисления в базе данных;
Report – подключение ранее созданной формы отчета;
Label – подключение ранее созданной формы почтовых наклеек;
Pack – физическое удаление помеченных записей;
Reindex – переиндексация базы.
Работа с записями базы данных (RECORD-меню). Меню реализует действия по
обработке базы данных:
Append – вызов окна дополнения базы новыми записями;
Change – вызов окна редактирования записей;
Goto – переход к указанной записи;
Locate – последовательный поиск записи по ключу;
Continue – продолжение поиска (поиск следующей записи);
Seek – ускоренный индексный поиск по ключу;
Replace – изменения (вычисления) в базе данных;
Delete – пометка записей, предназначенных для удаления;
Recall – снятие пометок для удаления.
Работа с командными файлами (PROGRAM-меню). Через это меню можно
управлять исполнением командных файлов (типа PRG и других), а также компиляцией
и генерированием приложений:
Do – выбор командного файла и исполнение программы;
Cancel – прерывание программы;
Resume – продолжение программы;
Compile – переход в окно компиляции программы;
Generate – вызов генератора приложений;
FoxDoc – вызов документатора программ;
FoxGraph – вызов графического пакета FoxGraph;
Do <PRG-файл> – исполнение текущей программы (<PRG-файла>), загруженного
во внутренний редактор FoxPro.
11
Работа с окнами (WINDOW-меню). Здесь сосредоточены средства управления
системными и пользовательскими окнами FoxPro: открытие, закрытие, перемещение,
изменение размера т.д., а также средства отладки готовых программ.
3.1.2
Главное окно и меню FoxPro для Windows.
Внешний вид главного окна приведен на рис.2. Содержимое основных меню (File,
Рис.2. Главное окно FoxPro для Windows
Edit, Database, Program, Window) соответствует описанию аналогичных пунктов,
приведенному в разделе 3.1.1.
В окне ”Command ” Вы будете набирать собственно команды, либо при
выполнении каких-либо действий с помощью системного интерфейса соответствующие
команды будут отображаться в этом окне.
4 Обозначения и структура команд СУБД
Обозначения, используемые для описания синтаксиса команд при изучении
языка:
«Файл» – имя файла. Если нужно подчеркнуть тип файла, то может быть указано
и расширение его имени.
«Поле» – имя поля файла базы данных.
«Индекс» – имя индекса (имя индексного файла).
«Перем» – имя временной переменной, находящейся в памяти.
«Область» – имя рабочей области, которую организует FoxPro для обработки
одного файла базы данных. Если не оговорено иначе, область может быть указана
номером, буквой или псевдонимом базы данных.
«Окно» – имя окна.
12
[...] – в квадратных скобках указывается необязательная, но возможная часть
конструкции команды. Скобки в команду не входят.
<...> – в угловых скобках помещается всякое разрешенное выражение, которое
программист должен поместить в команду. Скобки в команду не входят.
.../... – указывает на то, что в команде необходимо наличие только одного из
элементов, разделенных знаком “/”.
«ВырN» – выражение числового типа. Его результатом является число.
«ВырL» – выражение логического типа. Вырабатывает значение “Истина” или
“Ложь”. Логические выражения в синтаксисе команд тоже иногда будут обозначаться
термином “условие”.
«ВырC» – выражение символьного типа. Вырабатывает строку символов или
отдельный символ.
«ВырD» – выражение типа дата. Его результатом является число, к которому
применима логика дат.
«Выр» – выражение любого типа вообще или любого типа из разрешенных по
контексту.
Для переноса в тексте программы части команды на следующую строку в конце
текущей строки ставится знак “;”.
4.1
Знаки операций
Команды могут содержать следующие знаки операций:
МАТЕМАТИЧЕСКИЕ:
** или ^ – возведение в степень;
* – умножение, / – деление, % – остаток от деления;
+ – сложение, – – вычитание.
ЛОГИЧЕСКИЕ:
NOT – НЕ (другая форма указания операции НЕ – !);
AND – логическое И;
OR – ИЛИ.
Знаки логических операций (кроме !) окаймляются точками или пробелами.
ОТНОШЕНИЯ:
13
< – меньше, > – больше, = – равно, # – не равно, <= – не больше, >= – не меньше.
Знаки отношения применимы как к числовым выражениям, так и к датам и
символьным выражениям. Если сравниваются символьные строки разной длины,
сравнение выполняется по длине второго выражения, т.е. выражения, стоящего справа
от знака отношения. Остаток левого операнда, превышающий длину правого операнда,
игнорируется. Эта особенность организовать поиск данных и по неполному ключу,
например фамилии по первой(ым) букве(ам). Тогда более короткое выражение должно
стоять справа от знака “=” и из него обычно должны быть удалены концевые пробелы.
Для символьных выражений реализованы дополнительные операции.
ОПЕРАЦИИ ОТНОШЕНИЯ:
$ – сравнение символьных строк. Операция A$B даст значение логическая
“Истина”, если A идентично B, либо А входит в В, и “Ложь” в противном случае.
== – сравнение на полное тождество символьных строк и по длине, и по
содержанию, включая пробелы.
ОПЕРАЦИЯ СЦЕПЛЕНИЯ:
+ – соединение двух или более строк в одну.
4.2
Структура команд
Команды FoxPro, ориентированные на обработку файлов базы данных, в самом
общем виде имеют следующий синтаксис:
НАЗВАНИЕ [<границы>] [<список выражений>] [FOR <условие>] [WHILE
<условие>]
Здесь:
НАЗВАНИЕ – имя команды;
<границы> – границы действия команды, которые могут иметь одно из
следующих значений:
 ALL – все записи базы данных;
 REST – все записи, начиная с текущей, до конца базы;
 NEXT <N> – следующие N записей, начиная с текущей;
 RECORD <N> – запись номер N;
FOR <условие> – выполнение команды только для записей, отвечающих
<условию>;
14
WHILE <условие> – выполнение команды только до тех пор, пока не перестанет
выполняться <условие>.
Слова FOR и WHILE могут присутствовать в команде одновременно. В этом
случае WHILE-условие, очевидно, имеет приоритет перед FOR-условием.
П р и м е р: L I S T
NEXT 10
Название Границы
FIELDS fam,tab,dtr
Выражение
FOR fam=’ П’
FOR-условие
Порядок следования элементов команды (за исключением “названия”, которое
всегда располагается на первом месте) произвольный. По умолчанию, если отсутствуют
<границы> или <условия>, сферой действия команды является одна только текущая
запись, или, наоборот, вся база данных.
В FoxPro разрешается и ключевые слова, и имена записывать как прописными,
так и строчными буквами. Константы различных типов данных отображаются в
командах следующим образом:
Символьные константы в FoxPro выделяются апострофами, кавычками или
квадратными скобками.
Константы типа “дата” берутся в фигурные скобки (например, {09.11.95}). Пустая
дата ({ . . }) вообще может быть задана одними фигурными скобками {}.
Логические константы T (истина) и F (ложь) в тексте программ обрамляются
точками.
5 Создание файла базы данных
Создание файла базы данных включает два этапа: создание структуры файла
(название колонок таблицы с указанием типов данных для этих колонок) и его
заполнение данными (собственно заполнение таблицы).
5.1
Создание структуры файла
Создадим простой файл базы данных, который содержит следующие данные
(названия полей указаны в скобках):
Фамилия (FIO)
Имя (NAM)
15
Дата рождения (DATR)
Учебная группа (UGR)
Размер стипендии (STIP)
Назовем файл базы данных STUD.DBF. Выберем для его полей типы и размеры:
FIO – символьный тип (Character) длиной 20 символов; NAM – символьный тип длиной
15 символов; DATR – тип дата (Date) со стандартной длиной 8; UGR – символьный тип
длиной 4; STIP – числовой тип (Numeric) длиной 6 разрядов.
Структура файла базы данных типа DBF создается командой CREATE <имя
файла>. В нашем случае это команда «CREATE stud». Расширение имени файла DBF
указывать необязательно, т.к. оно добавляется автоматически. Эту команду можно
набрать в командном окне либо выбрать из Главного меню File  New… и из
предлагаемого списка выбрать тип «Table».
В ответ СУБД представит экран-форму для ввода данных о структуре
создаваемого файла базы данных, а именно для каждого вводимого поля – его имя, тип,
длину и для числового типа – точность (число дробных позиций). Тип поля выбирается
в момент, когда курсор находится в колонке TYPE, нажатием первой буквы указания
типа (C, N, F, D, L) или клавиши Пробел/Ввод. Попробуйте заполнить предлагаемую
форму. Порядок расположения полей может быть изменен. Возможно удаление
имеющихся и дополнение новых полей (<Insert> и <Delete>). После окончания
формирования структуры файла оно должна быть запомнена на диске. Это
осуществляется одновременным нажатием клавиш CTRL-End или Ctrl-W. Нажатие
клавиши Esc вызовет отказ от сохранения структуры. Тот же результат может быть
достигнут нажатием Enter после перемещения курсора в позицию <OK> или <Cancel>
соответственно. Все действия по управлению созданием базы могут быть реализованы
и мышью. На запрос FoxPro о вводе данных ответьте No. Если в дальнейшем
обнаружится, что структура БД Вас не устраивает, ее можно изменить командой
модификации структуры MODIFY STRUCTURE.
5.2
Заполнение базы данных
Открытие файла БД. Файл после создания структуры остается открытым, т.е.
доступным для команд ввода, просмотра и изменений.
Однако, если СУБД только загружена в память, должно быть выполнено
открытие нужного файла БД командой открытия USE [<DBF-файл>] (см. Помощь).
16
5.3
Дополнение БД
Дополнение файла новыми записями осуществляется командой APPEND
[BLANK] (см. Помощь), которая предъявляет окно ввода данных со всеми пустыми
полями создаваемой записи с выделенными другим цветом областями ввода. При этом
все поля имеют значения пробелов. Заполните новую запись по своему усмотрению. По
умолчанию в системе используется американский стандарт даты (ММ/ДД/ГГ) (см.
Помощь).
В окне редактирования возможны возврат к предыдущим записям для их
изменения и вообще листание записей (клавиши PageUp/PageDown). По умолчанию
ввод/редактирование данных в команде APPEND и во всех других командах
редактирования имеет две особенности. При вводе символа в последнюю позицию
очередного поля раздается звуковой сигнал и курсор автоматически переходит на
первую позицию следующего поля данных.
6 Окно редактирования
При выдаче команд APPEND, INSERT, EDIT, CHANGE, BROWSE и наличии
открытой базы данных FoxPro развертывает для пользователя окно редактирования.
Вся информация в окне доступна для изменения. Кроме того, возможны дополнение
базы и удаление записей. Стандартное окно редактирования имеет две формы. Для
первых четырех команд оно будет выглядеть одинаково – все поля БД располагаются
вертикально.
Назовем
форму
такого
окна
CHANGE-окном.
другую
форму
предъявления данных осуществляет команда BROWSE (BROWSE-окно). Здесь все поля
каждой записи располагаются горизонтально – колонками. Если какие-то поля записи
не умещаются в строке, с помощью клавиш управления курсором и мышью возможно
перемещение (скроллинг) изображения вправо или влево. Выбор формы представления
данных определяется структурой БД и удобством пользователя. Дополнение базы
новой записью осуществляется нажатием клавиш Ctrl-N. Перемещение внутри БД
осуществляется с помощью клавиш перемещения курсора или мыши. Над полями БД
можно осуществлять действия, предусмотренные для встроенного редактора FoxPro:
выделение фрагментов данных, их копирование и удаление.
17
7 Команда BROWSE
Открывает окно просмотра. В простейшем варианте структура этой команды
такова:
Browse [ fields <поле1> [, <поле2>]…] [<границы>]
8 Перемещения в базе данных
При работе с БД необходимы средства перемещения внутри нее. Запись, на
которой находится указатель записей, является текущей, и только к ней в данный
момент возможен непосредственный доступ. Имеется несколько разновидностей
команд, изменяющих положение указателя записей:
GO TOP – переход к самой первой записи файла;
GO BOTTOM – переход к самой последней записи;
GO <вырN> – переход к записи с указанным в <вырN> номером;
SKIP <вырN>- переход к записи, отстоящей от текущей на указанное в <вырN>
число записей.
В последней команде <вырN> может быть и отрицательным, что означает
движение указателя назад. SKIP без параметра идентичен SKIP 1 (переход на
следующую запись).
Для контроля положения указателя и наличия записей в файле предусмотрены
функции:
RECNO([<область>]) – указывает номер текущей записи;
RECCOUNT([<область>]) – выдает общее число записей в файле БД, включая
записи, помеченные к удалению;
EOF([<область>]) – функция конца файла. Она истинна, если конец достигнут, и
ложна в противном случае BOF([<область>]) – то же, но для начала файла.
Необязательный параметр <область> указывает, для какой рабочей области
запрашивается значение функции. По умолчанию текущая область.
Функции в FoxPro имеют характерный синтаксис – скобки, даже если никакого
аргумента нет и они остаются пустыми.
9 Просмотр данных
Просмотр данных в FoxPro осуществляется очень близкими по смыслу и
синтаксису командами LIST и DISPLAY (см. Помощь). Команда LIST не делает
периодических остановок при выдаче данных, и по умолчанию область ее действия не
18
текущая запись, а весь файл. Ввиду этого команда более пригодна для выдачи данных
на принтер/файл. Приведенные команды удобны скорее для просмотра данных при
отладке программ. Для включения их в программы они слишком грубы, и здесь лучше
использовать более гибкие команды ? и @ ...SAY.
Удаление данных
DELETE (см.Помощь) – пометка к удалению записей в указанных границах и/или
отвечающих указанным условиям. Без параметров помечает только одну текущую
запись.
RECALL (см.Помощь) – снятие пометок к удалению. Без параметров действует
только на одну текущую запись. Физическое удаление записей осуществляется
командой PACK.
10
ИЗМЕНЕНИЕ ДАННЫХ
В FoxPro имеется возможность не только вручную редактировать данные, но и
изменять их путем присваивания или вычисления.
REPLACE (см. Помощь) – осуществляет множественное изменение полей БД в
соответствии с заданными выражениями, в установленных границах и при заданных
условиях. Практически (за некоторыми исключениями) только командой REPLACE в
FoxPro можно изменять значения полей файла БД. В этом смысле она эквивалентна
знаку равенства в операции присвоения для переменных.
Синтаксис
REPLACE FieldName1 WITH eExpression1
[, FieldName2 WITH eExpression2] ...
[Scope] [FOR lExpression1] [WHILE lExpression2]
Параметры
FieldName1 WITH eExpression1 [, FieldName2 WITH eExpression2 ... ]
Указывает, что данные в поле FieldName1 должны быть заменены значением
выражения eExpression1, данные в поле FieldName2 _ значением выражения
eExpression2 и т.д.
19
Если значение выражения не вмещается по ширине в числовое поле, команда
REPLACE вписывает выражение в поле путем дополнительной обработки:
1.
Вначале REPLACE отбрасывает несколько десятичных знаков и округляет
оставшуюся десятичную часть поля.
2.
Если значение по-прежнему не помещается, REPLACE сохраняет содержимое
поля, используя экспоненциальное представление.
3.
Если значение все равно не помещается, REPLACE замещает содержимое
поля звездочками.
Scope
Задает
диапазон
заменяемых
записей.
Будут
заменены
только
записи,
попадающие в указанный диапазон. Он задается следующими предложениями: ALL,
NEXT nRecords, RECORD nRecordNumber и REST. По умолчанию областью действия
команды REPLACE является одна текущая запись (NEXT 1).
FOR lExpression1
Указывает, что заданные поля могут быть замещены только в тех записях, для
которых выражение lExpression1 имеет значение "истина" (.T.). Предложение FOR
позволяет производить условную замену записей, отфильтровывая те из них, которые
не нужно менять.
WHILE lExpression2
Задает условие, в соответствии с которым поля будут заменяться, пока значением
логического выражения lExpression2 остается "истина" (.T.).
Буквально фраза <поле> WITH <выражение> соответствует присвоению
<поле>=<выражение>.
11
ЛОКАЛИЗАЦИЯ И ПОИСК ДАННЫХ В БАЗЕ
Исключительно важную группу команд в FoxPro образуют средства выделения и
поиска данных в БД.
20
11.1
Фильтрация данных
В FoxPro предусмотрена специальная команда вида SET FILTER TO [<условие>]
(см. Помощь), которая позволяет установить FOR-условие для всех без исключения
команд обработки данных.
11.2
Последовательный поиск
Начальный поиск:
LOCATE (см. Помощь) осуществляет последовательный поиск одной самой
первой записи в БД, удовлетворяющей заданному условию, среди записей,
находящихся в заданных границах. в случае, если границы и WHILE-условие
отсутствуют, поиск ведется во всем файле, начиная с первой записи. При успешном
поиске указатель записей устанавливается на найденную запись, функция RECNO()
равна номеру этой записи, а функция FOUND(), оценивающая результат поиска,
возвращает значение “Истина”. В противном случае функция RECNO() равна числу
записей в базе плюс 1, а функция FOUND()=.F., а функция достижения конца файла
EOF() возвращает .Т.
11.3
Продолжение поиска
CONTINUE – команда, которая продолжает поиск записей, начатых ранее
командой LOCATE. Если не было найдено нужных записей, указатель записей
устанавливается на нижнюю границу поиска (если она введена в команде) или на конец
файла (EOF()=.T.).
12
Индексирование баз данных
Важнейшим элементом любой СУБД является наличие средств ускоренного
поиска данных, поскольку поиск – самая распространенная операция в системах
обработки данных. Этот механизм обычно реализуется введением так называемых
индексных файлов (индексов).
Если файл проиндексирован, команды DISPLAY, EDIT, BROWSE, SKIP,
REPLACE и все другие команды, связанные с движением в файле БД, перемещают
указатель записей в соответствии с индексом, а не с физическим порядком
расположения записей. Так, команды GO TOP и GO BOTTOM устанавливают указатель
записей не на первую (номер 1) и последнюю физические записи, а на начальную и
конечную записи индекса соответственно.
21
Один файл БД может быть проиндексирован по нескольким полям и иметь любое
число индексов (индексных файлов), которое ограничено только дисковой памятью
компьютера. Такие файлы содержат информацию о расположении записей файла БД в
алфавитном, хронологическом или числовом порядке для того поля/полей, по которому
выполнено индексирование. Допускается индексирование и по логическим полям.
Аппарат индексирования является важнейшим инструментом любой реляционной
СУБД. И хотя практически все действия над данными могут быть осуществлены и без
участия индексов, совершенно немыслимо их игнорирование при создании реальных
информационных
систем.
Только
использование
индексов позволяет
достичь
приемлемых скоростных характеристик обработки данных, поскольку поисковые
операции используются в программах очень широко.
В FoxPro можно создать два типа индексных файлов: обычный индексный файл
(имеет расширение IDX и содержит один индексный ключ) и мультииндексный файл
(имеет расширение CDX, может хранить сразу несколько индексных выражений и
является по существу соединением нескольких простых индексных файлов (“тегов”)).
Индексирование выполняется следующей командой: INDEX ON <выр> TO <IDXфайл> ... (см. Помощь). Опции команды – в Помощи. Если индексный файл был уже
создан, его нужно открыть при внесении новых записей или редактировании старых и,
конечно, если предполагается индексный поиск. Индексные файлы могут быть
открыты совместно с открытием своей БД командой:
USE [<DBF-файл>]/[IN<область>] ... INDEX <список индексных файлов> ... (см.
Помощь).
Закрыть все индексные файлы можно командой CLOSE INDEX.
При наличии открытого индексного файла для ускорения поиска по ключу,
заданному в индексе, можно пользоваться командой SEEK<выражение> (см. Помощь),
т.к. команда применяет специальный алгоритм ускоренного поиска, в котором база
просматривается не сплошь, а в соответствии с информацией, содержащейся в индексе.
Эта команда разыскивает только одну первую запись, в которой в индексном поле
наблюдается <выражение>, т.е. когда <поле>=<выражение>, и устанавливает на нее
указатель записей. Если действует команда SET NEAR ON , то в случае неудачного
поиска указатель записей сразу установится не на конец файла, а на запись, имеющую
самое близкое следующее значение к ключу поиска. Если индексный файл был ранее
создан, но Вы забыли его своевременно открыть и внесли какие-то изменения в базе, то
необходимо его открыть и обновить командой REINDEX.
22
13
Работа с несколькими базами
В FoxPro допускается работа сразу с многими базами данных и при этом
возможно установление разнообразных связей между ними. Указатель записей в таких
связанных базах будут двигаться синхронно. База, в которой указатель движется
произвольно, читается старшей, а база/базы, в которой указатель следует за указателем
старшей базы, – младшей. В старшей и младшей базах должны быть поля, несущие
какой-то общий признак, иначе связь будет бессмысленной. Младшие базы, в свою
очередь, могут быть связаны с базами следующего уровня и т.д.
Возможно установление двух типов связей между записями двух сцепленных БД.
Связь типа одна_запись_к_одной перемещает указатель в младшей базе таким образом,
что он всегда устанавливается на первую встреченную им запись с совпадающим
признаком. Остальные такие записи (если есть) остаются “не замеченными”. Эта связь
устанавливается просто командой SET RELATION. Связь типа одна_запись_ко_многим
позволяет обратиться ко всем записям младшей базы с совпадающим признаком. Оба
типа связей могут быть распространены на несколько баз сразу.
13.1
Понятие о рабочих областях
В FoxPro можно обрабатывать сразу несколько файлов БД (до 25). Каждый такой
файл типа DBF и все вспомогательные файлы (например, индексные) открываются в
своей отдельной рабочей области. Переход из области в область осуществляется
командой SELECT <рабочая область>. Первые 10 рабочих областей идентифицируются
номерами 1-10 или буквами A – J. Области с 11-й по 25-ю обозначаются номерами или
буквенно-цифровыми именами W11 – W25. Если в качестве параметра указать цифру 0,
произойдет переход в первую свободную рабочую область.
Область, в которой мы находимся в данный момент, называется активной рабочей
областью, и в ней можно работать с находящейся здесь базой данных, используя все
допустимые команды системы. Одновременно даже в одной команде можно иметь
доступ (с некоторыми ограничениями) к полям других баз. В этом случае имя поля из
неактивной области – составное. Собственно имени поля тогда предшествует имя
рабочей области, разделенные знаками “->” или (что более удобно) точкой: A->name
или A.name . При входе в СУБД активизируется область 1 (или А), и, если Вы работаете
только с одной базой, заботиться об открытии областей не нужно.
23
13.2
Связь вида одна_запись_к_одной
SET RELATION TO ... (см.Помощь) связывает указатель записей в активной
рабочей области с указателями записей из других рабочих областей, имена которых
указаны после слова INTO, по заданному общему полю (ключу). Единственное условие
– файл, с которым устанавливается связь, должен быть проиндексирован по этому
полю.
П р и м е р:
SELECT a
USE brig1
SELECT b
USE kadr
&& (проиндексировать активную БД по
INDEX ON tab TO kadrtab
полю tab, создать файл kadrtab.idx)
SELECT a
&& (установить связь по полю tab с
SET RELATION TO tab INTO b
рабочей областью b)
LIST tab, vir, b.fam
Здесь
выводятся
записи
файла
brig1.dbf,
в
которые
включено
поле
соответствующих им фамилий kadr.dbf (b.fam). Связь между всеми файлами
разрывается командой SET RELATION TO без параметров.
13.3
Связь вида одна_запись_ко_многим
Следующая команда устанавливает связь такого типа между двумя или
несколькими БД:
SET SKIP TO [<область1> [,<область2>]..] . При этом с каждой записью из
старшей базы могут быть сцеплены несколько записей из младшей базы. Связь может
быть установлена сразу с несколькими младшими базами, находящимися в указанных
<областях>.
Аппарат сцепления баз данных является мощным средством доступа к
“родственным” данным.
14
СОЗДАНИЕ КОМАНДНЫХ ФАЙЛОВ
Программы, ориентированные на прямое программирование процессов обработки
данных, создаются, например, с помощью внутреннего встроенного текстового
24
редактора FoxPro, вызываемого командой MODIFY COMMAND/FILE ... (см. Помощь).
Если используется вариант MODIFY COMMAND, по умолчанию вновь создаваемый
файл считается командным (программным) файлом и ему присваивается расширение
PRG, если оно не задано явно.
Созданная в редакторе программа запоминается указанном в команде файле и
может быть в дальнейшем вызвана на исполнение командой DO <имя командного
файла>. Расширение PRG указывать не обязательно.
Полное меню редактора можно увидеть, выбрав позицию Edit в главном меню
FoxPro.
15
Команды ввода-вывода
Используя команды FoxPro, можно прибегнуть к индивидуальному определению
места и формы предъявления данных для каждого поля/переменной, использовав
специальные команды ввода/редактирования.
CLEAR – команда очистки экрана, освобождает весь экран/окно от имеющейся
информации и устанавливает курсор в левый верхний угол экрана/окна.
@<Y1,X1> [CLEAR/CLEAR TO <Y2,X2>] – команда очищает в окне/экране
прямоугольник с координатами верхнего левого угла Y1,X1 и нижним правым углом
окна/экрана (если указана опция CLEAR) или произвольными координатами Y2,X2
нижнего правого угла.
@...SAY...GET – команда ввода-вывода. Она используется для форматированного
ввода-вывода данных на экран/принтер (см.Помощь).
Команды @...GET позволяют осуществить только предъявление данных.
Наделение GET-полей аппаратом редактирования и фактическое запоминание
экранных образов данных в полях/переменных осуществляются другой командой:
READ, которая стоит обычно всегда вслед за командой/командами @...GET.
Самостоятельно познакомьтесь с командами вывода ?/??, TEXT, \ и \\, а также
командами ввода INPUT и ACCEPT.
16
Работа с переменными
В FoxPro разрешается иметь переменные тех же типов, что и поля. Переменным и
массивам переменных даются имена по тем же правилам, что и полям.
Команда присваивания. <переменная>=<выражение> или STORE <выражение>
TO <имена переменных> – эти команды создают переменные и присваивают им
25
значения. Вторая форма команды предпочтительнее в случае, если нужно одно и то же
значение присвоить сразу нескольким переменным.
Тип переменной определяется типом последнего присваиваемого ей выражения!!!
Символьные константы должны быть взяты в апострофы, кавычки или квадратные
скобки.
Объявление массивов: DIMENSION d(10).
17
Команды управления
Команды управления, как Вам известно, являются важнейшим средством
построения программ. Эти команды могут быть использованы ТОЛЬКО в программах.
IF – в зависимости от условия команда выполняет те или иные <команды>,
находящиеся внутри конструкции IF...ENDIF.
IF <условие>
<команды>
[ELSE
<команды>]
ENDIF
Работает так же, как и в Фортране, и в Си. IF – он и в Африке IF.
DO CASE – эта конструкция решает задачи, аналогичные команде IF, но в ней
может быть указано сразу несколько условий, которые последовательно проверяются
во всех фразах CASE.
Команда аналогична команде switch в Си.
Команда очень удобна для обработки выбора из меню в программах. Разрешается
вложение команд DO CASE, IF.
18
Организация циклов
18.1
Цикл с условием
Цикл с условием выполняется до тех пор, пока <условие> истинно:
DO WHILE <условие>
<команды>
ENDDO
В языке FoxPro отсутствует понятие “метка” ( а, соответственно, и любимый
некоторыми оператор GOTO). Если требуется выйти за пределы цикла, необходимо
26
использовать команду EXIT, которая передаст управление команде, следующей за
ENDDO. Команда LOOP осуществляет передачу управления в цикле, но в
противоположную сторону – в его начало, на саму команду цикла. Это нужно, чтобы
при необходимости избежать выполнения некоторых команд, предшествующих фразе
END, и сразу перейти к следующему циклу.
18.2
Цикл с параметром
FOR <переменная>=<вырN1> TO <вырN2> [STEP <вырN3>]
<команды>
ENDFOR
Цикл аналогичен оператору DO Фортрана и for Си.
18.3
Цикл сканирования базы данных
Цикл сканирования базы данных применяется для перемещения в базе данных и
выполнения <команд> для каждой встреченной записи, которая отвечает условиям.
SCAN [<границы>] [FOR <условие>] [WHILE <условие>]
<команды>
ENDSCAN
При отсутствии границ и условий сканируется вся БД.
19
Функции СУБД
Функции в FoxPro используются для анализа или преобразования данных.
Синтаксическая особенность функций – обязательное наличие скобок (кроме функции
&).
Здесь перечисляются имена, более подробно – смотрите Помощь.
19.1
Математические функции
ABS(), INT(), MAX(), MIN(), MOD(), ROUND(), RAND(), SIGN(), EXP(), LOG(),
LOG10(), SQRT(), SIN(), COS(), TAN(), ASIN(), ATAN() – в основном те же самые, что
и в других языках. PI() – число Пи; DTOR() – преобразование градусов в радианы,
RTOD() – обратная функция.
27
Строковые функции
19.2
$,
AT/ATC(),
INLIST(),
LEN(),
LIKE(),
LEFT(),
SUBSTR(),
LTRIM(),
REPLICATE(), SPACE(), PADC().
19.3
Функции работы с датами
CDOW(), CMONTH(), CTOD(), DATE(), DOW(), DTOC(),DAY(), MONTH(),
YEAR() и т.д.
19.4
Функции преобразования типов данных
ASC(), CHR(), STR(), VAL().
19.5
Функция анализа условий
IIF(<условие>,<выр1>,<выр2>) – выдает значение <выр1>, если <условие>
истинно, и <выр2> – если ложно. Допускается вложение функций IIF.
20
Манипулирование файлами
СУБД располагает развитыми средствами по программному формированию,
копированию и удалению данных.
20.1
Копирование файлов БД
Копирование в новый файл БД осуществляется с помощью команды COPY TO...
(см. Помощь), которая осуществляет копирование открытого файла DBF в новый файл,
который этой командой создается. Копирование в существующий файл БД: APPEND
FROM ... (см. Помощь) – добавляет в активную базу данные из некоторой другой базы
или текстового файла.
20.2
Сортировка данных
Наряду с индексированием БД, которое при неизменности файла позволяет
предъявлять записи и перемещаться по нему в желаемом порядке, существует команда,
выполняющая физическое упорядочение файла: SORT TO ... (см. Помощь). Команда
создает из активной БД новый файл, в котором записи расположены в возрастающем
или убывающем порядке относительно указанного поля/полей. Сортируемые поля
перечисляются в команде в порядке их значимости. Может быть выполнена сложная
сортировка по нескольким полям (одновременно до 10). Новый файл образуется из всех
28
или некоторых перечисленных полей записей, удовлетворяющих указанным условиям
и находящихся в указанных границах.
20.3
Математическая обработка БД
В FoxPro имеются средства для получения некоторых простых числовых
характеристик данных, а именно количеств, сумм, средних и некоторых других
величин. Смотрите команды COUNT..., SUM..., AVERAGE..., CALCULATE...
20.4
Вывод текстовых файлов
Команда TYPE... (см. Помощь) выводит текстовый файл на экран, принтер или в
другой файл.
21
Команды языка запросов SQL
В язык FoxPro включен ряд команд из языка запросов SQL (Structured Query
Language). Он хорошо известен многим пользователям и является стандартом. Команды
SQL могут непосредственно включаться в программы наряду с собственными
командами FoxPro.
21.1
Создание баз данных
CREATE
DBF <имя-BF-файл> (<имя поля> <тип> [(<размер>[,<дробных
разрядов>]) [, <имя поля> …]])
Команда создает новую таблицу данных <DBF-файл> с указанным именем. Для
каждого поля задаются его имя, тип (одной из букв C, N, D, M, F, L), длина и, при
необходимости, число десятичных разрядов. Длина и точность не задаются для типов
дата (D), логический (L) и примечаний (M), а точность – для символьного типа (C). Все
требования к описанию полей таблицы – стандартные. Созданная таблица сразу
открывается.
21.2
Дополнение базы
INSERT INTO <файл БД> [(<поле1> [, <поле2> [,…] ] )] VALUES (<выр1> [,
<выр2> [,…]])
Команда добавляет записи в конец существующего <файла базы данных>,
используя <выражения>, перечисленные после слова VALUES. Если не указаны имена
полей, <выражения> будут записываться в последовательные поля <базы данных> в
соответствии с её структурой.
29
21.3
Формирование запросов из базы данных (команда SELECT)
Команда SELECT является мощным средством обработки запросов. С её
помощью из базы-источника выделяются нужные данные и пересылаются на экран или
в файл-приемник. Данные могут быть извлечены из разных таблиц, а также
сгруппированы и упорядочены желаемым образом.
Команда имеет массу опций-возможностей. Ввиду этого сначала приведем её
предварительный синтаксис, который позволит затем лучше осознать детали.
SELECT <что выводится>
FROM <откуда (источник)> INTO <куда (получатель)>
WHERE <каким условиям должно отвечать>
GROUP BY <колонки, по которым выполняется группирование>
ORDER BY <в каком порядке выводить данные>
Теперь приведем более полный формат этой команды:
SELECT [DISTINCT]
[<псевдоним>.] <выражение> [AS <колонка>]
[, [<псевдоним>.] <выражение> [AS <колонка>] ...]
FROM <таблица> [ <псевдоним>]
[,<таблица> [ <псевдоним>] ...]
[[INTO <получатель>]
| [TO FILE <имя_файла> [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]]
[WHERE <условие связи> [AND <условие связи> ...]
[AND | OR <условие отбора> [AND | OR <условие отбора> ...]]]
[GROUP BY <колонка> [, <колонка> ...]]
[UNION [ALL] SELECTCommand]
[ORDER BY <колонка> [ASC | DESC] [, <колонка> [ASC | DESC] ...]]
Параметры
[ALL | DISTINCT]
[<псевдоним>.] <выражение> [AS <колонка>]
[, [<псевдоним>.] <выражение> [AS <колонка>] ...]
30
Предложение SELECT задает поля, константы и выражения, которые будут
отображены в результатах запроса.
Опция DISTINCT исключает из результатов запроса повторяющиеся строки.
Префикс <псевдоним>. уточняет имена элементов. Каждый элемент <выражение>
генерирует один столбец результатов запроса. Если несколько элементов имеют
одинаковые имена, укажите перед именем элемента псевдоним таблицы с точкой,
чтобы столбцы не повторялись.
<выражение> задает элемент, который следует включить в столбец результатов
запроса. Эти выбираемые элементы могут быть следующими:

Имя поля из таблицы, указанной в предложении FROM.

Константа, которая задает одинаковое постоянное значение во всех
строках результатов запроса.

Выражение, которое может быть именем пользовательской функции.
Для выбираемого элемента SELECT, являющегося полем или выражением с
участием поля, могут быть использованы следующие функции полей:

AVG(<выражение>), вычисляющая среднее в столбце числовых данных.

COUNT(<выражение>), подсчитывающая число выбираемых элементов в
столбце. COUNT(*) подсчитывает число строк в выводе запроса.

MIN(<выражение>),
определяющая
наименьшее
значение
среди
выбираемых элементов <выражение> в столбце.

MAX(<выражение>), определяющая наибольшее значение <выражение>
в столбце.

SUM(<выражение>), вычисляющая итоговую сумму столбца числовых
данных.
Функции полей не могут быть вложенными.
AS <колонка>
31
Задает заголовок столбца в выводе запроса. Это предложение полезно в случае,
когда <выражение> является вычисляемым выражением или содержит функцию поля, а
вы хотите дать столбцу осмысленное название.
Имя <колонка> может быть выражением, но не может содержать символы,
запрещенные в именах табличных полей (например, пробелы).
FROM <таблица> [<псевдоним>] [, [<таблица> [ <псевдоним>] ...] ]
Задает список таблиц, которые содержат данные, извлекаемые по данному
запросу. Если ни одна из таблиц не открыта, FoxPro отображает диалоговое окно Open,
в котором можно задать местоположение файла. Если вы открыли таблицу, она
останется открытой до завершения запроса.
<псевдоним> задает временное имя для таблицы <таблица>. Если этот локальный
псевдоним задан, его нужно будет использовать вместо имени таблицы на протяжении
всего оператора SELECT.
INTO <получатель>
Указывает, где следует сохранить результаты запроса. Если задать в одном
запросе и предложение INTO, и предложение TO, последнее будет проигнорировано.
Если предложение INTO опущено, результаты запроса отображаются в окне просмотра.
Вы также можете использовать предложение TO, позволяющее направлять результаты
запроса на принтер или в файл.
В качестве <получатель> можно использовать одно из следующих предложений:

ARRAY
ArrayName,
сохраняющее результаты запроса в массиве
переменных памяти. Если в запросе выбирается 0 записей, этот массив не создается.

CURSOR CursorName, сохраняющее результаты запроса в курсоре. После
того как SELECT выполнится, временный курсор останется открытым и активным,
но будет доступен только для чтения. Когда вы закроете этот временный курсор, он
будет удален.

DBF TableName | TABLE TableName, сохраняющее результаты запроса в
таблице. Если вы не задали расширение имени,
32
FoxPro присвоит таблице
расширение .DBF. Таблица останется открытой и активной после того, как SELECT
выполнится.
TO FILE <имя_файла> [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN
Используя предложение TO вместо предложения INTO, можно направить
результаты запроса в текстовый ASCII-файл <имя_файла>, на принтер или в основное
окно FoxPro.
Опция ADDITIVE добавляет вывод запроса к существующему содержимому
текстового файла, заданного в предложении TO FILE <имя_файла>.
Опция TO PRINTER направляет вывод запроса на принтер.
Опция TO SCREEN направляет вывод запроса в основное окно FoxPro или в
активное пользовательское окно.
Когда вы создаете вывод запроса, имена столбцов формируются в соответствии со
следующими правилами:

Если выбираемый элемент является полем с уникальным именем, столбец
вывода получает имя этого поля.

Если несколько выбираемых элементов обладают одним и тем же именем,
происходит следующее. Например, если в таблице Customer есть поле STREET и в
таблице Employees тоже есть поле с таким именем, то столбцы вывода получают
имена Extension_A и Extension_B (STREET_A и STREET_B). Если имя выбираемого
элемента состоит из 10 символов, оно укорачивается таким образом, чтобы можно
было добавить символ подчеркивания и букву. Например, DEPARTMENT
превратится в DEPARTME_A.

Если выбираемый элемент является выражением, соответствующий ему
столбец вывода получит имя EXP_A. Если существуют другие выражения, им
назначаются имена EXP_B, EXP_C и т.д.

Если выбираемый элемент содержит функцию поля, такую как COUNT( ),
столбец вывода получает имя CNT_A. Если какой-либо выбираемый элемент
содержит SUM(), его столбец в выводе получает имя SUM_B.
WHERE <условие связи> [AND <условие связи> ...]
[AND | OR <условие отбора> [AND | OR <условие отбора> ...]]
33
– указывает, что FoxPro включает в результаты запроса только некоторые записи.
Предложение WHERE требуется при извлечении данных из нескольких таблиц.
Условие <условие связи> задает поля, которые связывают таблицы, указанные в
предложении FROM. Если в запрос включено более одной таблицы, то для каждой
таблицы, кроме первой, необходимо задать условие объединения.
Важное замечание: при создании условия объединения необходимо учитывать,
что если вы включили в запрос две таблицы и не задали условие объединения, каждая
запись первой таблицы будет объединяться с каждой записью второй таблицы до тех
пор, пока соблюдаются условия фильтра. У такого запроса будет слишком много
результатов.
Чтобы связать несколько условий объединения, воспользуйтесь оператором AND
(И). Каждое условие объединения имеет следующий формат:
FieldName1 Comparison FieldName2
FieldName1 _ это имя поля из одной таблицы, FieldName2 _ имя поля из другой
таблицы, а Comparison представляет один из следующих операторов:
Операт
Тип сравнения
Оператор
Тип сравнения
=
Равно
>
Больше
==
В точности равно
>=
Больше или равно
LIKE
Сравнение по
<
Меньше
<=
Меньше или равно
ор
шаблону
< >, !=,
Не равно
#
LIKE – позволяет построить условие сравнения по шаблону, где символ “_”
указывает единичный неопределенный символ в строке, “%” – любое их количество.
Эти символы аналогичны символам маски “?” и “*” в MS DOS. Формат оператора:
<выражение> LIKE <шаблон>
<условие отбора> задает критерий, которому должны удовлетворять записи,
чтобы быть включенными в результаты запроса. В запросе можно задать сколько
угодно условий фильтра, связывая их операторами AND (И) и OR (ИЛИ). Также можно
34
использовать оператор NOT (НЕ), изменяющий значение логического выражения на
противоположное, и функцию EMPTY( ), проверяющую наличие пустых полей.
Условие <условие отбора> может иметь один из форматов, показанных в следующих
примерах:
Пр
FieldName1 Comparison FieldName2
customer.cust_id = orders.cust_id
FieldName Comparison Expression
payments.amount >= 1000
FieldName
company < ALL (SELECT company
имер 1
Пр
имер 2
Пр
имер 3
Comparison
ALL
(Subquery)
FROM customer WHERE country =
"UK")
Если условие фильтра включает опцию ALL, это означает, что запись будет
включена в результаты запроса только в том случае, когда данное поле удовлетворяет
условию при всех значениях, генерируемых подзапросом.
GROUP BY <колонка> [, <колонка> ...]
Группирует строки в запросе исходя из значений в одном или нескольких
столбцах. В качестве <колонка> можно задать имя обычного поля таблицы, имя поля,
содержащего функцию поля SQL, или числовое выражение, указывающее позицию
данного столбца в таблице результатов (самый левый столбец имеет номер 1).
ORDER BY <колонка> [ASC | DESC] [, <колонка> [ASC | DESC] ...]
Сортирует результаты запроса по содержимому одного или нескольких столбцов.
Каждый аргумент <колонка> должен соответствовать некоторому столбцу результатов
и может представлять собой один из следующих элементов:

Поле в таблице, указанной в предложении FROM, которое также является
выбираемым элементом в основном предложении SELECT (не в подзапросе).

Числовое выражение, указывающее местоположение столбца в таблице
результатов. (Самый левый столбец имеет номер 1.)
35
Опция ASC задает возрастающий порядок сортировки результатов запроса, в
соответствии с элементом (или элементами) <колонка>, и используется по умолчанию в
предложении ORDER BY.
Опция DESC задает убывающий порядок сортировки результатов запроса.
Если вы не задали порядок результатов запроса с помощью предложения ORDER
BY, они останутся неупорядоченными.
Комментарии
SELECT – это команда языка SQL, встроенная в FoxPro и работающая как любая
другая команда FoxPro. Когда вы представляете запрос с помощью SELECT, FoxPro
интерпретирует этот запрос и извлекает из таблиц указанную информацию. Запрос
SELECT можно создать в следующих средах:

В окне команд

В программе FoxPro (в виде обычной команды FoxPro)

В конструкторе запросов
Если вы выдали SET TALK ON и выполнили команду SELECT,
FoxPro
отображает величину интервала времени, затраченного на выполнение запроса, и
количество записей в полученных результатах. Переменная _TALLY содержит число
записей в результатах запроса.
Следует отметить, что SELECT не несет ответственности за текущий фильтр,
установленный с командой SET FILTER.
Замечание. Подзапрос, о котором идет речь в описании некоторых аргументов, –
это команда SELECT внутри другой команды SELECT; она должна быть заключена в
скобки. В предложении WHERE можно формировать не более двух подзапросов на
одном и том же уровне, то есть не вложенных друг в друга (см. описание предложения
WHERE). Подзапросы могут содержать несколько условий объединения.
Примеры запросов
36
* Пример 1
SELECT company
FROM customer
В примере 1 отображаются названия всех компаний из таблицы customer (одно
поле из одной таблицы).
* Пример 2
SELECT a.company, b.order_date, b.shipped_on ;
FROM customer a, orders b ;
WHERE a.cust_id = b.cust_id
В примере 2 отображается содержимое трех полей из двух таблиц и эти таблицы
объединяются по полю cust_id. Для обеих таблиц используются
локальные
псевдонимы.
* Пример 3
SELECT DISTINCT a.company, b.order_date, b.shipped_on ;
FROM customer a, orders b ;
WHERE a.cust_id = b.cust_id
В примере 3 отображаются только записи, содержащие уникальные данные в
заданных полях.
* Пример 4
SELECT country, postalcode, company ;
FROM customer ;
ORDER BY country, postalcode, company
В примере 4 отображаются поля country, postalcode и company в возрастающем
порядке.
* Пример 5
SELECT a.company, b.order_date, b.shipped_on ;
37
FROM customer a, orders b ;
WHERE a.cust_id = b.cust_id ;
INTO TABLE custship.dbf
BROWSE
В примере 5 содержимое полей из двух таблиц сохраняется в третьей таблице.
Далее выполняется просмотр новой таблицы.
* Пример 6
SET DATE TO GERMAN
SELECT a.company, b.order_date, b.shipped_on ;
FROM customer a, orders b ;
WHERE a.cust_id = b.cust_id AND b.order_date < {16.02.95}
В примере 6 отображаются только записи, для которых дата заказа более ранняя,
чем 16.02.95.
* Пример 7
SELECT * FROM customer a WHERE a.company LIKE "C%"
В примере 7 отображаются все записи из таблицы customer, в которых название
компании начинается с прописной буквы C и имеет неизвестную длину.
* Пример 8
SELECT * FROM customer a WHERE a.country LIKE "U_"
В примере 8 отображаются все записи из таблицы customer, у которых название
страны начинается с прописной буквы U и содержит еще только один неизвестный
символ.
* Пример 9
SELECT UPPER(city) AS CityList FROM customer
38
В примере 9 отображаются названия всех городов из таблицы customer
прописными буквами и столбцу вывода присваивается имя CityList.
39
Download