В моей базе данных MS Access я хочу создать форму для заполнения нового заказа.

У меня есть таблица клиентов и таблица заказов

**Customers** => (id, firstname, lastname, address)
                  ^
                  |
**Orders** =>   (customer, product, total)

(Примечание: поле клиента имеет отношение один ко многим с идентификатором)

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

Как вы добились этого в Access? Из моих исследований все, что я могу сделать, - это создать форму, которая содержит заполнители для полей в текущей таблице, но ничего, что не использует эти отношения, чтобы помочь мне заполнить поле клиента .

1 ответ1

4

Да, вы абсолютно можете это сделать. Есть несколько хитростей, но не так много.

  1. Создайте новую форму и задайте в качестве источника записи таблицу "Заказы". Чтобы увидеть окно свойств формы, щелкните правой кнопкой мыши форму и выберите "Свойства формы"
  2. На ленте "Дизайн формы" перетащите новое поле со списком на форму.
  3. Я бы отменил работу мастера, если он запустился, и сделал бы все вручную, но вы можете использовать его, если хотите.
  4. Убедитесь, что поле со списком выбрано, и посмотрите на его страницу свойств.
  5. Установите источник управления в поле "Клиент"
  6. Установите для источника строки значение "ВЫБРАТЬ Клиентов".ID, клиенты.Имя, Клиенты.LastName ОТ клиентов; "или нажмите кнопку" ... ", чтобы создать этот простой запрос. Обратите внимание, что поле FIRST - это идентификатор, который является связующим звеном между формой и полем со списком.
  7. Теперь это работает, НО покажет только идентификатор, который бесполезен. Вам нужно исправить форматирование поля со списком. Перейдите на вкладку "Формат" в свойствах, затем найдите "Количество столбцов". Измените это на 3.
  8. Под этим ширина столбца. Вы можете использовать это, чтобы скрыть поле идентификатора, введя «0,3,3». Возможно, вы захотите поиграть с этими значениями, чтобы они хорошо подходили к длине имен.
  9. Вы могли бы хотеть, чтобы "Головки колонки" были включены или нет - до вас.
  10. Просмотрите форму сейчас в "Форме просмотра" и наслаждайтесь!

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

На этой заметке я бы изменил имя вашей табличной переменной на следующее. Для меня это понятнее. Заказы также нуждаются в удостоверении личности. Если идентификаторы имеют одинаковые имена, вы просто играете "соответствовать имени" при присоединении к таблицам.

**Customers** => (CustomerID, firstname, lastname, address)
                           ^
                            \
**Orders** =>   (OrderID, CustomerID, product, total)

Вы также можете объединить First/Last в одно поле, а не разделять их (в запросе есть поле Custname: [Firstname] & "" & [Lastname]). Вы можете сделать комбо-блоки действительно мощными в доступе, но будьте осторожны, если в них много строк - они замедлятся.

Для продуктов в заказе вам действительно нужно создать еще одну таблицу под названием "Строки заказа", в которой в качестве полей будут поля OrderLineID, OrderID, ProductID и Qty. Тогда в одном заказе может быть несколько товаров. Это выходит за рамки вопроса, но я подумал, что я тоже укажу вам правильное направление. Вам также нужен продуктовый стол.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .