Подформа показывает только одну запись - PullRequest
1 голос
/ 10 июня 2009

У меня есть подчиненная форма (Пользовательская форма), встроенная в форму (пользователи). То, чего я пытаюсь добиться, - это загрузка, подчиненная форма должна показывать ВСЕХ пользователей в таблице и элементы управления в главной форме в качестве фильтра.
т.е.
если пользователь A выбран из выпадающего списка в главной форме, в подчиненной форме отображаются только данные пользователя A
если выделение (т. е. userA) очищено из выпадающего списка в главной форме, ВСЕ записи снова появятся в подчиненной форме.

Это звучит очень просто, но для начала, когда я загружаю свою форму, в подчиненной форме отображается только 1 запись. Если я делаю выбор в выпадающем списке пользователя, то записи этого пользователя отображаются ТОЛЬКО Это побеждает цель иметь подчиненную форму, если все, что я могу видеть, является одной записью это время с или без выбора.

Я использую Access '03. Может кто-нибудь помочь с этим. У меня есть пример базы данных, которая смогла достичь этого, но я не могу найти разницу в их настройках по сравнению с моей.

Ответы [ 4 ]

2 голосов
/ 13 июня 2009

Основная форма не должна иметь источника записей и не должно быть критериев ссылки.

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

Я делал это много раз в прошлом, но обычно не использовал подчиненную форму. Я не увлекаюсь таблицами данных и использую непрерывные формы, и помещаю элементы управления фильтрацией в заголовок формы. Затем вы избегаете трудностей обращения к элементу управления подчиненной формы (хотя это довольно просто, поскольку вы можете использовать блок «С / Конец с», как видно из поста Прейсага).

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

2 голосов
/ 11 июня 2009

Я предполагаю, что у вас есть подформа, настроенная как «Непрерывная форма» или «Лист данных».

Есть ли в вашем фильтре что-то еще при открытии формы? Вы можете явно очистить ее при открытии основной формы, а затем обновить данные.

Редактировать
Вот что я делал раньше:

Private Sub cmdCannedFilter_Click()
On Error GoTo Err_Click    
Dim strFilter As String
    strFilter = "(1 = 1)"
    strFilter = strFilter & " " & _
            "and (((someTable.Active)=Yes) "   

    Me![List_SubForm].Form.FilterOn = False
    Me![List_SubForm].Form.Filter = strFilter
    Me![List_SubForm].Form.FilterOn = True

Exit_Click:
    Exit Sub

Err_Click:
    MsgBox Err.Description
    Resume Exit_Click
End Sub

В этом случае это выполняется с кнопки на главной форме, а List_SubForm является (очевидно) подчиненной формой. Я думаю, что ключевым моментом для меня было то, чтобы выключить и снова включить фильтр. Я не помню почему.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. .

Вы делаете что-то подобное?

1 голос
/ 13 июня 2009

Похоже, у вас есть два разных набора записей. Данные пользователя показывают, когда пользователь выбран. Когда ни один пользователь не выбран, вы хотите видеть всех пользователей. Если это так, используйте две субформы и переключайтесь между ними - мы будем называть их fAllUsers и fUserDetails. Позволяет вызвать имя элемента управления подчиненной формы sfUser. Я предполагаю, что первичный ключ в пользовательской форме и внешний ключ в fUserDetails - это userID. Убедитесь, что в подчиненной форме нет полей, связанных с родителем.
В родительском:

Private Sub Form_Current()
    Dim sForm as string
    Dim sFilter as string
    Dim lUserID as long
    lUserID =nz(me!userID,0)
    sForm="fUserDetails"
    sFilter="userID=" & lUserID
    if lUserID<>0 then 
        sForm="fAllUsers"
        sFilter=""
    end if
    with sfUser
        .sourceobject=sForm
        .filter=sFilter
        .filteron=true
    end with
End Sub

Надеюсь, это поможет.

0 голосов
/ 29 мая 2013

У меня был случайный (исчерпывающий) запрос с именем «TmprryQryFrLnkFldsCrtn0123456789», который я удалил по ошибке, что дало мне проблему с отображением только одной записи в моей подчиненной форме. Я просто случайно сравнил резервную копию БД с той, с которой у меня возникла проблема.

Как только я восстановил запрос, все мои результаты снова появлялись.

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