Пример 19.40.
Sheets("<имя_листа_диалога>"). Labels ("<имя_объекта_метки>")
.Caption="cтpoкa текста"
Поле ввода является многострочным, содержит текст, который можно редактировать. Поле ввода входит в набор EditBoxes(), его можно редактировать и программным способом.
Пример 19.41.
Sheets("<имя_листа_диалога>").ЕditBoxes("<имя_окна>").Техt="строка текста"
Кроме того, этот тип элемента диалогового окна обладает следующими свойствами: MultyLine = True – в случае многострочности поля ввода;
InputType - ограничение типа данных, вводимых в окно (xlFormula, xlInteger, xllNumber, xlReference, xlText).
Рамка группы обеспечивает объединение нескольких элементов диалогового окна. Этот тип окна изображается в первую очередь, а затем внутри него размещаются другие элементы. Для задания строки текста в верхней строке рамки программным образом используется его свойство – Caption.
Флажок обеспечивает аддитивный выбор, имеет свойство Value (принимает значение True, если выбран, или False – в противном случае). Подобные переключатели образуют набор CheckBoxes().
Кнопка переключателя обеспечивает альтернативный выбор из списка взаимоисключающих опций. Такие кнопки входят в состав группы, если они различны по назначению, либо все кнопки в диалоговом окне образуют единую группу; выбор одной из кнопок внутри группы означает автоматический невыбор других. Подобные переключатели образуют набор OptionButtons(). Свойство Value принимает значение True, если выбрана кнопка, и False – в противном случае.
Окно списка предоставляет для выбора список значений, при этом редакция списка невозможна. Формирование списка осуществляется только программным путем. Существует несколько вариантов организации списков с помощью свойств объекта:
ListFillRange – ссылка на диапазон ячеек электронной таблицы, содержащей значения элементов списка;
List() - перечисление элементов списка непосредственно, замена старого списка новым целиком.
Раскрывающийся список во многом соответствует окну списков, но этот элемент входит в набор
DropDowns().
Поле ввода со списком объединяет окно списка и окно редактирования. При выборе элемента списка он автоматически появляется в окне редактирования, где возможна его корректировка. В принципе это два разных окна с различными свойствами.
Поле ввода с раскрывающимся списком представляет собой комбинацию выпадающего списка, элементы которого можно редактировать.
Линейка прокрутки создает горизонтальную или вертикальную линейку прокрутки. Свойство Value содержит число, соответствующее положению ползунка, доступ к линейкам прокрутки через набор ScrollBars(). Свойства Min и Мах управляют диапазоном значений, доступны как из программы, так и через диалоговое окно форматирования элемента. Свойства LargeChange и SmallChange содержат величину изменения свойства Value.
Регулятор счетчика аналогичен линейке прокрутки, но отсутствует свойство LargeChange.
На рис. 19.27 представлено диалоговое окно пользователя для ввода данных об экзаменационных оценках.
Диалоговое окно пользователя включает следующие элементы: метки (Группа, Фамилия Имя Отчество, № зач.книжки и др.);
окно списка для выбора № группы – список может быть сформирован в ячейках рабочего листа, при этом выделение элемента списка может быть одинарным, множественным или связным. Результат выбора можно записать в указанную ячейку рабочего листа; поля ввода (Фамилия Имя Отчество, № зач.книжки, Дата), для которых может быть указан тип
вводимой информации (текст, целое число, число, ссылка, формула), наличие многострочного текста и вертикальной линейки прокрутки;
603
раскрывающиеся списки (дисциплина, преподаватель, оценка), элементы которых могут быть записаны в ячейках рабочего листа, указывается максимально возможное число элементов; кнопки управления (<По умолчанию>, <Отмена>, <Закрыть>, <Справка>).
Рис. 19.27. Диалоговое окно пользователя
Для выделенного элемента диалогового окна с помощью команды контекстного меню Формат объекта вызывается окно «Форматирование объекта» для задания указанных характеристик.
19.3. РЕЛЯЦИОННЫЕ ЯЗЫКИ МАНИПУЛИРОВАНИЯ ДАННЫМИ
Реляционные модели Классификация реляционных языков
Основные характеристики языка SQL Организация запросов к базе данных на языке SQL
РЕЛЯЦИОННЫЕ МОДЕЛИ Основные понятия
Реляционные модели данных (РМД), в отличие от сетевых и иерархических (см. гл. 15), характеризуются простотой структуры данных, удобным для пользователя табличным представлением, а
также возможностью использования формального аппарата алгебры отношений и реляционного исчисления для обработки данных. Отношение, или реляционная таблица, имеет прямоугольную структуру ("плоский файл") (рис. 19.28):
Запись 1
Запись 2
…
Запись m
Рис. 19.28. Структура данных реляционной таблицы
Применительно к реляционной таблице используется следующая стандартная терминология. Столбцы таблицы называются атрибутами, полями реляционных таблиц или доменами. Строки таблицы соответствуют записям, кортежам отношения.
Условимся считать, что указанные термины имеют полноправное употребление и являются синонимами.
Схема реляционной таблицы образована именами полей, образующих структуру ее записи, например:
(Поле1, Поле2,.... Поле n)
Пример 19.42. Схема отношения:
СТУДЕНТ(Имя, Фамилия, Дата рождения, № зач.книжки,...).
В заполненном виде этой схеме соответствует таблица (рис. 19.29).
Студент
Имя |
Фамилия |
Дата рождения |
№ зач. книжки |
и т.д. |
|
|
|
|
|
Петр |
Иванов |
12.12.80 |
123245 |
|
Марина |
Петрова |
1.1.80 |
233244 |
|
Рис. 19.29. Фрагмент реляционной таблицы
Данные реляционной таблицы логически взаимосвязаны, описывают определенную сущность предметной области. Таблицы, или отношения, имеют наименования, раскрывающие содержательную сторону представляемой информации.
Для определенности изложения рассмотрим реляционную таблицу (рис. 19.29).
Таблица СТУДЕНТ содержит основные сведения о студентах учебного заведения. Каждое поле принимает определенное значение в строке таблицы, обладает определенным форматом, или типом данных: Фамилия – строка символов, Дата рождения – дата в формате ДД.ММ.ГГ.
Таблица имеет ключи – поле или группа полей, значение которых необходимо для идентификации строк (записей). Ключ обладает свойством уникальности значения, то есть неповторяемости в экземплярах записей.
Если ключей несколько, один из них в объявлении схемы принимается за первичный (основной). Прочие ключи называются возможными. По первичному ключу выполняется автоматическое упорядочение записей (сортировка в порядке возрастания значений ключа).
Пример 19.43. Таблица СТУДЕНТ содержит записи; для идентификации отдельной записи указывается значение ключа. В данном случае ключей несколько:
№ зач. книжки; [Имя]+[Фамилия]+[Дата рождения].
Право выбора первичного ключа остается за пользователем, выбирается ключ, как правило, наиболее часто используемый для поиска записи.
Для эффективной реализации поиска и обработки данных создаются индексы, обеспечивающие формирование дополнительных индексных файлов (рис. 19.30).
Значение индекса |
Адрес записи, содержащей значение индекса |
и1 |
Адр2 |
и2 |
Адр10 |
и3 |
Адр1 |
и т.д. |
|
Рис. 19.30. Индекс реляционной таблицы
При корректировке записей таблицы автоматически упорядочиваются индексы, изменяется местоположение каждого индекса – согласно принятому условию (возрастание или убывание значений);
сами же записи реляционной таблицы не перемещаются при включении или удалении новых экземпляров записей, изменении значений их ключевых полей. Таким образом, индекс обеспечивает логическую последовательность записей в реляционной таблице, а также прямой доступ к записи по ее машинному или относительному адресу в файле реляционной таблицы.
Количество индексов, имена (идентификаторы) индексов, соответствие индексов полям таблицы определяются при создании схемы таблицы. В свою очередь, индексы можно создавать и удалять, оставляя неизменным содержание записей реляционной таблицы. Следует помнить, что большое число индексов замедляет корректировку записей в реляционной таблице.
Работа с данными осуществляется на уровне:
отдельной таблицы; нескольких таблиц.
Типовые операции по обработке записей реляционной таблицы
Классический состав операций с реляционными таблицами определяет требования к реляционным языкам. Рассмотрим типовые операции по обработке записей в изолированной реляционной таблице.
Включить – добавляется новая запись, для чего указывается имя таблицы, в которую производится дополнение, и значения полей новой записи, обязательно заполнение ключевых полей.
Удалить – удаляется определенная запись или группа записей, указывается имя таблицы и первичный ключ удаляемой записи – единичное удаление либо формируется условие (задают значения вторичных ключей или отдельных полей записи), выполнение которого необходимо для удаления группы записей.
Обновить - изменяется значение полей указанной записи, задается имя таблицы, идентификатор записи (записей), подлежащей корректировке значений полей, новые значения изменяемых полей.
Выборка (селекция) – выбор подмножества записей таблицы по условию, которое формулируется как логическое выражение. Результирующая таблица имеет ту же схему, что и исходная; эту операцию называют "горизонтальной" выборкой. Частным случаем выборки является пустая выборка, если исходные записи не соответствуют условию отбора.
Проекция – для таблицы указывается подмножество полей, участвующих в формировании новой (выходной) таблицы, имеющей другую схему, и, может быть, другой массив записей (исключаются записи, дублирующие друг друга). Эту операцию называют "вертикальной" выборкой.
Пример 19.44.
Ввод сведений о новом студенте:
ВКЛЮЧИТЬ в СТУДЕНТ [Игорь; Смирнов; 23.02.1980; 126543] Изменить номер зачетной книжки студента:
ОБНОВИТЬ в СТУДЕНТ: [Игорь; Смирнов; 23.02.1980] поле [№
зач.книжки] = 345234
Удаление сведения о студенте:
УДАЛИТЬ в СТУДЕНТ: [Игорь; Смирнов; 23.02.1980] Удаление сведения о студентах, которые родились в 1979 г.:
УДАЛИТЬ в СТУДЕНТ: если [Дата рождения] >=01.01.1980 AND
[Дата рождения] < 01.01.1981
Отобрать студентов, у которых номера зачетных книжек находятся в интервале 100000 – 200000:
ВЫБОРКА в СТУДЕНТ: если [№ зач.книжки] >= 100000 AND [№
зач.книжки] < 200000
Результат выборки
Имя |
Фамилия |
Дата рождения |
№ зач.книжки |
Марина |
Петрова |
1.1.80 |
233244 |
Сформировать список имен студентов на основании таблицы СТУДЕНТ
ПРОЕКЦИЯ СТУДЕНТ [Имя]:
СТУДЕНТ
Имя |
Фамилия |
Дата |
№ |
|
|
рождения |
зач.книжки |
Петр |
Иванов |
12.12.80 |
123245 |
Марина |
Петрова |
1.1.80 |
233244 |
Марина |
Смирнова |
6.6.81 |
553435 |
Результат проекции
Типовые операции совместной обработки реляционных таблиц
Операции совместной обработки таблиц различны для таблиц с одинаковой или отличающейся схемой данных. Применительно к односхемным таблицам (одинаковый состав полей) выполняются следующие операции:
Объединение – для двух таблиц строится новая таблица той же схемы, содержащая совокупность записей исходных таблиц. При этом, если таблицы содержат одинаковые значения первичного ключа, при объединении таблиц записи не дублируются. Если записи двух таблиц имеют различные значения первичного ключа, результат объединения – совокупность всех записей исходных таблиц.
Пример 19.45. Имеются таблицы СТУДЕНТ (дневная форма обучения) и СТУДЕНТ-ЗАОЧНИК (заочная форма обучения) одной схемы. Они объединяются в одну таблицу СТУДЕНТЫ той же схемы (но без дублирования первичных ключей записей). Так, студентка ПЕТРОВА Марина присутствует в таблице СТУДЕНТЫ в единственном числе:
СТУДЕНТ
Имя |
Фамилия |
Дата |
№ |
|
|
рождения |
зач.книжки |
Петр |
Иванов |
12.12.80 |
123245 |
Марина |
Петрова |
1.1.80 |
233244 |
СТУДЕНТ-ЗАОЧНИК |
|
|
|
|
|
|
Имя |
Фамилия |
Дата |
№ |
|
|
рождения |
зач.книжки |
Иван |
Сидоров |
12.1.80 |
123247 |
Марина |
Петрова |
1.1.80 |
233244 |
Итог объединения: СТУДЕНТЫ |
|
|
|
|
|
|
Имя |
Фамилия |
Дата |
№ |
|
|
рождения |
зач.книжки |
Петр |
Иванов |
12.12.80 |
123245 |
Марина |
Петрова |
1.1.80 |
233244 |
Иван |
Сидоров |
12.1.80 |
123247 |
Пересечение – для двух таблиц строится новая таблица той же схемы, содержащая общие для них записи (с одинаковыми значениями первичного ключа). Если записей, содержащих одинаковое значение первичного ключа, нет, результат пересечения – пустая таблица.
Пример 19.46. Имеются таблицы СТУДЕНТ (дневная форма обучения) и СТУДЕНТ-ЗАОЧНИК (заочная форма обучения). При пересечении таблиц выявляются студенты, находящиеся в двух таблицах одновременно:
СТУДЕНТ
Имя |
Фамилия |
Дата |
№ |
|
|
рождения |
зач.книжки |
Петр |
Иванов |
12.12.80 |
123245 |
Марина |
Петрова |
1.1.80 |
233244 |
СТУДЕНТ-ЗАОЧНИК
607