Таблицы 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
  • Убедитесь, что установлен флажок Скрыть ключевой столбец
  • Выберите ярлык

Это устанавливает свойства комбинированного списка для сохранения идентификатора в его значении, но просто отображает имя для пользователя. Вы можете привязать это поле непосредственно к полю клиента в соединительной таблице, а затем удалить код (и кнопку) все вместе. Повторите для продукта тоже!

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