Выбор данных из таблицы и автозаполнение полей - PullRequest
1 голос
/ 30 ноября 2011

Я работаю над небольшим небольшим проектом, на данный момент я просто тестирую большой проект, но я натолкнулся на блок, который тоже не могу найти решение.

У меня естьсписок предметов в таблице, и они содержат такую ​​информацию, как название предмета и цена.У меня есть еще одна таблица с продажами.У меня есть форма, которая позволит вам выбрать имя элемента, однако, я бы хотел, чтобы оставшаяся часть формы автоматически заполнялась информацией из таблицы элементов.

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

Первая таблица "items": itemname: текстовая цена: валюта

Second Table "sales": itemname: text цена: валюта date: время / дата

Iнадеюсь, я достаточно хорошо объяснил, а если нет, просто спросите, и я постараюсь уточнить.

Ответы [ 3 ]

2 голосов
/ 30 ноября 2011

Взгляните на базу данных Northwind (northwind.mdb), которая поставляется с Access. У них есть несколько примеров того, как обновить форму на основе изменения значений в выпадающем списке.

Кроме того, вы также можете посмотреть на дизайн таблицы в базе данных Northwind. Вообще говоря, плохая идея использовать название продукта в качестве ключевого поля в обеих ваших таблицах. Что произойдет (и в конечном итоге произойдет), так это то, что название продукта изменится для одного из продуктов, и вам придется обновить все таблицы, которые ссылаются на это имя продукта.

Лучшим вариантом является использование ключевого поля (я бы порекомендовал AutonumberField) в таблице продуктов, а затем ссылка на ключевое поле в таблице продаж. Таким образом, если имя продукта меняется, вам нужно внести изменение только в одном месте, а не во многих.

Вот примерный макет таблицы, чтобы проиллюстрировать мою точку зрения:

Элементы таблицы:

ItemID (Autonumber - Primary Key on the table)
ItemName (Text - Name of product)
Price (Currency)

Таблица: продажи

ItemID (Integer - Foreign Key to Items.ItemID)
Quantity (Integer - # of units ordered)
Price (Currency)
OrderDate (Date/Time)
1 голос
/ 20 августа 2014

Большинство ответов здесь содержат слишком много кода и всевозможных операторов SQL.Таким образом, эти ответы порождают мировую бедность.

Самый простой подход - позволить мастеру создать поле со списком в форме для выбора данного элемента.Таким образом, это поле со списком будет основано на таблице предметов.Первым столбцом поля со списком будет PK (идентификатор автономного номера) таблицы элементов.Таким образом, это поле со списком будет связано со столбцом ItemID в продажах.Мастер также будет «скрывать» идентификатор, но вы ХОТИТЕ включить другие столбцы в это поле со списком, такие как цена и т. Д. И вы, вероятно, должны иметь второй столбец этого поля со списком, описывающий элемент из таблицы элементов.Как уже отмечалось, вы ТАКЖЕ хотите включить столбец цен.

Таким образом, после того, как вы выберите элемент, а затем автоматически заполняете столбец цены, используйте этот код:

Этот код идетв событии AFTER update поля со списком предметов:

Me.Price = me.ItemComboBox.column(2)

Поэтому, когда вы выбираете предмет, поле цены автоматически заполняется для вас.И обратите внимание, что вам нужно было написать только одну строку кода.

Так что все это можно сделать с помощью встроенных мастеров и одной строки кода.

0 голосов
/ 30 ноября 2011

Добавьте процедуру события (построитель кода) к событию onchange раскрывающегося списка.Щелкните правой кнопкой мыши раскрывающийся список в режиме конструктора и выберите свойства.затем на вкладке события в окне свойств нажмите на строку изменения и нажмите кнопку «...».

В коде этого события вам нужно будет выполнить запрос к БД (используя выпадающий списокиндекс или поле идентификатора), чтобы вытащить детали элементов в набор записей.Запрос будет выглядеть примерно так:

"SELECT * FROM Items WHERE ItemID = " & dropdownboxname.value

. Существует множество примеров того, как сделать это в Интернете.

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

РЕДАКТИРОВАТЬ: в ответ на комментарии ниже

вам нужно будет сделать что-то подобное ...

Dim rsItems AS DAO.Recordset
Set rsItems = CurrentDB.OpenRecordset("SELECT * FROM Items WHERE ItemID = " & dropdownboxname.value)
If not rsItems.EOF Then
    textbox1.text = rsItems![fieldname1]
    textbox2.text = rsItems![fieldname2]
end if
Set rsItems = nothing

дай мне знать, если это поможет; -)

...