[Работа в MS Access 2019 Professional Plus 2019. Однако это не имеет значения.]
Мои настройки можно сузить до этой иерархии, которая сама по себе прекрасно работает:
'------> Hierarchy of objects :
"myMainForm" contains :
"select_client" (ComboBox based on "client" table)
"select_status" (ComboBox based on "status" table)
' and some multi-select checkboxes that forbid use of Master/Child feature
"mySubForm"
"Source Object" : "myQuery" ' "mySubForm" not saved with an explicit name, local to "myMainForm"
"mQuery" filters the table "course" :
"client_ID" criteria : [Forms]![myMainForm]![select_client]
"status_ID" criteria : [Forms]![myMainForm]![select_status]
'------> "myMainForm" VBA to requery on change (could be performed with Macros) :
Private Sub select_client_Change()
Me!mySubForm.Requery
End Sub
Private Sub select_status_Change()
Me!mySubForm.Requery
End Sub
Затем я пытаюсь встроить «myMainForm» в форму более высокого уровня (скажем, «myNavForm»):
"myNavForm" contains :
"myMainForm" contains :
' same as above from there
"mySubForm"
Когда я пытаюсь запустить "myNavForm"
, меня просят ввести [Forms]![myMainForm]![select_client]
и [Forms]![myMainForm]![select_status]
и "myMainForm"
перестает работать полностью.
Сначала я подумал, что проблема связана с тем, что значения ComboBox еще не загружаются при запуске "myQuery"
, поэтому я добавил следующий VBA в "myMainForm"
:
Private Sub Form_Load()
Me!mySubForm.SourceObject = "Query.myQuery"
Me!mySubForm.Requery
End Sub
Private Sub Form_Unload(Cancel As Integer)
Me!mySubForm.SourceObject = ""
End Sub
Но проблема остается той же. Я предполагаю, что это происходит из-за ошибки в области / пути на моей стороне, но я не могу понять это. Я пробовал абсолютные пути в "myQuery"
, как вы можете видеть выше. Я также пытался использовать относительные пути с .Parent
, но не мог заставить "myMainForm"
работать с ним (даже без встраивания в "myNavForm"
).
Поэтому я застрял и облажался и отчаялся, и я хочу моя среда Node / MongoDB вернулась, но я должен сделать это в Access (не спрашивайте!).
Есть идеи, как заставить это работать с встраиванием? В максимально возможной степени я предпочел бы придерживаться этой настройки и избегать ввода более сложных VBA (синтаксис вызывает у меня головную боль), но я открыт для этого, если необходимо; -)
Thx для любого вида помогите освободить меня от этого кошмара!
[РЕД. Решение работает безупречно:
'------> Hierarchy of objects :
"myMainForm" contains :
"select_client" '(ComboBox based on "client" table)
"select_status" '(ComboBox based on "status" table)
"mySubForm"
"Source Object" : "myQuery" 'remove all criteria from the query !
' ------> Handle the rest in VBA :
'Lets write this only once...
Private Sub updateResult()
mySubForm.Form.Filter = "client_ID=" & select_client & " AND status_ID=" & select_status
mySubForm.Form.FilterOn = True
End Sub
'Apply filter with default values upon loading
Private Sub mySubForm_Current()
updateResult
End Sub
'Update filter whenever a control is updated
Private Sub select_client_AfterUpdate()
updateResult
End Sub
Private Sub select_status_AfterUpdate()
updateResult
End Sub
В общем, у меня наконец-то появилась хорошая платформа для обновления любого многокритериального запроса на лету после любого обновления элемента управления и немедленного просмотра результата в форме, который ведет себя так же, как и любой другой. современный GUI должен! Спасибо снова Оливье!