Краткое содержание 29 Об этих стрелках 30 о сочетаниях клавиш 32 о щелчках кнопкой мыши 33 Примеры 33
Скачать 19.64 Mb.
|
PartNumber из таблицы Products В свойствах Кнопка оконного меню (Control Box) и Кнопка закрытия (Close Button) формы ReviewOrderDetails установлено значение Нет. В этом случае работники склада ни при каких обстоятельствах не могут закрыть это окно без щелчка мышью кнопки Ship (доставить) или Cancel (отмена). (Если не применять такой подход, придется писать дополнительный код, который переустанавливает статус заказа, когда кто-нибудь щелкнет мышью пиктограмму х в правом верхнем углу окна, чтобы закрыть форму ReviewOrderDetails.) Подсказка В этом месте кода удобно применить метод DoCmd. OpenReport для вывода на печать отчета, создающего транспортную наклейку со списком всех товаров, включенных в заказ. Если же сотрудники щелкнут мышью кнопку Cancel (возможно, они выяснили, что на складе нет нужного количества товара), применяется аналогичный программный код для возврата заказу статуса New (новый): Private Sub Cancel_Click() ' Закрытие этой формы DoCmd.Close ' Возврат к форме ShipOrder DoCmd.OpenForm "ShipOrders" ' Обновление заказа Forms("ShipOrders").StatusID = 2 DoCmd.RunCoiranand acCmdSaveRecord End Sub Эта часть завершает программный код, необходимый для координации обработки заказа. Как и формы, которые вы изучали в части IV, формы данного примера извлекают всю информацию из таблиц вашей БД. Но в отличие от примеров, приведенных в части IV, они используют код для автоматического выполнения некоторой работы. Это отличие превращает ваши формы из простых средств ввода данных в Супероснащенные средства автоматизации технологического процесса. Подсказка Можно создать специальное значение статуса для заказов, которые пытались выполнить, но не смогли (например, On Hold (незавершенный) или Waiting For Stock (ожидающий пополнения запаса)). В этом случае сотрудники склада будут знать о том, что не следует пытаться выполнять эти заказы. Если вы решили применить этот шаг, убедитесь, что код в процедуре ProcessOrder_Click исправлен, и можно обрабатывать заказы с указанным статусом. Обновление единиц наличного запаса Благодаря очень толковой форме ShipOrders, которую вы видели в предыдущем разделе, коммерческая деятельность компании Boutique Fudge протекает гладко. Но в один прекрасный день сотрудники склада приходят в главное управление с жалобой. Несмотря на то, что заказы проходят без отклонений, товарные запасы не поддерживаются в должном порядке. Никто не удосужился исправить данные в поле UnitsInStock, поэтому они становятся все более бесполезными. По настоящему автоматизированное решение должно было бы автоматически обновлять данные UnitsInStock, когда заказ отправлен. В конце концов, не для этого ли прежде всего разработана программа Access? Эта задача полностью отличается от тех, которые вы решали до сих пор, поскольку вынуждает вносить изменения в совершенно другой набор записей — записи, которые не отображаются ни на одной из форм. Вы уже знаете, что можно применять статистические функции по подмножеству для извлечения информации из других таблиц. Но, к сожалению, у программы Access нет похожего набора функций, которые позволяют вносить изменения. Вместо этого придется обратиться к совершенно новому набору объектов, названных объектами доступа к данным (или для краткости просто DAO). Технология DAO позволяет выполнять любую обработку данных, независимо от ваших форм. Но это довольно сложная структура. * DAO следует использовать очень специфическим образом. Если методы применяются в неверной последовательности или пропущен шаг, вы столкнетесь с ошибкой. Часто легче всего начать с работающего примера (как, например программный код, включенный в примеры к данной главе), скопировать его и затем переделать, как нужно. ■ Технология DAO не применяет объекты запросов. Вместо этого следует писать SQL-операторы (см. главу 6). DAO включает два важных метода. Первый метод, CurrentDb. Execute, позволяет выполнять прямую SQL-команду, задавая ее в виде строки: CurrentDb.Execute MyUpdateCommand Этот метод — быстрый практический способ внесения в БД изменений, таких как операции очищающего обновления, удаления или вставки. Второй важный метод предназначен для извлечения записей с помощью специализированного объекта Recordset. Для применения этого объекта вы должны начать с вызова метода CurrentDb. OpenRecordset и задать строку с SQL-командой выбора. Dim Recordset Set Recordset = CurrentDb.OpenRecordset(MySelectCommand) Объект Recordset представляет группу записей, но доступ в каждый момент времени возможен только к одной из них. Для перехода от одной записи к другой применяется метод Recordset .MoveNext. Для проверки, достигнут ли конец набора, используется свойство Recordset .EOF, означающее конец файла (end-of-file). Если оно равно True, вы прошли последнюю запись. Чаще всего объект Recordset применяется в цикле. Свойство Recordset .EOF можно использовать как условие цикла, так что цикл завершается, как только программа Access достигает конца набора Recordset. Внутри цикла можно извлекать значения полей текущей записи. В конце каждого прохода цикла следует вызывать метод MoveNext для перехода к следующей записи: Do While Recordset.EOF = False ' Отображается значение поля ProductName ■ MsgBox Recordset("ProductName") ' Переход к следующей записи Recordset.MoveNext Loop Держа в голове эти непременные условия, можно создать следующий код, корректирующий величину запасов товаров, основываясь на только что отправленном заказе. (Построчный анализ приведен после кода.) 1 Sub UpdateStock() ' Если возникает ошибка, переход в секцию DataAccessError 2 On Error GoTo DataAccessError ' Создание команды SELECT
"SELECT ProductID, Quantity FROM OrderDetails WHERE OrderID=" & ID ' Получение набора записей с помощью этой команды 5 Dim Recordset 6 Set Recordset = CurrentDb.OpenRecordset(Query) ' Перебор набора записей с просмотром каждой из них. ' Каждая запись — отдельный компонент заказа 7 Do Until Recordset.EOF ' Получение для каждого компонента ID товара и его количество 8 Dim ProductID, Quantity 9 ProductID = Recordset("ProductID"} 10 Quantity = Recordset("Quantity") ' Формирование команды UPDATE, ' которая изменяет уровни запасов 11 Dim UpdateCommand 12 UpdateCommand = _ "UPDATE Products SET UnitsInStock = UnitsInStock-" & _ 13 Quantity & " WHERE ID=" & ProductID ' Выполнение команды 14 CurrentDb.Execute UpdateCommand ' Переход к следующему компоненту заказа (если таковой есть) 15 Recordset.MoveNext 16 Loop ' Самое время для очистки 17 Recordset.Close 18 CurrentDb.Close 19 Exit Sub 20 DataAccessError: ' Сюда вы попадаете только при возникновении ошибки. ' Отображение сообщения об ошибке 21 MsgBox Err.Description 22 End Sub Вот что происходит в программном коде.
Этот код гораздо более амбициозный, чем все, что вы видели до сих пор. Но он построен на приемах, которые вы совершенствовали в последних трех главах. Повторюсь еще раз - самый лучший способ освоения этого кода — загрузить пример БД, проверить его в действии и попытаться изменить его. Удачных экспериментов! Уголок ностальгии. DАО ПРОТИВ АDО Для того чтобы усложнить жизнь, корпорация Microsoft давным-давно ввела еще одну технологию доступа к данным, названную ADO (ActiveX Data Objects, объекты данных ActiveX). И DAO, и ADO выполняют задачи обработки данных с помощью удобных объектов. Ключевая разница между ними заключается в том, что Microsoft проектировала ADO как универсальную технологию доступа к данным, которая может работать с другими системами управления БД, например SQL Server, a DAO предназначена только для Access. Некоторые программисты Access считают (неправильно), что ADO — приемник DAO и лучший выбор при написании программного кода для БД Access. (В действительности корпорация Microsoft, возможно, даже заявляла об этом в определенный момент, но все свидетельства этого уничтожены.) В настоящий момент официальная версия заключается в том, что лучше применять DAO, поскольку эта технология настроена для программы Access. Это означает, что DAO легче использовать, и она обеспечивает лучшую производительность в большинстве случаев. ADO применяют лишь опытные VB-программисты, кто уже знает, как работает эта технология, и не хочет тратить время на изучение DAO, или же разработчики, которым требуется какое-нибудь экзотическое средство, имеющееся в ADO и отсутствующее в DAO. Часть VI Совместное использование Access Глава 18. Совместное использование БД несколькими пользователями Глава 19. Импорт и экспорт данных Глава 21. Подключение Access к SharePoint Глава 18 Совместное использование БД несколькими пользователями Теперь, когда совершенная БД создана, возможно, вы захотите использовать ее совместно с друзьями и коллегами. В одних руках программа Access— первоклассное средство управле-ния данными. Но когда пристрастие разделяет группа людей, программа предоставляет от-личную возможность для совместной работы. Совместное использование БД особенно важно, если она играет связующую роль в организании. Представьте себе, что вы создаете БД, которая отслеживает проекты компании и сроки их выполнения. (Обычно такая БД формируется как экономящее время средство в руках фаната Access, у которого есть небольшой избыток свободного времени.) Вскоре у других отделов возникает желание примкнуть к вам и сохранять свои проекты в вашей БД. И возможности этим не ограничиваются; если вы используете БД совместно с достаточно широкой аудиторией, можно собрать воедино все виды связанных задач. Сотрудники могут регистрировать время, потраченное на каждый проект. Тестировщики качества продукции могут фиксировать все нерешенные проблемы, влияющие на проект. Руководители проектов могут обозначить проекты с требующими напряжения сроками, главные начальники могут рассчитать премии, а генеральный директор оценить с высоты орлиного полета всю работу своей компании. Очень скоро будет трудно представить себе жизнь без вашей БД Access. В этой главе вы научитесь использовать вашу БД вместе с небольшой группой, узнаете о возможных ловушках и о том, что нужно делать, чтобы все протекало гладко. Открытие вашей базы данных всему миру Когда вы решаете предоставить ваши данные для совместного использования, прежде всего, следует решить, могут ли другие пользователи изменять вашу информацию. Как вы увидите, распространять копии своей БД легко, а вот обеспечить работу многих пользователей с одним и тем же файлом БД в одно и то же время — более сложное дело. В целом у вас есть четыре основных подхода для того, чтобы предоставить свои данные массам.
Данная глава целиком посвящена последнему, приведенному в списке подходу — многопользовательской поддержке, жестко запрограммированной в Access. Но перед тем как начать, важно выяснить ограничения, с которыми вы столкнетесь, чтобы оценить, удовлетворяют ли вашим нуждам средства, предлагаемые программой Access. Как действует многопользовательская поддержка в Access Разобраться в средствах коллективного использования БД программы Access легко. Сначала нужно поместить файл с вашей БД в такое место, к которому у всех есть доступ — например, в папку с общим доступом на вашем компьютере или (что еще лучше) в папку на серверном компьютере в сети вашей компании. Теперь всем, кто хочет использовать БД, достаточно открыть ее файл. Звучит, просто, не так ли? Но не торопитесь. Прежде чем реорганизовывать работу целой компании, ориентируя ее на единственный файл БД, следует учесть несколько чисел. Далее приведены некоторые индикаторы, свидетельствующие о том, что многопользовательская поддержка Access вам подойдет. ■ Не более 40 человек одновременно пользуются БД. Количество пользователей, одновременно обращающихся к БД, — это ключевой момент. Вы можете использовать одну и туже БД совместно с сотнями пользователей, при условии, что все они не будут открыватьэту БД одновременно. Примечание Это число (40) — осмысленная рекомендация, а не железное правило. Некоторые гуру Access проектировали БД, которые могли выдерживать от 90 до 100 одновременных пользователей. Но без серьезных (и сложных) оптимизационных мер вы очень скоро упретесь в кирпичную стену.
|