Автоматизация приложении в среде Access

Автор работы: Пользователь скрыл имя, 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

Прикрепленные файлы: 1 файл

Курсовая работа Тема- Автоматизация приложении среде Microsoft Office (Access).doc

— 341.00 Кб (Скачать документ)

 

Подобные случаи очень поучительны так как позволяют нам научиться организовывать разработку приложений на простых примерах не требующих огромных затрат времени и ресурсов. К тому же данное приложение очень простое, и зная его структуру и основные идеи, его можно переделать за несколько часов. Но если представить себе что это большой проект, над которым трудятся десятки или сотни человек, то трудно представить ущерб от подобных ситуаций.

 

 

Подведем некоторые  итоги. Для успешного создания приложения необходимо: первое, четко продумать и формализовать задачу, опираясь на документированные  данные заказчика. Принять решение в какой среде, и какими средствами будет создаваться приложение. Разработать и протестировать костяк приложения,  в нашем случае это связанные таблицы в среде MS Office Access. После тестирования таблиц на простых и сложных примерах, я перешел к разработке автоматизации приложения. В моем случае, надо написать код на VBA при помощи которого будут генерироваться личные номера книг.

 

Разработка  автоматизации проходит в Access FORMS VBA.

Алгоритм:

  1. нажимается кнопка главной формы Books
  2. если поле ISBN главной формы Books не пусто (книга зарегистрирована)
    1. открыть поверх главной формы новую форму для ввода количества новых книг
    2. ISBN номер переносится на второй уровень с первого
    3. вводится количество новых книг в поле на новой форме n
    4. из таблицы InventNumbers, из поля InventNum извлекается максимальный номер и присваивается рабочей переменной плюс 1
    5. организуется цикл for для создания  новых n личных номеров и записи их на текущий ISBN
    6. присваиваем текущему ISBN n новых номеров и заносим их в таблицу InventNumbers
  3. иначе сообщение об ошибке, попытка присвоить личные номера не зарегистрированной книге.

 

 

 

 

Первый уровень формы регистрации новой книге.

 

 

Для успешной организации  алгоритма приведенного выше понадобиться написать ряд пользовательских функций  и ухищрений. Например, есть два рациональных варианта получить максимальный личный номер книги. Первый это организовать функцию поиска максимального числа в заданной таблице и заданном поле. Но это неэффективно при больших массивах информации. Есть более быстрый способ. Для его реализации необходимо создать служебную таблицу. Она не будет связана с другими таблицами приложения, но будет использоваться как хранилище служебных данных не связанных друг с другом. В соответствии с правилами такие данные должны храниться в зашифрованном виде в отдельных файлах. Но удобней всю необходимую информацию хранить вместе. Я пробовал работать с файлами разных расширений. Проблема заключается в том, что если что-то делать  профессионально, то придется все делать по правилам.  В случае с файлами для грамотной и хорошей работы потребуется писать программу развертки 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("InventNumbers",                           dbOpenDynaset, dbappendonly)

           With rcd

              .AddNew

              ![InventNum] = i

              ![IDBook] = ISBN

              .Update

              .Close

           End With

           Forms![AddBooks-2].Список0.AddItem i

        Next i

       

        DoCmd.Save

        AddToTable ISBN, n

   

    Else

      MsgBox " Введите Количество Книг", vbCritical

    End If

 

  DelNumber

  InNumber (max_invent_number)

End Sub

 

 

 

Разработав интерфейсы ввода долгосрочных данных, приступим  к разработке интерфейсов текущих  данных.

 

Главным на этом этапе  будет продумать возможности  и задачи интерфейса выдачи-приема книг.

 

Простые интерфейсы проще создать при помощи мастера форм, он создает строгие классические формы вполне приемлемые для нашей задачи.

 

Второй уровень формы  регистрации новой книги.

 

 

Интерфейс приема-выдачи книг должен содержать полные данные о студенте, которые нельзя в этой форме менять и поле для ввода-удаления новых данных о книгах. Целесообразно создать интерфейс двух уровней. Первый включит в себя полные данные пользователя и окно ввода-удаления личных номеров книг, а второй будет защищен от изменений и будет содержать полные данные о пользователе и всех его книгах. Такая организация интерфейса позволит визуально контролировать выдачу-прием книг и значительно упростит поиск и ориентацию в происходящем.

Как же понадобиться промежуточная  форма для проверки ввода данных.

 

Алгоритм формы выдача-прием книг:

 

    1. открываем форму
    2. курсор автоматически устанавливается на поле фамилия абонента
    3. нажимаем кнопку на панели инструментов поиск
    4. в форме поиска ввести нужную фамилию или первые буквы
    5. появится сложноподчиненная форма, первого уровня
    6. на ней если надо выдать книгу, то после выбора книги пользователем, личный номер книги вводится в соответствующее поле
    7. нажать кнопку расширенный просмотр текущих книг
    8. появиться такая же форма, только защищенная от изменений и с полной информацией о книгах личные номера, которых до этого были введены.
    9. Проварив данные, выданные компьютером о книге, которую библиотекарь держит в руках, с фактическими данными на титульных листах книги библиотекарь убедившись, что выдает то, что регистрирует, нажимает кнопку сохранить.
    10. После чего возвращается обратно в главное меню.     

 

На этом этапе надо учитывать, что личные номера вводятся в форму непосредственно из книги, поэтому любая ошибка ввода личного номера это ошибка не машины, а человека при вводе, поэтому при стандартной ошибке среды о повторяющемся значении ключевого поля следует выдать сообщение, что данная книга уже выдана и произошла ошибка ввода. Это однозначно так, по той причине таблица InventNumbers и таблица BooksOfUsers связана один к одному, то есть в каждой из таблиц запись может встречаться только один раз. По этой причине, сообщение о попытке ввода повторных записей в ключевое поле должно быть трактовано однозначно.

После выполнения этой части  следует протестировать эту часть  приложения.

 

 

Форма выдачи-приема книг.

 

в этой форме водиться только личный номер книги и при  нажатии кнопки «Расширенно» производиться  визуальный контроль номера книги и  самой книги соответствует ли номер выдаваемой книги.

 

 

 

Второй уровень формы  выдача-прием книги. Режим визуального  контроля.

 

Алгоритм списания книги  с абонента аналогичен выдачи книги. Производиться в этой же форме. Порядок  действий такой же. Находится пользователь среди представленного списка личных номеров книг записанного на данного  пользователя номер книги, которые  конкретно принесены в библиотеку для сдачу. Найдя нужный номер, при помощи встроенной функции «Найти…»  или обнаружив его, визуально выделяем его и удаляем. Сохраняем изменения.

Для успешного выполнения выше приведенного алгоритма, необходимо воспользоваться служебной таблицей ServInventNumbers.

Суть проблемы состоит  в том, что после ввода новых личных номеров книг и переход на второй уровень формы проверку введенных данных среда Access производит резервное сохранение измененных данных. Данные будут автоматически записаны в таблицу без предварительной проверки библиотекарем. Отменить ввод данных будет невозможно. Поэтому следует записывать эти данные через вспомогательную таблицу. После проверки данных они будут либо переписаны в основную таблицу либо удалены. Все эти манипуляции должны делаться при помощи VBA и должны быть скрыты от пользователя. 

 

Создав сложные формы, использующие коды автоматизации VBA создаем простые формы при помощи мастера форм.

 

Всего нам понадобятся формы:

 

  1. AddBooks
  2. AddUsers
  3. Books&InventNumbers
  4. MainMenu
  5. ServeCodeInput
  6. UsersTakingBooks

 

Но это главные формы  приложения, видимые в главном  меню. У многих из них есть вспомогательные  формы второго уровня. Они скрыты при помощи атрибутов. Это сделано, так как в них нет смысла попадать из главного меню, доступ к ним получаем только из форм, для которых это предусмотрено.

Важное замечание. Все  формы должны быть связаны друг с  другом при помощи кнопок перехода. Это обеспечивает целостность работы с формами. Форма MainMenu используется как главное меню. Из нее есть последовательный, продуманный доступ ко всем пользовательским формам. Из всех форм есть прямой доступ к форме MainMenu, это похоже на гиперссылку Home  на сайтах.

 

Форма ServeCodeInput дает доступ, при наличии пароля, к администраторской части приложения.

Главное меню приложения. Из этого интерфейса можно получить доступ ко всем возможностям приложения.

 

 

 

 

На администраторской  части приложения стоит остановиться подробней.

 

В современной практике программирования часто встречается  использование встроенных, скрытых от пользователя функций и возможностей приложения. Это позволяет увеличить возможности приложения при обработке и исправлении ошибок приложения, создания резервных копий данных, восстановление забытых паролей, доступ к интерфейсам изменения кодов VBA и так далее. Давать эти данные пользователю нет смысла, так как для их правильного применения необходима техническая информация.

Информация о работе Автоматизация приложении в среде Access