Инвентаризация товаров и запись продаж в Access 2016
12/17/2018

Итак, у меня есть простая база данных:

tblПродукты (Идентификатор, Описание, Цвет, Цена)

Клиенты TBL (Идентификатор, Имя, Адрес электронной почты, Адрес)

tblSoldItems (Идентификатор, Идентификатор клиента, Идентификатор продукта, Описание, Цвет, Цена, Способ оплаты, Тип карты, Номер карты)

Я хочу иметь форму, которая сохраняет данные в tblSoldItems, но в ней я хочу выбрать продукт из выпадающего списка (из продуктов tbl) и клиента из другого выпадающего списка (из клиентов tbl), поэтому затем он заполняет большую часть формы для меня. Когда я сохраняю, он сохраняет запись в tblSoldItems, а затем удаляет исходную запись из tblProducts, потому что она была продана и больше недоступна.

Для меня это звучит просто, но, похоже, я не могу в этом разобраться. Когда я создаю форму на основе solditems и добавляю поле со списком для продукта, я не могу найти способ заставить его помещать данные в соответствующие поля для solditems.

Я ищу действительно простое решение, в идеале без использования макросов или VBA. Кто-нибудь знает, как это сделать?

Ответы (7)

Angel Breitenberg
12/17/2018

Несколько рекомендаций (возможно, больше, чем вы хотите): ИДЕНТИФИКАТОР обычно не является подходящим именем для поля, поскольку ваша база данных содержит как минимум 3 поля с одинаковым именем, что может привести к путанице. Я бы рекомендовал использовать ProductID в tblProducts. Обратите внимание, что я никогда не включаю пробелы и знаки препинания/ символы в имена объектов. Имя является зарезервированным словом, так как у каждого объекта есть свойство name. Большинство из нас предпочитают такие поля, как полное имя, Имя, фамилия, имя пользователя и т.д. Я бы не стал удалять записи из tblProducts. Если идентификатор продукта указан в tblSoldItems, то мы знаем, что он недоступен для продажи. Оставляя запись в tblProducts, вам не нужно хранить Описание, Цвет, цену в tblSoldItems, так как значения будут доступны в tblProducts. Моим предложением была бы простая форма, которая позволяет вам выбрать идентификатор продукта и идентификатор клиента из полей со списком, а затем ввести способ оплаты, Тип карты и номер карты.

Помогло 1 людям
Cecelia Sawayn
12/17/2018

Значит, ваши клиенты покупают только один товар за раз? И каждый продукт является уникальным товаром? Это необычный бизнес. В tblSoldItem не должно быть полей Описания, Цвета или цены. Один из принципов реляционной базы данных заключается в том, что вы не повторяете данные. Что касается отображения информации после выбора идентификатора продукта, пожалуйста, обратитесь к статье моего блога о отображении данных из связанных таблиц (см. sig для адреса блога).

Помогло 0 людям
Loretta Jakubowski
12/17/2018

Я полностью согласен с Дуэйном о нецелесообразности удаления строк из tblProducts. В форме продажи задайте свойство RowSource поля со списком, привязанного к идентификатору продукта: ВЫБЕРИТЕ Идентификатор продукта, Описание, Цвет, цену ИЗ tblProducts, ГДЕ ИХ НЕТ (ВЫБЕРИТЕ * ИЗ tblSoldItems, ГДЕ tblSoldItems.Идентификатор продукта = tblПродукты.ProductID) ИЛИ SaleID = Форма!SaleID) УПОРЯДОЧИТЬ ПО описанию; Задайте другие его свойства следующим образом: Имя: cboProduct Источник управления: Идентификатор продуктаобъем столбца: 1 Количество столбцов: 4 Ширина столбцов: 0 см; 3 см; 3 см; 3 см Ширина списка: 9 см Поэкспериментируйте с последними тремя размерами ширины столбцов, чтобы получить наилучшее соответствие. Первое должно быть равно нулю. Ширина списка должна быть суммой размеров ширины столбцов. Доступ автоматически преобразует значения в дюймы, если вы не используете метрические единицы. В процедуре события AfterUpdate в поле со списком назначьте текущую цену элементу управления ценами в форме: Me.Price = Me.cboProduct.Столбец (3) Свойство столбца основано на нуле, поэтому столбец (3) является четвертым столбцом. Запросите поле со списком в текущей процедуре события формы с помощью: Me.cboProduct.Обратите внимание, что свойство RowSource, подобное приведенному выше, которое ссылается на первичный ключ текущей записи для включения продукта в список в случае уже сохраненных записей, будет отлично работать в форме в представлении единой формы. Однако в непрерывном представлении форм этого не будет без использования гибридного элемента управления, в котором текстовое поле аккуратно накладывается на поле со списком, чтобы создать видимость одного элемента управления со списком. Вы найдете пример этого в ActiveEmployees.zip в папке "мои общедоступные базы данных" по адресу: https://onedrive.live.com/?cid=44CC60D7FEA42912&id=44CC60D7FEA42912!169 [https://onedrive.live.com/?cid=44CC60D7FEA42912&id=44CC60D7FEA42912 !169] Обратите внимание, что если вы используете более раннюю версию Access, вы можете обнаружить, что цвет некоторых объектов формы, таких как кнопки, отображается неправильно, и вам потребуется соответствующим образом изменить дизайн формы. Если у вас возникли трудности с открытием ссылки, скопируйте ссылку (примечание, а не местоположение ссылки) и вставьте ее в адресную строку вашего браузера. Я также согласен с Дуэйном в отношении названий столбцов и переименовал соответствующие ключи ProductID и SaleID в приведенном выше. Вы не можете избежать очень ограниченного использования кода VBA в приведенном выше примере. Если вы не знакомы с вводом кода в процедуры событий формы, отчета, раздела отчета или элемента управления, вот как это делается в представлении "Дизайн формы" или "Дизайн отчета": 1. Выберите форму, отчет, раздел или элемент управления соответствующим образом и откройте его лист свойств, если он еще не открыт. 2. Выберите соответствующее свойство события и нажмите кнопку "Построить" (справа с 3 точками). 3. Выберите Конструктор кода в диалоговом окне и нажмите кнопку ОК. Этот шаг не потребуется, если вы настроили доступ для использования процедур событий по умолчанию. 4. Окно редактора VBA откроется в процедуре события с уже установленными первой и последней строками. Введите или вставьте код в виде новой строки (строк) между ними.

Помогло 0 людям
Loretta Jakubowski
12/17/2018

> В tblSoldItem не должно быть полей Описания, Цвета или цены. Правда, кроме цены, Скотт. Цены меняются с течением времени, поэтому цена независимо функционально определяется исключительно ключами каждой таблицы.

Помогло 0 людям
Cecelia Sawayn
12/17/2018

Кен, обычно я бы согласился с тобой, и я действительно собирался сказать это в своем ответе. Но помните, что оператор хотел удалить записи о товаре, как только товар будет продан. Это указало мне на то, что каждая запись о продукте является уникальным товаром. Таким образом, как только товар будет продан, он больше не будет продаваться. Если аналогичный товар действительно поступит на склад, он будет представлять собой новую запись о товаре с новой ценой. Поэтому, если OP не удалит запись о продаже, цена не будет обновлена.

Помогло 0 людям
Loretta Jakubowski
12/17/2018

Вы совершенно правы, Скотт. Я стою на своем. Кстати, я думал об этой модели, которая, как вы сказали, кажется необычной. Затем мне пришло в голову, что это действительно вполне применимо к нашему семейному бизнесу, который занимается торговлей антиквариатом.

Помогло 0 людям
Cecelia Sawayn
12/17/2018

Я представлял себе именно такой бизнес по описанию операции. Это, конечно, не та модель, которая была бы неправильной, но она была бы необычной.

Помогло 0 людям

Похожие вопросы

999

Просмотров

1

Ответов