Как обратиться к таблице значений в подчиненной форме в Microsoft Access - PullRequest
0 голосов
/ 31 мая 2011

Я работаю над функцией поиска для моей базы данных. Я создал тестовую базу данных, чтобы разобраться, и я застрял. Когда я нахожусь в одной форме, поиск в диапазоне довольно прост, и я выполнил это, используя следующий код VBA:

Private Sub Command12_Click()
Dim strWhere As String
Dim lngLen As Long

If Not IsNull(Me.Text8) Then
    strWhere = strWhere & "( [testNUm] >= " & Me.Text8 & ") AND "
End If

If Not IsNull(Me.Text10) Then
    strWhere = strWhere & "( [testNUm] < " & Me.Text10 & ") AND "
End If

lngLen = Len(strWhere) - 5

If lngLen <= 0 Then
    MsgBox "no criteria", vbInformation, "Nothing to do"
Else
    strWhere = Left$(strWhere, lngLen)

Me.Filter = strWhere
Me.FilterOn = True

End If

End Sub

Вышеприведенный код работает нормально, однако, когда я пытаюсь поместить свою форму в представление панели с вкладками и получить ее в качестве подчиненной формы для другой формы, я не могу правильно получить доступ к таблице этой подчиненной формы. Я пытался использовать различные методы, показанные здесь http://access.mvps.org/access/forms/frm0031.htm, но я не могу заставить его сделать что-то большее, чем ссылка на конкретное текстовое поле в подчиненной форме.

Private Sub Command24_Click()

Dim strWhert As String
Dim lngLeng As Long

MsgBox Forms!test2!Child16.Form.testNUm, vbInformation, "wtf"

If Not IsNull(Me.Text20) Then
    strWhert = strWhert & "( Forms!test2!Child16.Form.[testNUm] >= " & Me.Text20 & ") AND "
End If

If Not IsNull(Me.Text22) Then
    strWhert = strWhert & "( Forms!test2!Child16.Form.[testNUm] < " & Me.Text22 & ") AND "
End If

lngLeng = Len(strWhert) - 5

If lngLeng <= 0 Then
    MsgBox "no criteria", vbInformation, "Nothing to do"
Else
    strWhert = Left$(strWhert, lngLeng)

Forms!test2!Child16.Form.Filter = strWhert
Forms!test2!Child16.Form.FilterOn = True

End If

End Sub

Я довольно неопытен в программировании на VBA, и у меня осталась задача создать БД с нуля за 2 недели. Заранее благодарим за любую помощь, которую вы можете оказать.

1 Ответ

1 голос
/ 31 мая 2011

Я не понимаю, какая форма содержит Command24.Вы можете узнать это, временно изменив Command24_Click.

Private Sub Command24_Click()
    Debug.Print "'Me' refers to " & Me.Name
    Stop
End Sub

Оператор Stop переведет вас в режим прерывания.Затем вы можете использовать Immediate Window, чтобы исследовать варианты пути объекта, пока не найдете тот, который относится к правильной форме.

Однако, учитывая вашу конкретную ситуацию (небольшой опыт работы с VBA и сжатые сроки), я призываю вас перейти на более простой дизайн формы.Спросите себя, должна ли форма поиска обязательно быть встроена в другую форму на странице в элементе управления вкладкой.

Редактировать : Комментарий о схеме присвоения имен был точным, IMO.Видимо, вы согласны, и намерены изменить на значимые имена позже.Если вы сделаете это сейчас, вы можете упростить устранение неполадок.В частности, неохотно вводите название формы, подобной этой:

Forms!test2

«test2» - плохой выбор для имени формы;конечно, вы будете менять это.Итак, пока используйте «Я» для ссылки на форму, которая содержит вашу командную кнопку.Тогда ваш код не сломается, когда вы переименуете форму.Это еще одна деталь, с которой стоит возиться позже.

Все еще не уверены, насколько хорошо я понимаю детали вашей формы, но я предлагаю вам перейти в режим прерывания после настройки фильтра подчиненной формы и проверить, что вы получили то, что хотели.В «Немедленном окне» попробуйте варианты этого:

? Me.Child16.Form.FilterOn

Я сказал варианты, потому что я скептически отношусь к тому, правильно ли я получил путь объекта.Настройте его по мере необходимости.

Edit2 : после того, как ваш код завершит создание strWhere, распечатайте его в Immediate Window, чтобы вы могли подтвердить, что он содержит то, что вы ожидаете (или отобразить его в MsgBox, если выпредпочитайте).

Debug.Print "strWhere: " & strWhere

Edit3 : Вы строите выражение фильтра с помощью таких выражений:

"( Forms!test2!Child16.Form.[testNUm] < " & Me.Text22

Я бы использовал имя поля висточник записи формы слева от символа <. </p>

"([SomeNumberField] < " & Me.Text22
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...