Автор работы: Пользователь скрыл имя, 01 Марта 2013 в 21:24, курсовая работа
Нельзя не отметить, что существенной причиной такого широкого распространения MS Access является и мощная рекламная поддержка, осуществляемая фирмой Microsoft. В процессе разработки данного продукта на рынок представлялись его различные версии. Наиболее известными (в некотором смысле этапными) стали Access 2.0, Access 7.0 (он впервые был включен в состав программного комплекса MS Office 95). Позже появились версии Access 97 (в составе MS Office 97 и Access 2000 (в составе MS Office 2000). Самой свежей версией является MS Access 2010, входящая в комплект MS Office.З адачей для автоматизации приложении в среде Access используем в качестве примера разработку приложении библиотеки Международного Института XXI века, позволяющего автоматизировать работу библиотекаря.
Введение: 3
1. Автоматизация приложения в среде Microsoft Access
1.1 Суть и структура приложения 5
1.2 Разработка таблиц, ключей и связей 6
1.3 Разработка Форм 9
2. Автоматизация приложения при помощи VBA 13
Заключение 25
Подобные случаи очень поучительны так как позволяют нам научиться организовывать разработку приложений на простых примерах не требующих огромных затрат времени и ресурсов. К тому же данное приложение очень простое, и зная его структуру и основные идеи, его можно переделать за несколько часов. Но если представить себе что это большой проект, над которым трудятся десятки или сотни человек, то трудно представить ущерб от подобных ситуаций.
Подведем некоторые итоги. Для успешного создания приложения необходимо: первое, четко продумать и формализовать задачу, опираясь на документированные данные заказчика. Принять решение в какой среде, и какими средствами будет создаваться приложение. Разработать и протестировать костяк приложения, в нашем случае это связанные таблицы в среде MS Office Access. После тестирования таблиц на простых и сложных примерах, я перешел к разработке автоматизации приложения. В моем случае, надо написать код на VBA при помощи которого будут генерироваться личные номера книг.
Разработка автоматизации проходит в Access FORMS VBA.
Алгоритм:
Первый уровень формы
Для успешной организации алгоритма приведенного выше понадобиться написать ряд пользовательских функций и ухищрений. Например, есть два рациональных варианта получить максимальный личный номер книги. Первый это организовать функцию поиска максимального числа в заданной таблице и заданном поле. Но это неэффективно при больших массивах информации. Есть более быстрый способ. Для его реализации необходимо создать служебную таблицу. Она не будет связана с другими таблицами приложения, но будет использоваться как хранилище служебных данных не связанных друг с другом. В соответствии с правилами такие данные должны храниться в зашифрованном виде в отдельных файлах. Но удобней всю необходимую информацию хранить вместе. Я пробовал работать с файлами разных расширений. Проблема заключается в том, что если что-то делать профессионально, то придется все делать по правилам. В случае с файлами для грамотной и хорошей работы потребуется писать программу развертки SETUP, иначе эти файлы придется создавать вручную и заносить в них начальные значения, или в лучшем случае писать код на VBA и управлять им с помощью кнопок формы. А это дело не благодарное, много раз это будет забываться при отладке и пользовании приложения. К тому же пользователя надо будет оповестить об этом, что б он ненароком не удалил эти файлы, так как все привыкли, что приложения MS Office работают без вспомогательных файлов, это будет не просто. Организация таблицы, которая не будет использоваться, по прямому назначению решит разом все проблемы. Будет быстродействие, но за это понадобиться заплатить двумя вещами. Первое и самое важное это защитить эту таблицу от пользователя. По причине того, что она не предназначена для такова рода использования, это может создать проблемы, но в ходе долгих поисков решение было найдено.
В таблицах Access есть возможность воспользоваться атрибутами таблиц и скрыть таблицу от пользователя. Как отменять этот атрибут я до сих пор не знаю. В этой таблице можно хранить также пароли доступа к административной части приложения.
Автоматизация приложения при помощи VBA
Приведем код на VBA, автоматизирующий работу приложения.
Ниже приведены только основные коды.
Эта процедура используется для авто заполнения поля таблицы Books «количества книг»
Sub AddToTable(ID As String, num As Long)
' добавляет в таблицу «Книги» в поле «Количество книг»
Dim cn As ADODB.Connection
Dim rcd As New ADODB.Recordset
Set cn = CurrentProject.Connection
rcd.Open "Books", cn, adOpenKeyset, adLockOptimistic, adCmdTable
rcd.MoveFirst
Do While Not rcd.EOF
If rcd![IDBook] = ID Then
rcd![Всего] = rcd![Всего] + num
End If
rcd.MoveNext
Loop
End Sub
Sub DelNumber()
' удаляет число из таблицы MAXINVENT
Dim cn As ADODB.Connection
Dim rcd As New ADODB.Recordset
Set cn = CurrentProject.Connection
rcd.Open "MAXINVENT", cn, adOpenKeyset, adLockOptimistic, adCmdTable ' сослаться на таблицу rcd.MoveLast
rcd.Delete
rcd.Update
End Sub
Sub InNumber(a)
‘Вставляет MaxInventNumber в таблицу MAXINVENT
Dim cn1 As ADODB.Connection
Dim rcd1 As New ADODB.Recordset
Set cn1 = CurrentProject.Connection
rcd1.Open "MAXINVENT", cn1, adOpenKeyset, adLockOptimistic, adCmdTable
rcd1.AddNew
rcd1![MaxInventNumber] = a
rcd1.Update
End Sub
Function OutNumber()
Функция возвращающая MaxInventNumber
Dim cn1 As ADODB.Connection
Dim rcd1 As New ADODB.Recordset
Set cn1 = CurrentProject.Connection
rcd1.Open "MAXINVENT", cn1, adOpenKeyset, adLockOptimistic, adCmdTable
rcd1.MoveFirst
OutNumber = rcd1![MaxInventNumber]
End Function
Основной код этой формы создает новые личные номера книг поступивших в библиотеку. Работает при нажатии кнопки присвоить во втором уровни формы регистрации новой книги, после ввода количества новых книг. Интерфейс приведен ниже.
Private Sub Кнопка9_Click()
' присвоить n последовательных номеров начиная с мах инвент номера
Dim minInv As Long ' номер из таблицы, с которого+1 присваиваются инвент №
Dim i As Long, j As Long ' j=minInv + 1
Dim n As Long ' количество книг, вводится из формы
Dim ISBN As String ' ID книги
Dim max_invent_number As Long ' номер до которого включительно присваиваются инвент №
Dim db As DAO.Database
Dim rcd As DAO.Recordset
If Forms![AddBooks-2].Поле6 <> "" Then
n = Val(Forms![AddBooks-2].Поле6)
ISBN = Forms![AddBooks-2].Поле2
minInv = OutNumber
j = minInv + 1
max_invent_number = minInv + n
For i = j To max_invent_number
Set db = CurrentDb
Set rcd = db.OpenRecordset("
With rcd
.AddNew
![InventNum] = i
![IDBook] = ISBN
.Update
.Close
End With
Forms![AddBooks-2].Список0.
Next i
DoCmd.Save
AddToTable ISBN, n
Else
MsgBox " Введите Количество Книг", vbCritical
End If
DelNumber
InNumber (max_invent_number)
End Sub
Разработав интерфейсы ввода долгосрочных данных, приступим к разработке интерфейсов текущих данных.
Главным на этом этапе будет продумать возможности и задачи интерфейса выдачи-приема книг.
Простые интерфейсы проще создать при помощи мастера форм, он создает строгие классические формы вполне приемлемые для нашей задачи.
Второй уровень формы регистрации новой книги.
Интерфейс приема-выдачи книг должен содержать полные данные о студенте, которые нельзя в этой форме менять и поле для ввода-удаления новых данных о книгах. Целесообразно создать интерфейс двух уровней. Первый включит в себя полные данные пользователя и окно ввода-удаления личных номеров книг, а второй будет защищен от изменений и будет содержать полные данные о пользователе и всех его книгах. Такая организация интерфейса позволит визуально контролировать выдачу-прием книг и значительно упростит поиск и ориентацию в происходящем.
Как же понадобиться промежуточная форма для проверки ввода данных.
Алгоритм формы выдача-прием книг:
На этом этапе надо учитывать, что личные номера вводятся в форму непосредственно из книги, поэтому любая ошибка ввода личного номера это ошибка не машины, а человека при вводе, поэтому при стандартной ошибке среды о повторяющемся значении ключевого поля следует выдать сообщение, что данная книга уже выдана и произошла ошибка ввода. Это однозначно так, по той причине таблица InventNumbers и таблица BooksOfUsers связана один к одному, то есть в каждой из таблиц запись может встречаться только один раз. По этой причине, сообщение о попытке ввода повторных записей в ключевое поле должно быть трактовано однозначно.
После выполнения этой части следует протестировать эту часть приложения.
Форма выдачи-приема книг.
в этой форме водиться только личный номер книги и при нажатии кнопки «Расширенно» производиться визуальный контроль номера книги и самой книги соответствует ли номер выдаваемой книги.
Второй уровень формы выдача-прием книги. Режим визуального контроля.
Алгоритм списания книги с абонента аналогичен выдачи книги. Производиться в этой же форме. Порядок действий такой же. Находится пользователь среди представленного списка личных номеров книг записанного на данного пользователя номер книги, которые конкретно принесены в библиотеку для сдачу. Найдя нужный номер, при помощи встроенной функции «Найти…» или обнаружив его, визуально выделяем его и удаляем. Сохраняем изменения.
Для успешного выполнения выше приведенного алгоритма, необходимо воспользоваться служебной таблицей ServInventNumbers.
Суть проблемы состоит в том, что после ввода новых личных номеров книг и переход на второй уровень формы проверку введенных данных среда Access производит резервное сохранение измененных данных. Данные будут автоматически записаны в таблицу без предварительной проверки библиотекарем. Отменить ввод данных будет невозможно. Поэтому следует записывать эти данные через вспомогательную таблицу. После проверки данных они будут либо переписаны в основную таблицу либо удалены. Все эти манипуляции должны делаться при помощи VBA и должны быть скрыты от пользователя.
Создав сложные формы, использующие коды автоматизации VBA создаем простые формы при помощи мастера форм.
Всего нам понадобятся формы:
Но это главные формы приложения, видимые в главном меню. У многих из них есть вспомогательные формы второго уровня. Они скрыты при помощи атрибутов. Это сделано, так как в них нет смысла попадать из главного меню, доступ к ним получаем только из форм, для которых это предусмотрено.
Важное замечание. Все формы должны быть связаны друг с другом при помощи кнопок перехода. Это обеспечивает целостность работы с формами. Форма MainMenu используется как главное меню. Из нее есть последовательный, продуманный доступ ко всем пользовательским формам. Из всех форм есть прямой доступ к форме MainMenu, это похоже на гиперссылку Home на сайтах.
Форма ServeCodeInput дает доступ, при наличии пароля, к администраторской части приложения.
Главное меню приложения. Из этого интерфейса можно получить доступ ко всем возможностям приложения.
На администраторской части приложения стоит остановиться подробней.
В современной практике программирования часто встречается использование встроенных, скрытых от пользователя функций и возможностей приложения. Это позволяет увеличить возможности приложения при обработке и исправлении ошибок приложения, создания резервных копий данных, восстановление забытых паролей, доступ к интерфейсам изменения кодов VBA и так далее. Давать эти данные пользователю нет смысла, так как для их правильного применения необходима техническая информация.