Выбор данных из таблицы и автозаполнение полей

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

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

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

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

Вторая таблица "Продажи": наименование товара: текстовая цена: валюта дата: время / дата

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

3 ответа

Взгляните на базу данных 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)

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

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

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

Этот код входит в событие ПОСЛЕ обновления в поле со списком элементов:

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

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

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

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

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

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

Theres много примеров того, как сделать это в Интернете

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

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

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

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

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

Другие вопросы по тегам