В форме доступа есть ли способ использовать поле поиска для заполнения формы с использованием VBA? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть два решения, над которыми я работаю, чтобы решить эту проблему ...


Попытка # 1

У меня есть поле со списком в форме доступа с двумя опциями, «Все» и «Все образцы». Образец - это выборка записей из моей таблицы, которые помечены для просмотра с помощью sample_record_id (текстовое поле) для идентификации с ненулевым положительным числом. «Все» и «Все образцы» находятся в моем источнике строк. Мой комбинированный список называется myFilters.

Afterupdate, этот VBA работает:

Private Sub myFilters_AfterUpdate()
Debug.Print myFilters.Value
  If myFilters.Value = "All Sample" Then
    Me.FilterOn = True
    DoCmd.ApplyFilter , "sample_record_id <> '0'"
  Else
    Me.FilterOn = False
  End If
End Sub

Все записи имеют запись для sample_record_id.

Я ожидал, что мои выборочные записи будут заполняться при выборе «Все выборки», а все записи будут заполняться в противном случае. Фактически, все записи заполняются, когда выбрано «Все», но когда выбран «Весь образец», появляется диалоговое окно «Ввод значения параметров» с текстом «sample_record_id» с пробелом для ввода текста.

Интересно, когда я переключаю IF и ELSE:

If myFilters.Value = "All" Then
    Me.FilterOn = False
Else
    Me.FilterOn = True
    DoCmd.ApplyFilter , "sample_record_id <> '0'"

... ни выбор не работает должным образом.


Попытка # 2

Я также попробовал следующий VBA:

Private Sub myFilters_AfterUpdate()
  DoCmd.SetWarnings False
  strSQL = "SELECT * FROM invoice_summary WHERE sample_record_id <> '0';"
  Debug.Print strSQL
  DoCmd.RunSQL strSQL
  DoCmd.SetWarnings True
End Sub

Я ожидал, что это сделает то же самое, что и предыдущий код, но независимо от того, какой выбор я выберу, появляется ошибка отладки, говорящая: «Для действия RunSQL требуется аргумент, состоящий из оператора SQL».

Отладка strSQL возвращает: SELECT * FROM invoice_summary WHERE sample_record_id <> '0';

Я пробовал с и без;

Оператор sql работает в стандартном запросе.

Есть ли способ заставить любой из этих работать?

1 Ответ

0 голосов
/ 04 апреля 2019

Работаю над этим в течение двух дней, и через 30 минут после публикации я выясняю это. Вздох.

Используя мою первую попытку, мне просто пришлось заключить в скобки имя моего поля:

Private Sub myFilters_AfterUpdate()
  If myFilters.Value = "All Sample" Then
    Me.FilterOn = True
    DoCmd.ApplyFilter , "[sample_record_id] <> '0'"
  Else
    Me.FilterOn = False
  End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...