Таблицы vba Access 2013 как наборы записей и использование данных
У меня есть форма для ввода данных. У меня есть список, в котором есть список всех продуктов. У меня также есть второй список, в котором есть все компании. У меня есть таблица для клиентов, в которой есть их имя и автоматический идентификатор. У меня есть список продуктов, который также содержит имя и автоматический идентификатор. У меня есть третья таблица, в которой перечислены клиенты, какие продукты есть.
Пример:
tblCustomer
1 Company1
2 Company2
3 Company3
tblProducts
1 Product1
2 Product2
3 Product3
tblCustomerProducts
1 1 2 years
1 2 3 years
2 3 2 years
Таким образом, это означает, что 1 является компанией, 1 является продуктом, и они имеют его в течение 2 лет
Теперь, когда я делаю форму ввода, я пытаюсь открыть набор записей для обеих таблиц и перебрать его, а затем, когда он найдет совпадение, он поместит соответствующий номер в соответствующее текстовое поле. Это то, что у меня есть
Private Sub Command15_Click()
Dim db As Database
Dim rst As Recordset 'Gets a variable ready to put a table into
Dim rst2 As Recordset 'Gets second variable ready to put a table into
Set db = CurrentDb()
Set rst = db.OpenRecordset("customer") 'Sets variable rst to the contents of the customer table
Set rst2 = db.OpenRecordset("product") 'Sets variable rst2 to the contents of the product table
Do While Not rst.EOF 'Loop through the customer table until it gets to the end of the file
If rst!["customer_name"] = lstCustomerName Then 'If the contents of the field customer_name is equal to that of the company highlighted on the form
txtCustomerFX.Value = rst!["id"] 'Then make the value of the the CustomerFX box equal to the ID associated with that company
rst.MoveNext
Loop
rst.Close
Do While Not rst2.EOF 'Loop through the product table until it gets to the end of the file
If rst2!["product_name"] = lstProductName Then 'If the contents of the field product_name is equal to that of the product highlighted on the form
txtProductFX.Value = rst2!["id"] 'Then make the value of the the ProductFX box equal to the ID associated with that product
rst.MoveNext
Loop
rst2.Close
End Sub
Похоже, что данные не помещаются в текстовые поля.
1 ответ
Вам не нужно погружаться в наборы записей, чтобы соответствовать отображаемым именам и идентификаторам, как это. Поле со списком или список может быть привязан к скрытому столбцу идентификаторов и просто отображать имена. Пользователь видит имена, база данных видит номера. С включенными мастерами управления (по умолчанию) попробуйте создать новый комбинированный список в форме соединения. Выберите:
- Выберите "Я хочу, чтобы поле со списком получало значения из другой таблицы или запроса"
- выберите
tblCustomer
- добавлять
id
а такжеcustomer_name
- Сортировать по
customer_name
- Убедитесь, что установлен флажок Скрыть ключевой столбец
- Выберите ярлык
Это устанавливает свойства комбинированного списка для сохранения идентификатора в его значении, но просто отображает имя для пользователя. Вы можете привязать это поле непосредственно к полю клиента в соединительной таблице, а затем удалить код (и кнопку) все вместе. Повторите для продукта тоже!