I. Постановка задачи Лаборатория инженерной океанологии (ЛИО) при дальневосточном научно-исследовательском гидрометеорологическом институте (ДВНИГМИ) производит расчеты предельно-допустимых сбросов (ПДС) для предприятий различных видов деятельности. Расчет производится с помощью специальных программ расчета ПДС по методике /1/. Разработать и реализовать базу данных (БД) “ПДС”, обеспечивающую хранение, накопление и предоставление всей информации о предприятии-заказчике, необходимой для программы расчета ПДС. II. Разработка базы данных “ПДС” Разработка базы данных “ПДС” проводилась в работе по летней практике. В этой работе была составлена полная инфологическая модель базы данных с типами сущностей, типами связей, их атрибутами и графическим представлением модели. Отчет по вышеуказанной летней практике представлен в данной пояснительной записке в приложении I. III. Реализация базы данных “ПДС” База данных “ПДС” была реализована на СУБД Microsoft Access 2.0 в среде Microsoft Windows 3.1 * . При выборе СУБД использовались /3-5/. В качестве руководства по генерации таблиц, экранных форм, запросов, отчетов, по программированию макрокоманд и программных модулей использовалась /2/. База данных вместе с таблицами данных, экранными формами, запросами, отчетными формами в Microsoft Access представляется в одном файле. База данных “ПДС” хранится в файле PDS.MDB. Схема данных, тексты макрокоманд и программное описание элементов управление приведены в разделе IV. Описание реализованного рабочего места (АРМ) на основе базы “ПДС” приводится в разделе V настоящей записки. IV. Схема данных и программные тексты Так как представление структуры базы данных, экранных форм, запросов, отчетных форм в Microsoft Access обеспечивается внутренней реализацией СУБД (в отличие от распространенных СУБД типа dBase, FoxPro, и т. д., в которых эти характеристики описываются программным путем), то представление полного программного кода базы данных, написанной на Microsoft Access является невозможным, в связи с отсутствием такового. Однако, при создании экранных форм для присвоения различных функций элементам управления - кнопкам - использовался внутренний язык СУБД - Access Basic. Некоторые процедуры, написанные на этом языке, представлены в приложении II. В базе данных “ПДС” для генерации двух отчетов используется два запроса. Хотя эти запросы генерировались визуальными средствами, но есть возможность представить их в виде SQL-запроса. Эти два SQL-запроса представлены также в приложении II. Для связи таблиц баз данных, также как и для запросов, используется визуальная генерация. Схема данных в графическом виде представлена также в приложении II. V. Описание автоматизированного рабочего места В результате работы было создано автоматизированное рабочее место (АРМ) в виде набора связанных экранных форм и отчетов, позволяющее вводить, редактировать, просматривать данные по предприятиям, по выпускам предприятий, загрязняющие вещества, концентрации веществ по выпускам, контрольные створы для выпусков, параметры загрязняющих веществ в контрольных створах. Кроме того, имеется возможность генерации отчетов по данным о выпусках предприятия и о концентрации загрязненных веществ по конкретному выпуску. После загрузки главного (и единственного) файла базы “ПДС” PDS.MDB из СУБД Microsoft Access на экране автоматически появляется следующий экран: Из главного экрана можно попасть в следующие экраны: * Кнопка “Предприятия” - экран для работы с базой Предприятия (добавление, удаление, редактирование Предприятий и их выпусков, а также концентраций загрязняющих веществ по каждому выпусков): * Кнопка “Контрольные створы” - работа с базой контрольных створов вместе с базой загрязняющих веществ по каждому створу: * Кнопка “Вещества” - добавление новых контролируемых загрязняющих веществ: Таким образом, программа “поддержки” базы данных “ПДС” содержит три главные экранные формы, с помощью которых можно вести базу данных. Кроме этих форм, существует еще несколько, которые являются вспомогательными и вызываются из форм, описанных выше. Вспомогательные формы в данной записке не приводятся из-за их малозначимости. VI. Результаты работы В результате непродолжительной работы с базой данных “ПДС” с помощью разработанных экранных форм были введены данные о нескольких предприятиях с информацией о выпусках. Таблицы, представляющие эти данные представлены в приложении III. В приложении IV представлены два вида отчетов, которые может генерировать БД “ПДС”. 1. Методика расчета предельно-допустимых сбросов (ПДС) веществ в водные объекты со сточными водами. - Харьков, 1990, - 115 c. 2. Электронная встроенная гипертекстовая справочная система Microsoft Access, файл MSACC20.HLP, 4.7 Мбайта. 3. Журнал “PC Magazine Russian Edition” ?7 1994, статья У. Плейна, “Microsoft Access”. 4. Журнал “PC Magazine Russian Edition” ?5 1994. 5. Журнал “КомпьюТерра” №37-38 1994. ПРОЦЕДУРЫ ОПИСАНИЯ ФУНКЦИЙ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ ЭКРАННЫХ ФОРМ Форма “Выпуски” Sub ДобавлениеНовойЗапис_Click () On Error GoTo Err_ДобавлениеНовойЗапис_Click DoCmd GoToRecord , , A_NEWREC Exit_ДобавлениеНовойЗапис_Click: Exit Sub Err_ДобавлениеНовойЗапис_Click: MsgBox Error$ Resume Exit_ДобавлениеНовойЗапис_Click End Sub Sub ДублироватьЗаписьВВы_Click () On Error GoTo Err_ДублироватьЗаписьВВы_Click DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, A_SELECTRECORD_V2, , A_MENU_VER20 DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, A_COPY, , A_MENU_VER20 DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, 6, , A_MENU_VER20'Paste Append Exit_ДублироватьЗаписьВВы_Click: Exit Sub Err_ДублироватьЗаписьВВы_Click: MsgBox Error$ Resume Exit_ДублироватьЗаписьВВы_Click End Sub Sub УдалениеЗаписиВВыпус_Click () On Error GoTo Err_УдалениеЗаписиВВыпус_Click DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, A_SELECTRECORD_V2, , A_MENU_VER20 DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, A_DELETE_V2, , A_MENU_VER20 Exit_УдалениеЗаписиВВыпус_Click: Exit Sub Err_УдалениеЗаписиВВыпус_Click: MsgBox Error$ Resume Exit_УдалениеЗаписиВВыпус_Click End Sub Sub ВызовФормы_Концентра_Click () On Error GoTo Err_ВызовФормы_Концентра_Click Dim DocName As String DocName = "Концентрация Стоков" DoCmd OpenForm DocName, , , "[Выпуск] = Forms![Предприятие]![Выпуск].Form![Выпуск]" Exit_ВызовФормы_Концентра_Click: Exit Sub Err_ВызовФормы_Концентра_Click: MsgBox Error$ Resume Exit_ВызовФормы_Концентра_Click End Sub Sub Кнопка47_Click () On Error GoTo Err_Кнопка47_Click Dim DocName As String Dim LinkCriteria As String DocName = "КонтрольныйСтвор" LinkCriteria = "[Контрольный Створ] = Forms![Предприятие]![Выпуск].Form![Поле46]" DoCmd OpenForm DocName, , , LinkCriteria DoCmd GoToControl "Внедренный_объект16" Forms![КонтрольныйСтвор]![ПереходКПервойЗаписиВПредприятиях].Доступ = 0 Forms![КонтрольныйСтвор]![ПереходКПредыдущейЗаписиВПредприятиях].Доступ = 0 Forms![КонтрольныйСтвор]![ПереходКСледующейЗаписиВПредприятиях].Доступ = 0 Forms![КонтрольныйСтвор]![ПереходКПоследнейЗаписиВПредприятиях].Доступ = 0 Forms![КонтрольныйСтвор]![Кнопка20].Доступ = 0 Forms![КонтрольныйСтвор]![Кнопка21].Доступ = 0 Forms![КонтрольныйСтвор]![Кнопка22].Доступ = 0 Forms![КонтрольныйСтвор]![Название].Доступ = 0 Exit_Кнопка47_Click: Exit Sub Err_Кнопка47_Click: MsgBox Error$ Resume Exit_Кнопка47_Click End Sub Форма “Главная” Sub Кнопка2_Click () On Error GoTo Err_Кнопка2_Click Dim DocName As String Dim LinkCriteria As String DocName = "Предприятие" DoCmd OpenForm DocName, , , LinkCriteria Exit_Кнопка2_Click: Exit Sub Err_Кнопка2_Click: MsgBox Error$ Resume Exit_Кнопка2_Click End Sub Sub Кнопка3_Click () On Error GoTo Err_Кнопка3_Click Dim DocName As String Dim LinkCriteria As String DocName = "КонтрольныйСтвор" DoCmd OpenForm DocName, , , LinkCriteria Exit_Кнопка3_Click: Exit Sub Err_Кнопка3_Click: MsgBox Error$ Resume Exit_Кнопка3_Click End Sub Sub Кнопка9_Click () On Error GoTo Err_Кнопка9_Click DoCmd Close Exit_Кнопка9_Click: Exit Sub Err_Кнопка9_Click: MsgBox Error$ Resume Exit_Кнопка9_Click End Sub Sub Кнопка6_Click () On Error GoTo Err_Кнопка6_Click Dim DocName As String Dim LinkCriteria As String DocName = "О программе" DoCmd OpenForm DocName, , , LinkCriteria Exit_Кнопка6_Click: Exit Sub Err_Кнопка6_Click: MsgBox Error$ Resume Exit_Кнопка6_Click End Sub Sub Кнопка5_Click () On Error GoTo Err_Кнопка5_Click Dim DocName As String Dim LinkCriteria As String DocName = "Вещество" DoCmd OpenForm DocName, , , LinkCriteria Exit_Кнопка5_Click: Exit Sub Err_Кнопка5_Click: MsgBox Error$ Resume Exit_Кнопка5_Click End Sub Форма “КонтрольныйСтвор” Sub Form_Close () Forms![КонтрольныйСтвор]![ПереходКПервойЗаписиВПредприятиях].Доступ = 1 Forms![КонтрольныйСтвор]![ПереходКПредыдущейЗаписиВПредприятиях].Доступ = 1 Forms![КонтрольныйСтвор]![ПереходКСледующейЗаписиВПредприятиях].Доступ = 1 Forms![КонтрольныйСтвор]![ПереходКПоследнейЗаписиВПредприятиях].Доступ = 1 Forms![КонтрольныйСтвор]![Кнопка20].Доступ = 1 Forms![КонтрольныйСтвор]![Кнопка21].Доступ = 1 Forms![КонтрольныйСтвор]![Кнопка22].Доступ = 1 Forms![КонтрольныйСтвор]![Название].Доступ = 1 End Sub Sub ВыходИзФормыКонтроль_Click () On Error GoTo Err_ВыходИзФормыКонтроль_Click DoCmd Close Exit_ВыходИзФормыКонтроль_Click: Exit Sub Err_ВыходИзФормыКонтроль_Click: MsgBox Error$ Resume Exit_ВыходИзФормыКонтроль_Click End Sub Sub Кнопка20_Click () On Error GoTo Err_Кнопка20_Click DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, 10, , A_MENU_VER20 Exit_Кнопка20_Click: Exit Sub Err_Кнопка20_Click: MsgBox Error$ Resume Exit_Кнопка20_Click End Sub Sub Кнопка21_Click () On Error GoTo Err_Кнопка21_Click DoCmd GoToRecord , , A_NEWREC Exit_Кнопка21_Click: Exit Sub Err_Кнопка21_Click: MsgBox Error$ Resume Exit_Кнопка21_Click End Sub Sub Кнопка22_Click () On Error GoTo Err_Кнопка22_Click DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, A_SELECTRECORD_V2, , A_MENU_VER20 DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, A_DELETE_V2, , A_MENU_VER20 Exit_Кнопка22_Click: Exit Sub Err_Кнопка22_Click: MsgBox Error$ Resume Exit_Кнопка22_Click End Sub Sub ПереходКПервойЗаписи_Click () On Error GoTo Err_ПереходКПервойЗаписи_Click DoCmd GoToRecord , , A_FIRST Exit_ПереходКПервойЗаписи_Click: Exit Sub Err_ПереходКПервойЗаписи_Click: MsgBox Error$ Resume Exit_ПереходКПервойЗаписи_Click End Sub Sub ПереходКПоследнейЗап_Click () On Error GoTo Err_ПереходКПоследнейЗап_Click DoCmd GoToRecord , , A_LAST Exit_ПереходКПоследнейЗап_Click: Exit Sub Err_ПереходКПоследнейЗап_Click: MsgBox Error$ Resume Exit_ПереходКПоследнейЗап_Click End Sub Sub ПереходКПредыдущейЗа_Click () On Error GoTo Err_ПереходКПредыдущейЗа_Click DoCmd GoToRecord , , A_PREVIOUS Exit_ПереходКПредыдущейЗа_Click: Exit Sub Err_ПереходКПредыдущейЗа_Click: If Err 2105 Then MsgBox Error$ Resume Exit_ПереходКПредыдущейЗа_Click End Sub Sub ПереходКСледующейЗап_Click () On Error GoTo Err_ПереходКСледующейЗап_Click DoCmd GoToRecord , , A_NEXT Exit_ПереходКСледующейЗап_Click: Exit Sub Err_ПереходКСледующейЗап_Click: If Err 2105 Then MsgBox Error$ Resume Exit_ПереходКСледующейЗап_Click End Sub Форма “Концентрация Стоков” Sub ЗакрытиеФормы_Концен_Click () On Error GoTo Err_ЗакрытиеФормы_Концен_Click DoCmd Close Exit_ЗакрытиеФормы_Концен_Click: Exit Sub Err_ЗакрытиеФормы_Концен_Click: MsgBox Error$ Resume Exit_ЗакрытиеФормы_Концен_Click End Sub Sub ОтчетПоКонцентрациям_Click () On Error GoTo Err_ОтчетПоКонцентрациям_Click Dim DocName As String DocName = "ОтчетПоКонцентрациям" DoCmd OpenReport DocName, A_PREVIEW Exit_ОтчетПоКонцентрациям_Click: Exit Sub Err_ОтчетПоКонцентрациям_Click: MsgBox Error$ Resume Exit_ОтчетПоКонцентрациям_Click End Sub Форма “Предприятие” Sub Закрыть_Форму_Предпр_Click () On Error GoTo Err_Закрыть_Форму_Предпр_Click DoCmd Close Exit_Закрыть_Форму_Предпр_Click: Exit Sub Err_Закрыть_Форму_Предпр_Click: MsgBox Error$ Resume Exit_Закрыть_Форму_Предпр_Click End Sub Sub Запустить_Форму_Выпу_Click () On Error GoTo Err_Запустить_Форму_Выпу_Click Dim DocName As String Dim LinkCriteria As String DocName = "Выпуск" DoCmd OpenForm DocName, , , LinkCriteria Exit_Запустить_Форму_Выпу_Click: Exit Sub Err_Запустить_Форму_Выпу_Click: MsgBox Error$ Resume Exit_Запустить_Форму_Выпу_Click End Sub Sub НоваяЗаписьВПредприя_Click () On Error GoTo Err_НоваяЗаписьВПредприя_Click DoCmd GoToRecord , , A_NEWREC Exit_НоваяЗаписьВПредприя_Click: Exit Sub Err_НоваяЗаписьВПредприя_Click: MsgBox Error$ Resume Exit_НоваяЗаписьВПредприя_Click End Sub Sub ОтчетПоВыпускам_Click () On Error GoTo Err_ОтчетПоВыпускам_Click Dim DocName As String DocName = "ОтчетПоВыпускамПредприятия" DoCmd OpenReport DocName, A_PREVIEW Exit_ОтчетПоВыпускам_Click: Exit Sub Err_ОтчетПоВыпускам_Click: MsgBox Error$ Resume Exit_ОтчетПоВыпускам_Click End Sub Sub ПереходКПервойЗаписи_Click () On Error GoTo Err_ПереходКПервойЗаписи_Click DoCmd GoToRecord , , A_FIRST Exit_ПереходКПервойЗаписи_Click: Exit Sub Err_ПереходКПервойЗаписи_Click: MsgBox Error$ Resume Exit_ПереходКПервойЗаписи_Click End Sub Sub ПереходКПоследнейЗап_Click () On Error GoTo Err_ПереходКПоследнейЗап_Click DoCmd GoToRecord , , A_LAST Exit_ПереходКПоследнейЗап_Click: Exit Sub Err_ПереходКПоследнейЗап_Click: MsgBox Error$ Resume Exit_ПереходКПоследнейЗап_Click End Sub Sub ПереходКПредыдущейЗа_Click () On Error GoTo Err_ПереходКПредыдущейЗа_Click DoCmd GoToRecord , , A_PREVIOUS Exit_ПереходКПредыдущейЗа_Click: Exit Sub Err_ПереходКПредыдущейЗа_Click: If Err 2105 Then MsgBox Error$ Resume Exit_ПереходКПредыдущейЗа_Click End Sub Sub ПереходКСледующейЗап_Click () On Error GoTo Err_ПереходКСледующейЗап_Click DoCmd GoToRecord , , A_NEXT Exit_ПереходКСледующейЗап_Click: Exit Sub Err_ПереходКСледующейЗап_Click: If Err 2105 Then MsgBox Error$ Resume Exit_ПереходКСледующейЗап_Click End Sub Sub ПоискЗаписиВПредприя_Click () On Error GoTo Err_ПоискЗаписиВПредприя_Click DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, 10, , A_MENU_VER20 Exit_ПоискЗаписиВПредприя_Click: Exit Sub Err_ПоискЗаписиВПредприя_Click: MsgBox Error$ Resume Exit_ПоискЗаписиВПредприя_Click End Sub Sub Редактирование_Выпус_Click () On Error GoTo Err_Редактирование_Выпус_Click Dim DocName As String Dim LinkCriteria As String DocName = "Выпуск" LinkCriteria = "[Предприятие] = [Предприятие]![Предприятие]" DoCmd OpenForm DocName, , , LinkCriteria Exit_Редактирование_Выпус_Click: Exit Sub Err_Редактирование_Выпус_Click: MsgBox Error$ Resume Exit_Редактирование_Выпус_Click End Sub Sub СписокПредприятийДля_AfterUpdate () DoCmd ApplyFilter , "НазваниеПредприятие = Me![СписокПредприятийДляПоиска]" End Sub Sub УдалениеЗаписиВПредп_Click () On Error GoTo Err_УдалениеЗаписиВПредп_Click DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, A_SELECTRECORD_V2, , A_MENU_VER20 DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, A_DELETE_V2, , A_MENU_VER20 Exit_УдалениеЗаписиВПредп_Click: Exit Sub Err_УдалениеЗаписиВПредп_Click: MsgBox Error$ Resume Exit_УдалениеЗаписиВПредп_Click End Sub ЗАПРОСЫ ДЛЯ СОЗДАНИЯ ОТЧЕТОВ (В ФОРМЕ SQL) Запрос “ЗапросДляОтчетаПоВыпускам” SELECT DISTINCTROW Предприятие.НазваниеПредприятия, Выпуск.НазваниеВыпуска, Выпуск.Расход, Выпуск.Диаметр, Выпуск.РасстояниеДоБерега, Выпуск.Глубина, Выпуск.СкоростьТечения FROM Предприятие INNER JOIN Выпуск ON Предприятие.Предприятие = Выпуск.Предприятие WHERE ((Предприятие.НазваниеПредприятия=[Forms]![Предприятие]![НазваниеПредприятия])); Запрос “ЗапросДляОтчетаПоКонцентрациям” SELECT DISTINCTROW Выпуск.НазваниеВыпуска.