进度openge错误215(为每个块创建)

问题描述 投票:1回答:2

我正在尝试为这种情况编写代码:浏览每个客户(客户表)以查看他们是否是2018年的成员(我在会员表,年份字段中找到该信息)。如果那年没有会员资格我想创建它(创建客户)。

我的编码技巧不是很好。我收到错误消息215(不确定我可以翻译,但基本上:创建无法在'每个'修改过的帖子上完成,类似的东西......)。

这是我尝试过的代码:

FOR EACH customer NO-LOCK,
  EACH membership:
    IF CAN-FIND (FIRST membership WHERE membership.year = 2019) THEN DO:
      LEAVE.
    END.
    ELSE DO:
    CREATE membership.
      ASSIGN membership.year = 2018
             .... fill the rest of the table....
   END.
 END.

显然我做错了。建议将非常感谢!

openedge progress-4gl
2个回答
4
投票

第一个问题是弄清楚客户和会员是如何相关的。

为了便于讨论,我假设他们有一个共同的“custNum”字段。

在这种情况下,这样的事情应该有效:

for each customer no-lock:

  if not can-find( membership where membership.year = 2018 and membership.custNum = customer.custNum ) then
    do:

      create membership.
      assign
        membership.year = 2018
        membership.custNum = customer.custNum
        /* whatever... */
      .

    end.

end.

1
投票

Tom的回答是正确的,因为它修复了你的代码并且你不再得到错误了。我将尝试解释错误消息。错误消息是

** CREATE cannot be processed for an EACH mode record--<table>. (215)

在这种情况下,这意味着您在EACH成员资格循环中拥有CREATE成员资格语句。如果其余代码是正确的,解决方案是使用不同的缓冲区进行CREATE。这会将您的代码更改为以下内容(这仍然完全错误,但应该可以摆脱编译错误):

define buffer bmembership for membership.

FOR EACH customer NO-LOCK,
  EACH membership:
    IF CAN-FIND (FIRST membership WHERE membership.year = 2019) THEN DO:
      LEAVE.
    END.
    ELSE DO:
    CREATE bmembership.
      ASSIGN bmembership.year = 2018
             .... fill the rest of the table....
   END.
 END.
© www.soinside.com 2019 - 2024. All rights reserved.