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 形成唯一键。)
我需要向我的数据库中插入新行。
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 形成唯一键。)