0

我有一个 Access 2010 报告,其中包含我在设计中设置的两个组。第一组具有人员数据(姓名、出生日期、当前地址、客户积分、客户上次下订单的日期)。第二组有当前人的所有订单。调用此报告的表单具有排序依据选项。他们可以按名称升序或降序排序,他们订购东西的最后日期 asc/desc,以及他们有多少客户点 asc/desc。所有这些排序选项都应该适用于第一个/主要报告组中的数据。当报告已经包含组时,有什么方法可以调用此报告并在 VBA 中设置 orderby?我从表单中传入 args 并尝试加载
Me.OrderBy = ArgIn(2)

Me.OrderByOn = True

我也在公开活动中尝试过这个。报告打开但忽略排序/排序依据。

谢谢

4

2 回答 2

0

除了传递参数,您可以采用两种方法:

  1. 创建 3 个完全相同的报告,但排序不同(在组的报告设计中,您可以对基础项目进行排序),并有一个带有下拉或列表菜单的表单触发按钮,供用户选择特定的报告排序,然后调用特定的报告。

  2. 在 VBA 中,创建一个动态的、用户定义的 querydef (Set qrydef = db.CreateQueryDef("[QUERY NAME]", strSQL),它由每个 ORDER BY 类型的三个特定 SQL 语句上的表单触发器按钮调用(姓,日期,点)。将 querydef 设置为报告的记录源。

于 2013-12-03T03:23:33.347 回答
0

最好的动态方法是使用 .SortOrder 和 .ControlSource:

Private Sub Report_Open(Cancel As Integer)

    ' Set SortOrder property to Ascending order (SortOrder = False)
    Me.GroupLevel(0).SortOrder = blSortOrder
    Me.GroupLevel(0).ControlSource = strSortBy

End Sub

.ControlSource 是要排序的报告表/查询的字段名称。过滤器层次结构的地址类似于 Me.GroupLevel(0)、Me.GroupLevel(1)、Me.GroupLevel(2) 等。

通过 Me.OpenArgs 传入这些数据。

Me.GroupLevel(0).SortOrder = Split(Me.OpenArgs, "|")(0)
Me.GroupLevel(0).ControlSource = Split(Me.OpenArgs, "|")(1)

像这样调用报告:

DoCmd.OpenReport "ReportName", acViewPreview, , , acWindowNormal, strSortBy & "|" & blSortOrder

...并确保排序字段在其表中是唯一的,如果您使用分组。(请注意,当您添加标题时,Access 会将排序转换为分组)。

于 2018-06-24T21:36:23.300 回答