OpenEdge 进度数据库插入行 - 初学者

OpenEdge progress database insert row - Beginner

我需要向我的数据库中插入新行。

    OUTPUT TO c:\temp\SMLeiste_bearbeiten.csv.
DEFINE VARIABLE size AS CHARACTER NO-UNDO FORMAT "x(3)"
  LABEL "Size".
for each S_Artikel
where S_Artikel.Selektion matches "KSE*"
or S_Artikel.Selektion matches "ZSE*"
or S_Artikel.Selektion matches "SSE*",
EACH BS_Zuord
     where BS_Zuord.SMLeiste = "SE"
     AND BS_Zuord.Owning_Obj = S_Artikel.S_Artikel_Obj
  EXCLUSIVE-LOCK.

 ASSIGN BS_Zuord.Merkmal = "Größe".

 PUT UNFORMATTED
   'First Loop - set row with Merkmal "Größe"' + '|' + STRING(BS_Zuord.Owning_Obj) + '|' + String(S_Artikel.S_Artikel_Obj)
SKIP.
END.

所以现在的问题是,我不知道如何在不遍历 "BS_Zuord"

中的每个项目的情况下添加具有大小的行

一个S_Artikel对象有多个BS_Zuord对象

我只想查询哪个 S_Artikel 符合我的条件,然后添加一个 BS_Zuord 等于 Owning_Obj = S_Artikel_Obj

我想我可能必须加入表格或类似的东西,但我不知道如何做到这一点

提前致谢!

编辑:

我必须更换吗

EACH BS_Zuord
     where BS_Zuord.SMLeiste = "SE"
     AND BS_Zuord.Owning_Obj = S_Artikel.S_Artikel_Obj
  EXCLUSIVE-LOCK.

 ASSIGN BS_Zuord.Property = "Size".

CREATE BS_Zuord.
BS_Zuord.OwningObj = S_Artikel_Obj.
ASSIGN BS_Zuord.Property = "Size".

**

完整代码的最新版本

**

    OUTPUT TO c:\temp\SMLeiste_bearbeiten.csv.
DEFINE VARIABLE groesse AS CHARACTER NO-UNDO FORMAT "x(7)"
  LABEL "Groesse".
for each S_Artikel
where S_Artikel.Selektion matches "KSE*"
or S_Artikel.Selektion matches "ZSE*"
or S_Artikel.Selektion matches "SSE*",

EACH BS_Zuord
     where BS_Zuord.SMLeiste = "SE"
     AND BS_Zuord.Owning_Obj = S_Artikel.S_Artikel_Obj
  EXCLUSIVE-LOCK.

 ASSIGN BS_Zuord.Merkmal = "Size". 

 PUT UNFORMATTED
   'Erste Schleife - Größe anlegen' + '|' + STRING(BS_Zuord.Owning_Obj) + '|' + String(S_Artikel.S_Artikel_Obj)
SKIP.
END.


for each S_Artikel
where S_Artikel.Selektion matches "KSE*"
or S_Artikel.Selektion matches "ZSE*"
or S_Artikel.Selektion matches "SSE*",
EACH BS_Zuord
     where BS_Zuord.SMLeiste = "SE"
     AND BS_Zuord.Merkmal = "Größe"
     AND BS_Zuord.Owning_Obj = S_Artikel_Obj 
  EXCLUSIVE-LOCK.
    IF SUBSTRING(STRING(S_Artikel.Selektion),8,1) = "/" THEN groesse = SUBSTRING(STRING(S_Artikel.Selektion),5,7).
        ELSE groesse = SUBSTRING(STRING(S_Artikel.Selektion),5,3).

    BS_Zuord.Auspr = groesse.

        PUT UNFORMATTED 
        'Zweite Schleife - Größe ausfüllen' + '|' + string(S_Artikel.Artikel) + '|' + string(S_Artikel.Selektion) + '|' + STRING(groesse) + '|' + STRING(BS_Zuord.SMLeiste) + '|' + STRING (BS_Zuord.Merkmal) + '|' + STRING(BS_Zuord.Auspr)
        SKIP.    
END.

如果我替换它所说的部分

,
EACH BS_Zuord
     where BS_Zuord.SMLeiste = "SE"
     AND BS_Zuord.Merkmal = "Größe"
     AND BS_Zuord.Owning_Obj = S_Artikel_Obj 
  EXCLUSIVE-LOCK.
    IF SUBSTRING(STRING(S_Artikel.Selektion),8,1) = "/" THEN groesse = SUBSTRING(STRING(S_Artikel.Selektion),5,7).
        ELSE groesse = SUBSTRING(STRING(S_Artikel.Selektion),5,3).

    BS_Zuord.Auspr = groesse.

和你的

/* 找到合适的 BS_Zuord 如果存在 */

exclusive-lock.
  find BS_Zuord where BS_Zuord.SMLeiste = "SE" and BS_Zuord.Owning_Obj =      S_Artikel.S_Artikel_Obj no-error.

  /* if it does not already exist create it and initialize the key */
  if not available BS_Zuord then   
    do:
      create BS_Zuord.
      assign
        BS_Zuord.SMLeiste = "SE"
        BS_Zuord.Owning_Obj = S_Artikel.S_Artikel_Obj
      .
    end.
  /* set the property field */
  BS_Zuord.Property = "Size".

并为每个输出评论第二个

将出现此消息: 它说 "for the Property (in my case Merkmal) "Größe" no "Ausprägung"(这是 属性 "Merkmal" 的实际值。不允许使用值 ''。 http://i.stack.imgur.com/FDL4S.png

所以 1 S_Artikel 有多个 BS_Zuord 和不同的 "Merkmal"。每个 "Merkmal" 都有多个值。

如果我 运行 工作代码,它运行每个 S_Artikel x-Merkmal 次并说如果,例如,一个 S_Artikel 有 6 "Merkmal" 它使用 "Größe" 作为值创建正确的 "Merkmal" 然后它尝试创建它 5 次,但它说它存在。然后每个汽车的第二个创建将在 BS_Zuord.Auspr.

中填写的值

我希望你明白我想告诉你的。英语不是我的母语:(

没错。删除

EACH BS_Zuord
     where BS_Zuord.SMLeiste = "SE"
       AND BS_Zuord.Owning_Obj = S_Artikel.S_Artikel_Obj
     EXCLUSIVE-LOCK.
ASSIGN BS_Zuord.Property = "Size". 

因为它将更改所有 BS_Zuord 符合循环条件的记录的值。 另外,第二个 EACH 将循环您已有的记录。由于您想创建一个新的,您最后发布的 CREATE 和 ASSIGN 应该可以解决问题。 如果相应地提供了 table 中的主键和必填字段,但假设您只需要代码中的 pk,那么根据您的解释,您提供的代码似乎可以满足您的要求。

我想这就是你想要做的:

/* loop through S_Artikel records matching criteria */

for each S_Artikel no-lock where
   where S_Artikel.Selektion matches "KSE*"
      or S_Artikel.Selektion matches "ZSE*"
      or S_Artikel.Selektion matches "SSE*":

  /* find the appropriate BS_Zuord if it exists */

  find BS_Zuord exclusive-lock where BS_Zuord.SMLeiste = "SE" and BS_Zuord.Owning_Obj = S_Artikel.S_Artikel_Obj no-error.

  /* if it does not already exist create it and initialize the key */

  if not available BS_Zuord then   
    do:
      create BS_Zuord.
      assign
        BS_Zuord.SMLeiste = "SE"
        BS_Zuord.Owning_Obj = S_Artikel.S_Artikel_Obj
      .
    end.

  /* set the property field */

  BS_Zuord.Property = "Size".

end.  /* end of loop */

(假设 BS_Zuord.SMLeiste 和 BS_Zuord.Owning_Obj 形成唯一键。)