Главная страница
Навигация по странице:

  • Обновление единиц наличного запаса Благодаря очень толковой форме ShipOrders

  • UnitsInStock

  • OrderDetails

  • ProductID и Quantity

  • Уголок ностальгии. DАО ПРОТИВ АDО

  • Часть VI Совместное использование Access Глава 18. Совместное использование БД несколькими пользователями Глава 19. Импорт и экспорт данных

  • Глава 20. Подключение Access к SQL Server Глава 21. Подключение Access к SharePoint Глава 18 Совместное использование БД несколькими пользователями

  • Открытие вашей базы данных всему миру

  • Как действует многопользовательская поддержка в Access

  • Краткое содержание 29 Об этих стрелках 30 о сочетаниях клавиш 32 о щелчках кнопкой мыши 33 Примеры 33


    Скачать 19.64 Mb.
    НазваниеКраткое содержание 29 Об этих стрелках 30 о сочетаниях клавиш 32 о щелчках кнопкой мыши 33 Примеры 33
    АнкорAccess_2007.doc
    Дата16.03.2017
    Размер19.64 Mb.
    Формат файлаdoc
    Имя файлаAccess_2007.doc
    ТипКраткое содержание
    #3862
    страница50 из 65
    1   ...   46   47   48   49   50   51   52   53   ...   65
    PartNumber из таблицы Products
    В свойствах Кнопка оконного меню (Control Box) и Кнопка закрытия (Close Button) формы ReviewOrderDetails установлено значение Нет. В этом случае работники склада ни при каких обстоятельствах не могут закрыть это окно без щелчка мышью кнопки Ship (доставить) или Cancel (отмена). (Если не применять такой подход, придется писать до­полнительный код, который переустанавливает статус заказа, когда кто-нибудь щелкнет мышью пиктограмму х в правом верхнем углу окна, чтобы закрыть форму ReviewOrder­Details.)

    Подсказка

    В этом месте кода удобно применить метод 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

    1. Dim Query

    2. Query = _

    "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

    Вот что происходит в программном коде.

    • В строке 1 объявляется новая процедура. Поскольку этот код очень сложен, есть смысл поместить его в отдельную процедуру, которую можно вызывать, когда мышью щелкается кнопка Ship (отправить) и заказ отправляется клиенту.

    • Строка 2 заставляет программу Access перейти в конец процедуры, если возникает ошибка. В программном коде доступа к данным всегда возможны ошибки, поэтому лучше быть начеку.

    • В строках 3—4 создается SQL-команда, необходимая для выбора записей из таблицы OrderDetails, относящихся к текущему заказу. (Дополнительную информацию об SQL-командах SELECT см. в разд. "Анализ запроса" главы 6.)

    • Строки 5—6 выполняют эту команду и получают все соответствующие записи в объекте Recordset.

    • В строке 7начинается цикл, обрабатывающий весь набор Recordset.

    • Строки 8—10 получают поля ProductID и Quantity для текущей записи таблицы
      OrderDetails (первой в объекте Recordset).

    • Строки 11—13 используют эту информацию для построения SQL-команды UPDATE. Команда вычитает количество заказанных товаров из общего числа хранящихся на складе товаров. Пример полной команды выглядит следующим образом: UPDATE Products SET UnitsInStock = UnitslnStock-4 WHERE ID= 14. Она вычитает 4 единицы из 14 единиц товара.

    • Строка 14 выполняет обновление.

    • В строках 15—16 выполняется переход к следующей записи и повторяется процесс обновления (до тех пор, пока в наборе Recordset не останется ни одного компонента заказа).

    • В строках 17—18 выполняется очистка.

    • В строке 19 — выход из процедуры. Если вы им воспользовались, мои поздравления - все прошло без сучка, без задоринки!

    • Строки 20—22 обрабатываются, только если где-то возникла ошибка. В этом случае описание ошибки выводится в окне сообщения.

    Этот код гораздо более амбициозный, чем все, что вы видели до сих пор. Но он построен на приемах, которые вы совершенствовали в последних трех главах. Повторюсь еще раз - самый лучший способ освоения этого кода — загрузить пример БД, проверить его в дейст­вии и попытаться изменить его. Удачных экспериментов!

    Уголок ностальгии.

    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. Импорт и экспорт данных

    Глава 20. Подключение Access к SQL Server

    Глава 21. Подключение Access к SharePoint

    Глава 18
    Совместное использование БД несколькими пользователями

    Теперь, когда совершенная БД создана, возможно, вы захотите использовать ее совместно с друзьями и коллегами. В одних руках программа Access— первоклассное средство управле-ния данными. Но когда пристрастие разделяет группа людей, программа предоставляет от-личную возможность для совместной работы.

    Совместное использование БД особенно важно, если она играет связующую роль в организании. Представьте себе, что вы создаете БД, которая отслеживает проекты компании и сроки их выполнения. (Обычно такая БД формируется как экономящее время средство в руках фаната Access, у которого есть небольшой избыток свободного времени.) Вскоре у других отделов возникает желание примкнуть к вам и сохранять свои проекты в вашей БД. И возможности этим не ограничиваются; если вы используете БД совместно с достаточно широкой аудиторией, можно собрать воедино все виды связанных задач. Сотрудники могут регистрировать время, потраченное на каждый проект. Тестировщики качества продукции могут фиксировать все нерешенные проблемы, влияющие на проект. Руководители проек­тов могут обозначить проекты с требующими напряжения сроками, главные начальники могут рассчитать премии, а генеральный директор оценить с высоты орлиного полета всю работу своей компании. Очень скоро будет трудно представить себе жизнь без вашей БД Access.

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

    Открытие вашей базы данных всему миру
    Когда вы решаете предоставить ваши данные для совместного использования, прежде всего, следует решить, могут ли другие пользователи изменять вашу информацию. Как вы увиди­те, распространять копии своей БД легко, а вот обеспечить работу многих пользователей с одним и тем же файлом БД в одно и то же время — более сложное дело.

    В целом у вас есть четыре основных подхода для того, чтобы предоставить свои данные массам.

    • Экспортирование данных. Можно взять данные из вашей БД и экспортировать их в дру­гой формат (например, в Web-страницу на языке HTML или электронную таблицу Excel). Этим путем можно пойти, если у пользователей, которым нужны ваши данные, нет программы Access. Как экспортировать данные, вы узнаете в главе 19.

    • Копирование вашей БД. Можно предоставить другим пользователям копию вашей БД. Например, если у вокальной группы "Uncle Earl" есть копия Access, можно послать им по электронной почте список семейных адресов. Ограничение такого подхода состоит в отсутствии легкого способа синхронизации изменений в разных копиях. Если группа "Uncle Earl" добавит несколько новых людей в список, ваш исходный список останется прежним. Если вы измените исходный список, устареет копия группы "Uncle Earl".

    • Переход на серверное программное обеспечение. Можно перенести ваши данные на серверный программный продукт промышленного уровня, например SQL Server или SharePoint. После этого практически неограниченное число пользователей сможет получать данные. Каждый из них использует собственную копию программы Access для соединения с сервером, у которого есть централизованное хранилище информации. Очевидный недостаток такого подхода — сложность, поскольку настройка подобных программных продуктов — непростая задача даже для технически образованных пользователей. Вы опробуете два лучших варианта подобного подхода в главе 20 (SQL Server) и в главе 21 (SharePoint).

    • Применение средств коллективного использования программы Access. Можно поместить вашу БД в папку с общим доступом (например, на сетевой диск), чтобы несколько человек могли использовать ее одновременно. В этом случае все работают с одним и тем же множеством данных (и изменения, сделанные группой "Uncle Earl", не пропадут). При таком подходе программа Access должна координировать работу пользователей. Если у вас небольшая группа — скажем, не более 40 человек используют вашу БД одновременно - коллективное использование будет функционировать. Но если группа достаточно велика, программа Access для нее не подойдет. В этом случае нужен серверный программный продукт, который рассчитан на большие объемы и многопользовательский доступ. (В следующем разделе приведен удобный перечень, который поможет решить, годится ли вам такой подход.)

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

    Как действует многопользовательская поддержка в Access
    Разобраться в средствах коллективного использования БД программы Access легко. Снача­ла нужно поместить файл с вашей БД в такое место, к которому у всех есть доступ — напри­мер, в папку с общим доступом на вашем компьютере или (что еще лучше) в папку на сер­верном компьютере в сети вашей компании. Теперь всем, кто хочет использовать БД, достаточно открыть ее файл.

    Звучит, просто, не так ли? Но не торопитесь. Прежде чем реорганизовывать работу це­лой компании, ориентируя ее на единственный файл БД, следует учесть несколько чисел. Далее приведены некоторые индикаторы, свидетельствующие о том, что многопользова­тельская поддержка Access вам подойдет.

    Не более 40 человек одновременно пользуются БД. Количество пользователей, одновременно обращающихся к БД, — это ключевой момент. Вы можете использовать одну и туже БД совместно с сотнями пользователей, при условии, что все они не будут открыватьэту БД одновременно.

    Примечание

    Это число (40) — осмысленная рекомендация, а не железное правило. Некоторые гуру Access проектировали БД, которые могли выдерживать от 90 до 100 одновременных пользователей. Но без серьезных (и сложных) оптимизационных мер вы очень скоро упретесь в кирпичную стену.


    • Не более 15 человек одновременно изменяют БД. Читать БД легко, а обновление БД со­пряжено с некоторыми серьезными проблемами. Очевидная проблема возникает, когда несколько человек разными способами пытаются изменить одну и ту же запись одновре­менно. Из-за проектных особенностей программы Access даже те изменения, которые не приходят в столкновение друг с другом, могут снизить общую производительность. Вы попытаетесь преодолеть это затруднение позже в данной главе, когда будут обсуждаться блокировки (см. разд. "Применение блокировок для предотвращения наложения обновле­ний "далее в этой главе).

    1   ...   46   47   48   49   50   51   52   53   ...   65


    написать администратору сайта