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

时间:2019-03-18 19:19:35

标签: openedge progress-4gl

我正在尝试为这种情况编写代码: 仔细检查每个客户(客户表),看看他们是否是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.

显然我做错了。建议将不胜感激!

2 个答案:

答案 0 :(得分: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 :(得分: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.