- •Базы данных
- •Введение
- •Часть 1. Проектирование баз данных
- •1.1. Некоторые понятия и определения
- •1. 2. Модели данных
- •1.2.1. Иерархическая модель данных
- •1.2.2. Сетевая модель данных
- •1.2.3. Реляционная модель данных Основные определения
- •Типы связей между отношениями
- •1.3. Классификация баз данных
- •1.4. Цели проектирования баз данных
- •1.5. Проектирование баз данных с использованием универсального отношения
- •1.5.1. Универсальное отношение
- •1.5.2. Проблемы, вызываемые использованием универсального отношения
- •Проблема вставки
- •Проблемы обновления
- •Проблемы удаления
- •1.5.3. Нормальная форма Бойса -Кодда
- •Функциональные зависимости
- •Возможный ключ и детерминант
- •Общий подход к декомпозиции
- •Анализ исходных аномалий
- •1.5.4. Возможные потери фз при декомпозиции
- •1.5.5. Избыточные функциональные зависимости
- •Приемы удаления избыточных фз
- •Минимальное покрытие
- •Модернизированный алгоритм проектирования бд
- •1.6. Метод er - проектирования
- •1.6.1. Сущности и связи
- •1.6.2. Степень связи
- •1.6.3. Переход от диаграмм er – типа к отношениям
- •Предварительные отношения для бинарных связей степени 1:1
- •Предварительные отношения для бинарных связей степени 1:n.
- •Предварительные отношения для бинарных связей степени n:m
- •1.6.4. Дополнительные конструкции, используемые в er - методе
- •Необходимость связей более высокого порядка
- •Предварительные отношения для трехсторонних связей
- •Использование ролей
- •1.6.5. Последовательность проектирования бд при использовании er- метода
- •1.6.6. Проверка отношений на завершающейся фазе проектирования
- •1.7. Другие нормальные формы
- •1.8. Контрольные вопросы
- •Часть 2. Специальные аспекты работы с базами данных
- •2.1. Защита данных в базе
- •2.2.1. Общие вопросы защиты данных
- •2.2.2. Реализация защиты данных в различных системах
- •Управление доступом в sql
- •Реализация системы защиты в ms sql Server
- •2.2. Обеспечение целостности данных
- •2.3. Организация параллельных процессов обработки данных
- •2.4. Восстановление бд
- •2.4.1. Уровни восстановления.
- •2.4.2. Восстановление и логический элемент работы
- •Требования к лэр
- •2.4.3. Промежуточное восстановление
- •2.4.4. Длительное восстановление
- •2.5. Математический аппарат, используемый при работе с реляционной базой данных
- •2.5.1. Теоретико-множественные операции реляционной алгебры
- •2.5.2. Специальные операции реляционной алгебры
- •2.6. Контрольные вопросы
- •Часть 3. Разработка приложений для работы с базами данных
- •3.1. Краткий обзор субд
- •3.2. Субд Access
- •3.2.1. Вводные замечания
- •3.2.2. Создание базы данных
- •3.2.3. Создание и работа с таблицами
- •3.2.4. Работа с запросами
- •3.2.5. Создание форм
- •3.2.6. Отчеты в Access
- •3.2.7. Макросы в Access
- •Преобразование макросов в программы на Visual Basic
- •3.2.8. Работа с внешними данными
- •3.3. Программирование в Access
- •3.3.1. Вводные замечания
- •3.3.2. Объявление переменных
- •3.3.3. Константы
- •3.3.4. Тип данных Variant
- •3.3.5. Пользовательские типы данных
- •3.3.5.Операторы, команды и выражения в vba
- •3.3.7. Процедуры vba
- •3.3.8. Управляющие структуры в vba
- •Работа с управляющими структурами
- •3.3.9. Объекты в Access
- •3.3.10. Классы в Access
- •3.3.11. Работа с ошибками в vba
- •3.4.Работа в ms sql –Server
- •3.4.1. Основные количественные показатели системы sql-сервер
- •3.4.2. Создание баз данных
- •3.4.3. Создание таблицы
- •3.4.4. Извлечение данных
- •3.4.5. Добавление данных
- •3.4.6. Изменение данных
- •3.4.7. Удаление данных
- •3.5. Контрольные вопросы
- •Цитированная литература
- •Оглавление
- •Часть 1. Проектирование баз данных 3
- •Часть 2. Специальные аспекты работы с базами данных 71
- •Часть 3. Разработка приложений для работы с базами данных 114
3.3.7. Процедуры vba
Задачи программирования можно упростить, разбивая программы на меньшие логические компоненты. Процедуры полезны при выполнении повторяющихся задач, таких, как часто используемые вычисления, манипулирование текстом и объектами и операции, связанные с обращением к базе данных. Программирование с применением процедур дает два главных преимущества:
• процедуры позволяют разбивать программы на дискретные логические единицы, каждую из которых отладить легче, чем целую программу без процедур;
• процедуры, используемые в одной программе, могут использоваться для построения других программ, обычно с незначительными модификациями либо вообще без них.
В Visual Basic для приложений используется несколько типов процедур:
• процедуры Sub выполняют некоторое действие, не возвращая значение;
• процедуры Function выполняют некоторое действие и по результатам его возвращают значение;
• процедуры Property могут возвращать и присваивать значения и устанавливать ссылки на объекты.
Процедуры Sub. Процедура Sub — блок кода, который выполняется в ответ на событие или по вызову. Если код в модуле разбит на процедуры Sub, его намного проще сопровождать или отлаживать.
Синтаксис определения процедуры Sub:
[ Private | Public] [Static] Sub имя_процедуры (параметры)
Инструкции
End Sub
При каждом вызове процедуры выполняются инструкции между Sub и End Sub. Процедуры Sub могут быть помещены в стандартные модули, модули класса и модули формы и отчета.
Параметры процедуры подобны объявляемым переменным, которые передаются из вызывающей процедуры.
В VBA следует различать два типа процедур Sub — пользовательские процедуры и процедуры обработки событий.
Пользовательские процедуры.Пользовательская процедура сообщает приложению, как выполнить определенную задачу. После определения пользовательской процедуры она должна вызываться приложением явно. С другой стороны, процедура обработки события остается неактивной до тех пор, пока она не будет инициирована в ответ на события, вызванные пользователем или системой.
Зачем нужно создавать пользовательские процедуры? Одна из причин в том, что несколько различных процедур обработки событий могут выполнять какое-либо аналогичное действие. Хорошим стилем программирования будет поместить такие общие инструкции в отдельной процедуре и вызывать их из процедур событий. Это устраняет потребность в дублировании кода и упрощает сопровождение приложения.
Процедуры обработки событий. Когда объект Visual Basic распознает, что произошло событие, он автоматически вызывает встроенную процедуру, используя имя, соответствующее событию (эти события представлены в списке Процедура окна модуля). Так как имя устанавливает ассоциацию между объектом и кодом, можно сказать, что процедуры обработки событий присоединены к формам и элементам управления:
• имя процедуры обработки события для элемента управления строится из фактического имени элемента управления (специфицированного в свойстве Имя), символа подчеркивания (_) и имени события. Например, при щелчке командной кнопки, именованной Кнопка1, будет вызвана процедура события Кнопка1_Сlick();
• в имени процедуры обработки события для формы объединяется слово " Form" (для отчета — "Report"), символ подчеркивания и имя события. При щелчке на поле формы будет вызвана процедура Form_Click() (как и элементы управления, формы имеют уникальные имена, но в именах процедур обработки событий они не используются).
Для всех процедур обработки событий используется один общий синтаксис. Синтаксис для события элемента управления:
PrivateSubимя-элемента-управления_имя-события (параметры)
Инструкции
End Sub
Синтаксис для события формы:
Private Sub Form_имя-события (параметры)
Инструкции
End Sub
Хотя процедуры обработки событий можно написать с самого начала, проще использовать заготовки кода, обеспечиваемые Access; они автоматически включают правильные имена процедур. Шаблон процедуры события можно получить в окне редактора кода, выбрав объект из списка Объект, а затем процедуру из списка Процедура.
Свойство Имя элемента управления рекомендуется назначить прежде, чем приступать к написанию для него процедур событий. Если имя элемента управления изменяется после создания для него процедур, нужно будет также в имена всех написанных процедур ввести соответствующее новое имя элемента управления. Иначе Access не сможет ассоциировать элемент управления с процедурой. Когда имя процедуры не соответствует имени элемента управления, Access рассматривает ее как главную процедуру.
Процедуры Function. Visual Basic для приложений включает большое количество встроенных функций, выполняющих стандартные операции. Это, например, такие функции, как Sqr, Cos или Chr. Кроме того, инструкцией Function можно объявлять пользовательские процедуры Function.
Как и процедура Sub, Function является отдельной процедурой, которая может принимать параметры, выполнять ряд инструкций и изменять значения параметров. В отличие от процедуры Sub, процедура Function может возвращать в вызывающую процедуру некоторое значение. Между процедурами Sub и Function имеется три различия:
• Обычно функция вызывается включением имени функции и ее параметров в правую часть инструкции или выражения:
возвращаемое значение = функция().
• подобно переменным, процедуры Function имеют типы данных. Тип данного функции определяет тип возвращаемого значения. (В отсутствие предложения As, тип функции — Variant);
• значение функции возвращается присвоением этого значения имени процедуры непосредственно в теле функции. Когда процедура Function возвращает значение, это значение может затем стать частью большего выражения.
Процедура Function вызывается так же, как и любая встроенная функция Visual Basic.
Создание новых процедур. Чтобы создать новую главную процедуру необходимо ввести заголовок процедуры в окне редактирования кода и нажать <Enter>. Заголовок процедуры предваряется ключевым словом Sub или Function. Например, можно ввести следующее:
Sub UpdateForm ()
или
Function SchetSumma () ' Можно даже без скобок
Access отвечает, завершая шаблон для новой процедуры (вводит скобки параметров и инструкцию End Sub или End Function).
Выбор существующих процедур. Для просмотра существующей пользовательской процедуры в текущем модуле, нужно в окне редактирования кода выбрать Общая область из списка Объект и затем выбрать процедуру в окне Процедура.
Для просмотра процедуры обработки события, нужно выбрать соответствующий объект из списка Объект в окне редактирования кода и затем выбрать событие в окне Процедура.
Для просмотра процедуры в другом модуле необходимо:
1. Из меню Вид выбрать Просмотр объектов или нажать кнопку Просмотр объектов на панели инструментов.
2. В списке Проект/Библиотека окна Просмотр объектов выбрать проект.
3. Выбрать модуль из списка Классы и найти процедуру в списке Компоненты.
4. Дважды щелкнуть процедуру или выбрать Описания в контекстном меню окна Просмотр объектов или нажать кнопку Описания. Откроется окно нужного модуля.
Вызов процедур. Методы вызова процедур варьируются в зависимости от типа вызывающей процедуры и от того, как процедура используется в приложении.
В следующих разделах показано, как вызывать процедуры Sub и Function.
Вызов процедур Sub. Процедура Sub отличается от процедуры Function тем, что процедура Sub не может вызываться вводом ее имени внутри выражения. Вызов Sub — автономная инструкция. Кроме того, в имени Sub не возвращается значение, как это имеет место для функции. Однако, подобно Function, Sub может изменять значения любой переданной ей переменной.
Вызвать процедуру Sub можно двумя способами:
' Обе следующие инструкции вызывают процедуру Sub Proc1
Call Proc1 (Argument1, Argument2)
Proc1 Argument1, Argument2
Следует отметить, что, когда используется синтаксис Call, параметры должны быть заключены в круглые скобки.
Если ключевое слово Call опущено, нужно также опустить круглые скобки вокруг параметров.
Вызов процедур Function. Обычно процедура Function, написанная программистом, вызывается аналогично встроенной функции Visual Basic, то есть с использованием ее имени в выражении:
' Все следующие инструкции вызовут функцию ToDec
Print 10 * ToDec
X = ToDec
If ToDec = 10 Then Debug.Print "Значение вне допустимого интервала"
X = Function1(10 * ToDec)
Можно также вызвать функцию аналогично процедуре Sub. Например, обе следующие инструкции вызывают функцию Year:
Call Year (Now)
Year Now
При вызове функции, таким образом, Visual Basic отбрасывает возвращаемое значение.
Вызов процедур других модулей. Процедуры Public в других модулях могут вызываться отовсюду в проекте. Возможно, потребуется специфицировать модуль, который содержит вызываемую процедуру. Это будет зависеть от того, в каком модуле размещена процедура: формы (отчета), класса или стандартном.
Процедуры в формах и отчетах. Все вызовы снаружи модуля формы должны указывать на модуль формы (или отчета), содержащий процедуру. Если, например, процедура, именованная Sub1, находится в модуле отчета Счет, то вызвать процедуру из этого модуля можно, используя такую инструкцию:
Call Report_Счет.Subl (параметры)
Процедуры в модулях классов. Как и при вызове процедуры формы, вызов процедуры в модуле класса должен квалифицироваться переменной, которая указывает на экземпляр класса. Например, DemoClass — экземпляр класса Class1:
Dim DemoClass as New Class1
DemoClass.Subl
Однако, в отличие от формы или отчета, имя класса не может непосредственно использоваться как спецификатор при обращении к экземпляру класса. Вначале должен быть объявлен экземпляр класса как объектная переменная (в нашем случае — DemoClass), и далее этот экземпляр должен адресоваться именем переменной.
Процедуры в стандартных модулях. Если имя процедуры уникально, включать имя модуля в вызове не требуется. Вызов изнутри или снаружи модуля будет адресован к этой уникальной процедуре.
Если два или больше модуля содержат процедуры с одинаковыми именами, придется квалифицировать их именем модуля. Вызов такой процедуры из модуля выполняет процедуру данного модуля. Например, если процедура с именем CommonName имеется в модулях Модуль1 и Модуль2, то вызов CommonName из Модуль2 запустит процедуру CommonName в Модуль2, но никак не процедуру CommonName в Модуль1.
Если из Модуль1 требуется вызвать процедуру CommonName, определенную в Модуль2, нужно использовать такую инструкцию:
Moдyль2.CommonName (параметры)