Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Добавление нового товара во время заполнения заказаСодержание книги
Поиск на нашем сайте
Boutique Fudge — управляемая клиентами компания. Если кому-то нужен самый новый товар, которого еще нет в каталоге товаров (например, картофель в шоколадной глазури), компания готова создать его по требованию. Обычно список подстановки для поля ProductID не разрешает такого рода создание нового товара на лету. Если попытаться ввести название несуществующего товара, вы получите строгую отповедь от программы Access. Но добавление новых элементов в список на ходу — распространенный метод программирования в Access и специальное событие разработано, чтобы помочь вам в этом: Отсутствие в списке (On Not In List). Если ввести несуществующий товар и применить событие Отсутствие в списке (On Not In List), программа Access начнет с кода обработки события. Можно создать элемент списка, вывести сообщение или исправить проблему до того, как Access выразит недовольство. У события Отсутствие в списке (On Not In List) два параметра: NewData и Response. NewData — это данные, которые набираются в поле списка и которых еще нет в списке. Response — это значение, предоставляемое для того, чтобы сообщить программе Access о том, как решать проблему. Далее приведен базовый скелет подпрограммы, создаваемой Access, если выбрана обработка события Отсутствие в списке (On Not In List) для поля с именем ProductID: Private Sub ProductID_NotInList(NewData As String, Response As Integer) End Sub Когда возникает событие Отсутствие в списке (On Not In List), прежде всего, нужно спросить пользователей, работающих с формой, означает ли это — желание ввести несуществующий товар. Выполнить этот шаг можно с помощью знакомой функции MsgBox, используемой необычным образом. Сначала нужно сообщить программе Access о необходимости создать окно сообщения с двумя кнопками: Да (Yes) и Нет (No). Затем нужно суметь перехватить возвращаемое функцией MsgBox значение, чтобы определить, какая кнопка была нажата: Dim ButtonClicked ButtonClicked = MsgBox("Do you want to add a new product?", vbYesNo) В данном коде создается переменная ButtonClicked и затем отображается сообщение. Когда пользователь закрывает окно сообщения (щелкнув мышью кнопку Да или Нет), Visual Basic помещает в переменную ButtonClicked число, которое сообщает вам о том, что произошло. Число равно 6, если была нажата кнопка Да, и 7, если была нажата кнопка Нет. Но вместо того, чтобы обрабатывать непосредственно числа и увеличивать риск ошибки, можно воспользоваться полезными константами vbYes (которая равна 6) и vbNo (которая равна 7). Далее приведен до некоторой степени законченный код обработчика события Отсутствие в списке (On Not In List). Он выводит на экран сообщение, запрашивающее о необходимости добавления нового элемента в список (рис. 17.12), и затем отменяет редактирование списка, если пользователь, работающий с формой, нажал кнопку Нет: Private Sub ProductID_NotInList(NewData As String, Response As Integer) ' Отображает сообщение Да/Нет и получает результат Dim ButtonClicked ButtonClicked = MsgBox("Do you want to add a new product for " & _ NewData & "?", vbYesNo) ' Visual Basic предоставляет удобные константы vbYes и vbNo, ' которые можно использовать для определения нажатой кнопки If ButtonClicked = vbNo Then ' Отмена редактирования ProductID.Undo ' Сообщает Access о запрете вывода сообщения об ошибке. ' Вы уже обработали ее Response = acDataErrContinue Else ' (Поместите сюда код для добавления нового товара в список) End If End Sub
Рис. 17.12. Картофель в шоколадной глазури — в данный момент не предлагается в списке продуктов. Если его ввести и нажать клавишу <Enter>, программный код запросит подтверждение для добавления этого продукта в список
Далее предлагается код, добавляющий новый товар. В этом примере кода нет смысла самостоятельно включать товар полностью — в конце концов, для этого товара нужно предос-|тавить дополнительную информацию (например, цену или категорию), прежде чем считать [его допустимым. Вместо этого нужно отобразить другую форму для добавления товаров. Ключом решения может стать метод DoCmd. OpenForm: ' Попросите Access не беспокоиться, поскольку вы сами добавите ‘ пропущенный товар Response = acDataErrAdded ' Откройте форму AddProduct с тремя дополнительными аргументами DoCmd.OpenForm "AddProduct",,,,, acDialog, NewData Два аргумента, используемые в методе OpenForm, особенно важны. ■ acDialog открывает форму в диалоговом режиме, т. е. программа Access задерживает вызов кода в ProductID_NotInList до тех пор, пока форма AddProduct закрыта. Этот шаг важен, поскольку после завершения процесса добавления вам понадобится выполнить дополнительный код для обновления формы PlaceOrder. ■ NewData принимает вновь введенные данные и присваивает их свойству AddProduct.OpenArgs. В этом случае форма AddProduct может извлечь их, когда запустится, и самостоятельно откорректировать. Далее приведен программный код, который нужно вставить в форму AddProduct для копирования вновь введенного названия товара (значение, переданное с помощью переменной NewData в предыдущем фрагменте кода) в поле ProductName при первой загрузке формы AddProduct. Private Sub Form_0pen(Cancel As Integer) ProductName = Form.OpenArgs End Sub На рис. 17.13 показано, как выглядит эта форма.
Рис. 17.13. Форма AddProduct позволяет ввести остальные данные для нового товара, который вы хотите создать. Обратите внимание на то, что форма открывается как всплывающая, и программа Access автоматически считает, что вы вставляете новую запись (а не просматриваете имеющиеся товары). Access действует таким образом, поскольку в свойствах формы Всплывающее окно (Pop Up) и Ввод данных (Data Entry) задано значение Да После того как вся информация о товаре введена, можно закрыть форму AddProduct. В этот момент в процедуре ProductID_NotInList выполняется немного дополнительного кода. Он расположен сразу после оператора DoCmd. OpenForm. Его задача — обновить новый элемент заказа, чтобы использовать товар, который вы только что ввели: ' Отмена редактирования, поскольку нужно обновить список ' прежде, чем вы сможете выбрать новый товар ProductID.Undo ' Обновление списка ProductlD.Requery ' Теперь ищется ProductID для вновь введенного товара с помощью DLookup Product ID = DLookup (“ID”, "Products", "ProductName='" & NewData & '"")
Примечание Этот код выполняется, даже если вы отменили вставку нового товара, нажав клавишу <Esc> в форме AddProduct. В этом случае функция DLookup не сможет ничего найти, поэтому вернет Null (пустое значение) в поле ProductlD. В результате вы получите знакомое предупреждающее сообщение программы Access, извещающее о том, что выбранного вами товара нет в списке.
Еще одно уточнение. Когда возникает событие Отсутствие в списке (On Not In List), событие Изменение (On Change) уже произошло. Таким образом, вы уже упустили возможность выполнить код, применявшийся ранее для вставки соответствующей цены в поле Price списка элементов заказа. К счастью, эту проблему можно решить довольно легко. Нужно добавить еще одну строку кода, которая заставит программу Access двигаться дальше, и снова выполнить обработчик события (процедуру ProductID_Change): Product ID_Change Для того чтобы увидеть полный программный код к этому примеру, обратитесь к БД Boutique Fudge в примерах к данной главе.
|
||||||||||
Последнее изменение этой страницы: 2016-08-14; просмотров: 144; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.85.233 (0.006 с.) |