Как смоделировать заголовок группы в форме непрерывного доступа? - PullRequest
1 голос
/ 18 июня 2010

У меня есть форма ( не отчет) в Access, отображаемая в режиме непрерывного просмотра, которая содержит много повторяющихся данных. то есть это выглядит так:

Состояние Names<br> FL Abe<br> FL Bart<br> FL Charlie<br> GA Deleanor<br> GA Мэри

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

Штат Names<br> FL<br> Abe<br> Bart<br> Charlie<br> GA<br> Deleanor<br> Мэри

Ответы [ 3 ]

3 голосов
/ 16 ноября 2012

Я обнаружил ряд проблем с опубликованными решениями.Очевидно, что есть проблемы (как отмечено), если есть повторяющиеся записи.Но я обнаружил, что существует более глубокая проблема, заключающаяся в том, что вы не можете сделать это и по-прежнему сортировать данные по еще одному полю (предположим, что вы хотите отсортировать по дате, когда каждое имя было впервые зарегистрировано в каждом штате, и все же НЕ ранжироватьтаким образом).

Лучшее решение можно найти в разделе «Использование кода» Microsoft KB:

http://support.microsoft.com/kb/q101081

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

В вычислительном отношении это может быть немного интенсивно, поэтому оно работает только для небольших наборов данных, но я добился хороших результатов, сначала проверив функцию:

= PrevRecVal ([Forms]! [MyForm],«ID», [ID], «Имена») = [Имена])

, затем помещаем его в функцию IIF:

= IIf (PrevRecVal ([Forms]! [MyForm],"ID", [ID], "Имена") = [Имена] "" [ПолноеИмя])

2 голосов
/ 19 июня 2010

Вы смотрели подкаталоги? Если у вас есть таблица состояний (или просто запросите существующие данные об уникальных состояниях), вы можете использовать ее в не редактируемой родительской таблице данных, а затем в дополнительной таблице будут отображаться данные о людях, и вы можете сделать ее редактируемой.

Я бы реализовал это с формами таблиц, а не с таблицами или таблицами запросов. Это дает вам гораздо больший контроль над связыванием и форматированием вложенной таблицы, а также упрощает взаимодействие с событиями таблицы (это можно сделать с таблицей или таблицей запросов, но только с помощью Screen.ActiveDatasheet.

1 голос
/ 18 июня 2010

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

= IIf (rank = 1, [State], ""]

В текстовом поле будет отображаться первое вхождение каждого состояния, а в противном случае строка нулевой длины.

Я проверял этот запрос на источник записи.

SELECT
    m1.state,
    m1.names,
    (
        SELECT Count(names)
        FROM MyTable AS m2
        WHERE
            m2.state=m1.state
            AND m2.names<=m1.names
    ) AS rank
FROM MyTable AS m1
ORDER BY m1.state, m1.names;

И это сработало, но не редактируется. Если вам нужно иметь возможность редактировать, попробуйте запрос, который использует DCount для генерации рейтинга.

SELECT
    m1.state,
    m1.names,
    DCount("names", "MyTable",
    "state ='" & state & "' AND " & "names <= '" & names & "'") AS rank
FROM MyTable AS m1
ORDER BY m1.state, m1.names;

Оба эти запроса дают этот набор результатов с примерами данных:

state names     rank
FL    Abe       1
FL    Bart      2
FL    Charlie   3
GA    Deleanor  1
GA    Mary      2

Обратите внимание, я предположил уникальные комбинации состояния и имени.

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