Access 2007 Filter Subform на основе поля в главной форме? - PullRequest
1 голос
/ 06 июля 2011

Мне было поручено создать простое приложение для ведения коллекции предметов коллекционирования пользователя с помощью Access 2007. Были некоторые запросы, которые я создал и реализовал. Те, которые:

  1. Одна основная форма, в которой перечислены все его предметы коллекционирования
  2. Эта же основная форма имеет элемент управления с вкладками ниже, причем каждая вкладка содержит подчиненную форму, которая в действительности «фильтрует» данные на основе критериев, отличных от основной формы. Например, 1-ая подчиненная форма берет имя коллекционной фигуры в главной форме и отображает все другие записи, использующие это имя в подчиненной форме. Другими словами, если фигура «Дарт Вейдер», подчиненная форма перечислит все предметы коллекционирования, имеющие имя «Дарт Вейдер».

Я создал приложение в соответствии с запросом пользователя, но есть одна вещь, которая беспокоит нас обоих до сих пор. Первая запись подчиненной формы совпадает с основной формой. Мы оба находим это излишним и раздражающим. Конечно, мои навыки доступа в лучшем случае слабые, так что это может быть простым исправлением, но есть ли способ удалить дублирующую запись в подчиненной форме? Я попытался реализовать условие where в подчиненной форме, заявив, что он не включает «ID рисунка» в основную форму. Проблема в том, что он действует как приглашение параметра, запрашивая идентификатор формы главной формы, когда я открываю подчиненную форму, или основную форму. Если я наберу идентификатор рисунка, он будет работать, но подсказка - это то, что явно не нужно.

К вашему сведению:

  1. Основная форма основана на запросе, который в основном выбирает все записи из таблицы "Фигуры" и других связанных таблиц
  2. Подформа была создана, когда я перетащил элемент управления подчиненной формы на элемент управления вкладкой, где я связал необходимые основные и дочерние поля

1 Ответ

1 голос
/ 09 июля 2011

Скажем, у вас есть форма с именем frmMain.Эта форма включает два поля в своем источнике записей: FigureID;и Figure_name.Форма также включает элемент управления текстового поля с именем txtFigureID, который связан с полем источника записи FigureID.

frmMain также содержит элемент управления подчиненной формы, основанный на форме с именем frmSub.Источник записи для frmSub также включает поля FigureID и Figure_name.Свойство master / child поля ссылки подчиненного элемента имеет имя Figure_name.Поэтому frmSub будет отображать все строки, где Figure_name совпадает с соответствующим значением в текущей записи frmMain.

Теперь, если вы хотите, чтобы frmSub исключил конкретную запись (определяемую уникальным значением FigureID), которая является текущей записью в frmMain, добавьте предложение WHERE в запрос источника записи frmSub:

WHERE FigureID <> Forms!frmMain!txtFigureID

Я только догадываюсь здесь, но надеюсь, что описание достаточно близко к вашей реальной ситуации, чтобы быть полезным.Если нет, покажите нам SQL, который вы используете в качестве источника записи для вашей подчиненной формы.

Редактировать : Запрос параметров вы получаете только при первом открытии frmMain.После этого вы можете перемещаться между записями в frmMain, и frmSub показывает вам только те записи, которые вы хотите видеть ... без повторного запроса значения параметра.

Причина, по которой это происходит, заключается в том, что подчиненная форма загружает до своей родительской формы ... поэтому элемент управления в родительской форме недоступен при загрузке подчиненной формы.

Iдумаю, что лекарством может быть сохранение подчиненной формы без условия WHERE в ее источнике записей.Затем, когда загружается основная форма, она может переписать источник записи подчиненной формы, включив условие WHERE.

Итак, в событии загрузки frmMain:

Private Sub Form_Load()
    Dim strSql As String
    strSql = "SELECT FigureID, Figure_name FROM YourTable" & vbCrLf & _
        "WHERE FigureID <> Forms!frmMain!txtFigureID"
    Debug.Print strSql
    Me.subformControlName.Form.RecordSource = strSql
End Sub

Следите за subformControlName .Это контроль, а не форма.Элемент управления подчиненной формы может иметь то же имя, что и форма, которую он содержит.Но это может быть другое имя.

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