В MS Access, как форма может предоставить раскрывающийся список с данными из связанной формы?


0

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

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

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

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

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

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

Ответы:


4

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

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

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

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

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

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

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


Я не вижу «Источник записи» нигде при создании формы
CodyBugstein

Пропустил этот шаг и последовал за остальными. Оно работает! Большое спасибо!
CodyBugstein

Рад помочь! Если это сработало, вы должны как-то установить источник записи формы на шаге 1.
Saulysw

Я думаю, что он сделал это автоматически как-то
CodyBugstein
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.