BREAK BY在Progress ABL中有多个连接

时间:2014-12-19 15:18:41

标签: progress-4gl

我正在尝试学习Progress ABL,但我找不到使用多个连接的break by的好例子。我现在得到的错误是冒号后跟空格终止一个语句。 (199)。

我最后一次遇到这个错误是因为我没有把我的结束语句放在正确的位置,但我不知道是不是这样。任何帮助表示赞赏。

DEFINE QUERY q1
    FOR platte.item FIELDS (item item_ptr costing_uom stocking_uom size description default_uom_conv_factor),
        platte.item_branch FIELDS (weight_uom load_uom weight load_factor),
        platte.item_uomconv FIELDS (system_id item_ptr_sysid),
        platte.uom_conv FIELDS (convert_from convert_to conv_factor),
        platte.product_group_minor FIELDS (major minor).

    OPEN QUERY q1
    FOR EACH item WHERE (item.system_id = '000000') NO-LOCK,
    EACH item_branch WHERE (item_branch.system_id = item.system_id
            AND item_branch.item_ptr = item.item_ptr) NO-LOCK,
    EACH item_uomconv WHERE (item_uomconv.system_id = item.system_id
        AND  item_uomconv.item_ptr_sysid = item.system_id
        AND item_uomconv.item_ptr = item.item_ptr) NO-LOCK,
    EACH uom_conv WHERE (uom_conv.system_id = item_uomconv.uom_ptr_sysid
                AND uom_conv.uom_ptr = item_uomconv.uom_ptr) NO-LOCK,
    EACH product_group_minor WHERE (product_group_minor.system_id = item.pg_ptr_sysid
            AND product_group_minor.pg_ptr = item.pg_ptr) NO-LOCK  BREAK BY item.item:

      DISPLAY
        item.item LABEL "item" "|SEP|"
        item.item_ptr LABEL "item_ptr" "|SEP|"
        item.size LABEL "size" "|SEP|"
        item.description LABEL "description" "|SEP|"
        WITH WIDTH 250.
      END.

3 个答案:

答案 0 :(得分:1)

您的构造不正确 - 最后一个“END”语句不属于,除非您为FOR EACH更改OPEN QUERY .....如此:

FOR EACH item
    WHERE (item.system_id = '000000')
    NO-LOCK,

   EACH item_branch
       WHERE (item_branch.system_id = item.system_id AND
              item_branch.item_ptr = item.item_ptr)
       NO-LOCK,

   EACH item_uomconv
       WHERE (item_uomconv.system_id = item.system_id      AND
              item_uomconv.item_ptr_sysid = item.system_id AND
              item_uomconv.item_ptr = item.item_ptr)
       NO-LOCK,

   EACH uom_conv
       WHERE (uom_conv.system_id = item_uomconv.uom_ptr_sysid AND
              uom_conv.uom_ptr = item_uomconv.uom_ptr)
       NO-LOCK,

   EACH product_group_minor
       WHERE (product_group_minor.system_id = item.pg_ptr_sysid AND
              product_group_minor.pg_ptr = item.pg_ptr)
       NO-LOCK

   BREAK BY item.item:

   DISPLAY
           item.item LABEL "item"
           "|SEP|" VIEW-AS TEXT
           item.item_ptr LABEL "item_ptr"
           "|SEP|" VIEW-AS TEXT
           item.size LABEL "size"
           "|SEP|" VIEW-AS TEXT
           item.description LABEL "description"
           "|SEP|" VIEW-AS TEXT
       WITH WIDTH 250
           DOWN
           .
END.

答案 1 :(得分:1)

我冒昧地简化了这个例子,使用着名的“sports2000”数据库。要使用BREAK-BY并加入代码的动态查询应该更像是这样:

define query q1 for customer, order scrolling.

open query q1 for each customer no-lock, each order no-lock of customer break by order.shipDate.

get first q1.

do while available customer:

  display customer.name order.shipDate.

  get next q1.

end.

1)要在动态查询中使用BREAK-BY,您需要将该查询定义为SCROLLING。

2)OPEN QUERY语句应以“。”结尾,而不是“:”。

3)您必须在显示数据之前实际获取数据。 GET FIRST和GET NEXT在我的例子中做到了。

答案 2 :(得分:0)

很长一段时间以来我已经取得了任何进展,但我很想在这一行删除终端冒号

        AND product_group_minor.pg_ptr = item.pg_ptr) NO-LOCK  BREAK BY item.item: