У меня есть форма с несколькими текстовыми полями, полями со списком и даже вкладкой. Все привязано к набору данных. При выборе поля со списком, имеющего уникальное содержимое, я бы хотел, чтобы все элементы управления изменились соответствующим образом. Я вроде как это сделал, но чувствую, что это слишком сложно. По сути, я просмотрел все элементы управления и установил вот так:
For each ctrl in me.controls
For i=0 to rs dields.count-1
If ctrl.name = rs.fields(i).name then
Ctrl.value = rs.fields(i).value
Exit for
Next i
Next ctrl
Rs.close
Это вроде как работает, но панель навигации (?) со стрелками внизу строки не показывает правильную строку, и я подумал, что должен быть лучший способ сделать это, если бы у меня была строка..
Поэтому я хочу фактически сопоставить идентификатор выбранных комбинаций со строкой в наборе данных и просто передать эту информацию о номере строки (ID) в форму, чтобы все автоматически обновлялось. заранее спасибо
Если вы хотите, чтобы полный источник записей оставался там:
Call DoCmd.GoToRecord(acDataForm, Me.Form.Name, acGoTo, Me.myComboBox)
Значение, которое вы выбираете в поле со списком, является значением смещения, к которому вы хотите, чтобы запись перешла.
Чтобы связать это в форме, вы можете добавить запрос ниже в качестве источника записей формы:
SELECT tblTea.Id, tblTea.TeaCD, tblTea.Tea_Name, DCount("[ID]","[tblTea]","[ID]< = " & [ID]) AS row_id
FROM tblTea
ORDER BY tblTea.Id;
Идентификатор строки даст вам номер, представленный в наборе записей. Вот пример данных:
Как видите, я удалил идентификатор 5. Тем не менее, общее количество записей равно 5, но самый высокий идентификатор равен 6.
Это показывает поле со списком со всеми соответствующими данными, основанными на запросе, как описано выше. Первый столбец поля со списком скрыт и содержит значение row_id. Поэтому, если вы выберете идентификатор чая: 6, он перейдет на запись 5 в вашей форме.
Это ресурс комбобокса
SELECT qfrmTea.row_id, qfrmTea.Id FROM qfrmTea ORDER BY qfrmTea.row_id;
Нет. Я по-прежнему хочу, чтобы источник записей имел, скажем, 35 наборов данных, но «указывал» на конкретный набор данных, который я хотел бы выбрать с помощью поля со списком вместо стрелок внизу.
Если вы понимаете, о чем я?
Привет, Кингсли! Вы пробовали вышеперечисленное? Это должно сработать.
Да, есть... К сожалению, я получаю ошибку 2498, сообщающую, что я использовал неправильный тип данных для одного из параметров. У меня есть me.cboName вместо вашего me.mucombobox. Я также проверил, это определенно строка.
Чего-то не хватает. Нет связи между данными в столбце Имя из cboName и идентификатором связанной таблицы.
Значение, которое вы вставляете в значение me.myCombobox, — это значение, которое вы вставляете в стрелки внизу. Действительно нет связи с идентификатором поля. Поэтому вам следует установить источник записи формы. Допустим, у вас есть 35 записей. Когда вы выбираете номер 10 в myComboBox, набор записей перейдет к записи номер 10, не заботясь об идентификаторе записи. Вы можете добавить номер строки в свой запрос и прикрепить его к списку, таким образом у вас будет правильный номер в наборе записей.
@ Маттиас Х, я просто смотрел остальную часть твоего решения. Значит, поле со списком должно иметь другой источник записей? Я надеялся, что поле со списком, привязанное к форме, также будет работать как обычное поле набора данных. По сути, у пользователя должен быть выбор: использовать стрелки ИЛИ выбрать набор данных связанной таблицы через поле со списком.
Источник записей отличается, поскольку вам нужна связь между номером строки и идентификатором записи. Вы можете добавить Row_ID в качестве источника управления для поля со списком, когда пользователь использует стрелки, он будет перемещаться.
Вы можете удалить внутренний цикл:
on error resume next : For each ctrl in me.controls : Ctrl.value = rs(ctrl.name) : Next