В доступе к VBA. Существует ли способ поиска записи в таблице с использованием критериев комбинированного списка и добавления этой записи в другую таблицу? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь использовать несвязанные комбинированные списки и текстовые поля, где пользователь обновляет элементы управления и нажимает кнопку, а в другой tblEntry создается новая запись, используя некоторые данные той же записи из tblItems. Проблема: мой код работает только с первой записью. Создает новую запись в tblEntry, используя данные первой записи в tblItems. Может кто-нибудь посмотреть, пожалуйста?

Private Sub addItem_Click()

Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset

Set rs1 = CurrentDb.OpenRecordset("SELECT * FROM tblItems")
Set rs2 = CurrentDb.OpenRecordset("SELECT * FROM tblEntry")

If Not IsNull(Me.combo1) Then
  rs2.AddNew
  rs2.Fields("Description").Value = rs1.Fields("Description").Value
  rs2.Fields("ItemNo").Value = rs1.Fields("ItemNo").Value
  rs2.Fields("ItemName").Value = Me.txtItemName.Value
  rs2.Fields("entryDate").Value = Me.txtentryDate.Value
  rs2.Update

Form.frmItemEntryDatasheet.Requery

End If

rs1.Close
Set rs1 = Nothing
rs2.Close
Set rs2 = Nothing

End Sub 

1 Ответ

2 голосов
/ 07 апреля 2020

Как говорит @ June7, вероятно, нет причин делать это. Тем не менее, вам нужно открыть rs1 с фильтром, чтобы просто показать данные, относящиеся к выбранным в combo1. Предполагая, что первый столбец в combo1 является первичным ключом из tblItem и называется «ItemID»:

Set rs1 = CurrentDb.OpenRecordset("SELECT ItemDescription, ItemNo FROM tblItems WHERE ItemID ='" & ItemID.Value & "'")

Я также переименовал ваше поле «Description» в «ItemDescription», поскольку это, вероятно, зарезервированное слово в Access и могут возникнуть проблемы. Я также только что выбрал 2 поля, которые вы собираетесь использовать - нет смысла получать все поля. Вы должны открывать оба набора записей в операторе If / End If.

Кроме того, когда вы открываете rs2, вы фактически выбираете всю таблицу. Гораздо лучше использовать:

Set rs2 = CurrentDb.OpenRecordset("SELECT * FROM tblEntry WHERE 1 = 2")

Это открывает набор записей, основанный на tblEntry, но без выбранных записей, и поэтому имеет меньше накладных расходов.

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...