Десять шагов в microsoft_access (835787), страница 5
Текст из файла (страница 5)
Каждая процедура начинается с одного из приведенныхвыше заголовков и заканчивается оператором End Sub. Все, что расположено между заголовком и End Sub, является телом процедуры, со-34держащим собственно ее код, то есть последовательность операторовязыка.Рис. 38. Окно модуля формыПервое ключевое слово в заголовке – Private означает, что данная процедура может быть вызвана только из «своей» формы. Далее следуетимя процедуры. Имя состоит из двух частей: имени элемента управления (или другого объекта), с которым связана процедура, и события, которое обрабатывается этой процедурой (в данном случае Click).
Вот почему мы дали кнопкам содержательные имена! По имени процедуры мысразу можем сказать, нажатие какой из четырех кнопок она обслуживает.Приняв к сведению рассмотренный выше материал, закроем окно модуля, а затем и окно свойств. Таким образом, мы вернемся в ленточную35форму, находящуюся в режиме конструктора. Двойным щелчком откроем окно свойств элемента управления «название» в области данных.Появится окно свойств, озаглавленное «Поле: название».
Если Вы поошибке щелкнете по надписи «название» в заголовке формы, то откроется окно «Надпись: название Надпись». Выберем заставку «События»и щелкнем левой клавишей на строке, соответствующей событию«Двойное нажатие кнопки». Мы хотим двойному щелчку по названиюпоставщика поставить в соответствие процедуру, открывающую формус подробной информацией о данном поставщике. Щелкнем по троеточию, как мы поступили выше, когда открывали окно модуля формы.Поскольку событию еще не поставлен в соответствие метод его обработки, откроется диалоговое окно «Построитель» (рис. 39). В этом окнемы выберем строку «Программы» и нажмем «ОК».
Откроется окно модуля. В этом окне мы увидим процедуру с пустым телом:Private Sub название_DblClick(Cancel As Integer)End SubОбратите внимание, что имя процедуры – название_DblClick опять состоит из двух частей: имени элемента управления («название») и события (DblClick, то есть двойной щелчок). Между заголовком и End Subмы должны внести код процедуры, обрабатывающей данное событие.Почему мы выбрали двойное нажатие, а не одинарное? Если в качествесобытия выбрать одинарное нажатие, форма «поставщики_столбец» будет открываться при каждой попытке установить указатель курсора вполе «название» ленточной формы.
Теперь дело только за кодом процедуры. Но этот код за нас один раз уже написала система и он находитсяв теле процедуры вход_Click().Рис. 39. Диалоговое окно «Построитель»36Было бы неразумно писать этот код еще раз. Мы просто вставим в телопроцедуры название_DblClick вызов процедуры вход_Click(), то естьоператор «Call вход_Click()». Новая процедура примет вид:Private Sub название_DblClick(Cancel As Integer)Call вход_ClickEnd SubЗакроем последовательно окно модуля формы, окно свойств и окно конструктора формы.4. Шаг четвертый, или первый самостоятельныйТеперь Вы должны самостоятельно разработать аналогичные объектыдля просмотра, ввода и редактирования данных о потребителях продукции, а также по номенклатуре товаров. Возможно, повторение – не самое интересное занятие, но, во-первых, это неизбежный шаг в процессеразработки приложения, во-вторых, Вам предоставляется возможностьубедиться, насколько хорошо Вы усвоили весь пройденный материал, и,в-третьих, приобретенные навыки нуждаются в закреплении.4.1.
Таблица «потребители». Прежде всего, войдем в раздел «Таблицы» и создадим в режиме конструктора новую таблицу, которой присвоим имя «потребители». Структура таблицы представлена на рис. 40.Рис. 40. Создание таблицы «потребители» в режиме конструктораОбратите внимание!Поле «потребитель» содержит код потребителя.
Этому полю следует присвоить тип «Счетчик» и сделать его ключевым.37Целесообразно поле «название» сделать обязательным, а остальные поля оставить как необязательные.Рис. 41. Таблица «потребители»Итак, склад обслуживает сеть торговых точек. Заполним форму, какподскажет фантазия (рис. 41). При вводе названий потребителей будемпридерживаться того же принципа, что и при вводе названий поставщиков: первые буквы в названии должны нести максимум информации!Поэтому слова магазин, ларек, универмаг и так далее мы пишем в конценазвания.
По этой же причине мы не ставим названия в кавычки.4.2. Запрос «потребители_Запрос». Перейдем в раздел «Запросы» окнабазы данных и, нажав «Создать», в режиме диалога создадим запрос,которому дадим имя «потребители_Запрос». В режиме конструктора(рис. 42) упорядочим данные по возрастанию (в алфавитном порядке)названий потребителей.4.3.
Формы для потребителей. Теперь создадим еще одну ленточнуюформу и форму «в столбец» так же, как мы это делали раньше (Шагвторой). Источником данных для первой будет запрос «потребители_Запрос», а для второй – таблица «потребители». Когда мы создавалиэти формы для поставщиков, мы неоднократно открывали каждую изних в режиме конструктора. Мы оценивали эти формы в работе, находили недостатки, а потом старались усовершенствовать объекты. Дляпервых шагов такой подход оправдан, так как если бы мы сразу выполнили задачу наилучшим образом, мы не смогли бы понять смысл всехпроделанных манипуляций. Теперь Вы можете справиться с заданием38гораздо быстрей, открыв каждую форму в режиме конструктора толькораз и внеся в нее сразу все необходимые корректировки (на самом деленормальный человек иногда делает ошибки, для исправления которыхпридется возвращаться в режим конструктора).Рис.
42. Запрос в режиме конструктораНадо заметить, что система работы с данными о поставщиках была организована не наилучшим образом. При желании Вы что-то можетесделать лучше. Но все же, пока, постараемся создать для потребителейтакие же формы, какие мы создали для поставщиков. И, наконец, междуформами следует установить связь (вспомним Шаг третий). Таким образом, в разделе форм в окне базы данных будут представлены четыреформы (рис. 43).Рис.
43. Раздел формы окна базы данных394.4. Данные о товарах. Теперь Вам придется самостоятельно создатьв режиме конструктора еще одну таблицу, которой мы дадим имя «товары».Рис. 44. Структура таблицы «товары»Рис. 45. Форма «товары»Полная информация о каждом товаре потребовала бы значительное количество полей: производитель, срок годности, информация о качестве40и так далее. Мы ограничимся всего двумя полями. Поле «товар» будетхранить код товара и имеет тип «Счетчик». Поле «название» – текстоваястрока длиной 30 символов (рис. 44).В заключение создадим ленточную форму «товары» для ввода и редактирования данных о товарах.
Форму отредактируем и добавим кнопкувыхода. Заполним таблицу «товары», используя форму «товары» (рис.45). Отметим еще раз тот факт, что мы значительно упростили задачу.На самом деле, например, товар «колбаса Докторская» производстваразных предприятий – это разные продукты. Мы же условно будем считать ее всегда одним и тем же товаром. В некоторых случаях такой подход оправдан.Итак, на данный момент мы умеем создавать таблицы, простейшие запросы и формы.5. Шаг пятый. Мастер подстановок5.1. Создание таблицы «приход». На этом шаге мы создадим таблицу«приход» для хранения данных о поставках продукции.
Таблица будетсодержать поля: «номер», «дата поставки» (которое коротко назовем«дата»), «товар», «цена», «количество» и «поставщик». Полю «номер»присвоим тип «счетчик» и сделаем его ключевым. Полю «дата» присвоим тип «дата/время», но здесь тип нуждается в конкретизации. В нижней части окна конструктора в строке «Тип поля» развернем меню ивыберем «Длинный формат даты». Поскольку без указания даты поставки большая часть отчетности теряет смысл, сделаем это поле обязательным, установив в строке «Обязательное поле» значение «Да» (рис.46).
После того, как мы внесли в таблицу поля «номер» и «дата», выйдем из конструктора, сохраним таблицу под именем «приход» и сноваоткроем ее в режиме конструктора. По ряду причин желательно, чтобыперед использованием мастера подстановок таблица уже имела имя.Поле «товар» сделаем обязательным. Но здесь мы впервые сталкиваемся с проблемами рационального использования памяти и целостностиданных.
Допустим, мы решили вводить в это поле информацию о товарев виде текста. Подробное описание товара занимает много места. Значит, если в течение месяца этот товар поступал многократно, мы должны были многократно заполнять поле большого размера. Здесь налицои неэффективное расходование памяти, и перерасход времени кладов-41щика или оператора, которому поручен ввод данных. Наконец, один итот же текст разные люди могут ввести не идентично.
Появилось искушение сократить длинное слово – и, с точки зрения компьютера, введено новое название.О возможных ошибках даже говорить не приходится.Рис. 46. Выбор формата датыС точки зрения эффективности хранения данных здесь наиболее целесообразно хранение кодов, в частности кодов товара и поставщика.
Вотпочему, конструируя соответствующие таблицы, мы сделали эти кодыуникальными. Однако пользователю трудно держать в голове большоеколичество кодов. И здесь приходит на помощь мастер подстановок(рис. 47). Мастер подстановок обеспечивает такой способ хранения данных, при котором в таблице хранятся коды объектов, а названия, расшифровывающие смысл этих кодов, хранятся в другой таблице, котораяиграет роль справочника. Пользователь видит только названия! В процессе создания подстановок принципиально, чтобы коды в таблицесправочнике были помечены как ключевые поля, что мы и сделали присоздании структур таблиц «поставщики», «потребители» и «товары».После выбора (рис. 47) строки «Мастер подстановок» на экране появится диалоговое окно (рис. 48), в котором нам будет предложено при фор-42мировании столбца подстановки использовать значения либо из таблицы или запроса, либо ввести фиксированный набор значений.Рис.