如何在Access连续表单中模拟组头?

时间:2010-06-18 16:41:27

标签: ms-access vba

我在连续视图中显示的Access中有一个表单(不是报表),它有很多重复数据。即它看起来像:

  

状态 Names
FL
Abe
FL
Bart
FL
{ {1}} Charlie
GA
Deleanor
GA
玛丽

这需要是交互式的(每行和表单头上都有一些命令按钮),但是有很多重复的数据。有没有办法按州添加组头?即使它看起来像:

  

状态 Names
FL
Abe
Bart
Charlie
GA
{ {1}} 玛丽

3 个答案:

答案 0 :(得分:3)

我发现了解决方案的许多问题。如果有重复的条目,最明显的是存在问题(如上所述)。但我发现有一个更深层次的问题,你不能这样做,仍然在另一个字段上排序数据(假设你想按每个州首次注册每个州的日期排序,但不排名他们那样)。

在Microsoft KB的“使用代码”部分中找到了更好的解决方案:

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

该部分的代码以您定义的任何排序顺序从Previous字段中检索实际数据。

计算上这可能有点激烈,因此它仅适用于小型数据集,但我通过首次测试函数取得了良好的效果:

= PrevRecVal([表格]![myForm的], “ID”,[ID], “名称”)= [名称])

然后把它放在IIF函数中:

= IIF(PrevRecVal([表格]![myForm的], “ID”,[ID], “名称”)= [名称] “”[全名])

答案 1 :(得分:2)

你看过子数据表吗?如果您有状态表(或仅查询现有数据的唯一状态),您可以在不可编辑的父数据表中使用它,然后子数据表将显示人员数据,您可以使其可编辑。

我将使用数据表表单实现此功能,而不是使用实际的表或查询数据表。这使您可以更加控制子数据表链接和格式化,以及更轻松地与数据表事件进行交互(可以使用表格或查询数据表完成,但只能通过Screen.ActiveDatasheet。

答案 2 :(得分:1)

我能得到的最接近的是在表单的记录源中添加一个字段,该记录源为组中的每一行编号。然后,您可以在表单的详细信息部分中添加一个文本框,并将此表达式作为其控制源。

= 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

注意,我假设了状态和名称的唯一组合。