我正在尝试为这种情况编写代码:浏览每个客户(客户表)以查看他们是否是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.
显然我做错了。建议将非常感谢!
第一个问题是弄清楚客户和会员是如何相关的。
为了便于讨论,我假设他们有一个共同的“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.
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.