我正在尝试学习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.
答案 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: