代码之家  ›  专栏  ›  技术社区  ›  PowerUser

如何在访问连续窗体中模拟组头?

  •  1
  • PowerUser  · 技术社区  · 15 年前

    我有一张表格( Access中的一种报表,显示在连续视图中,有大量重复数据。i、 e.看起来像:

    Names
    FL
    Abe
    FL
    Bart
    FL
    Charlie
    GA
    Deleanor
    GA

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

    Names
    FL
    Abe
    Bart
    Charlie
    GA
    Deleanor

    3 回复  |  直到 15 年前
        1
  •  1
  •   HansUp    15 年前

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

    文本框将显示每个状态的第一次出现,否则将显示长度为零的字符串。

    我用这个查询测试了记录源。

    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
    

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

        2
  •  3
  •   Damon    12 年前

    在Microsoft知识库的“使用代码”部分可以找到更好的解决方案:

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

    该节中的代码以您定义的任何排序顺序从上一个字段中检索实际数据。

    =PrevRecVal([Forms][myForm],“ID”,[ID],“Names”)=[Names])

    =IIf(PrevRecVal([Forms])[myForm],“ID”,[ID],“Names”)=[姓名],“”,[全名])

        3
  •  2
  •   David-W-Fenton    15 年前

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