我有一个主要目的围绕临时表的课程。我想创建一个构造函数,它将相同的临时表作为输入。
到目前为止,编译器会阻止任何尝试将临时表作为输入参数传递。如果我使用表句柄,它可以工作。但我宁愿不从动态表复制到静态表。
Progress希望表在编译时匹配,但我知道它们将是相同的 - 在.i文件中定义。
是否有一种简单的方法可以排列表格,或者我一次只能解析出一个字段?
答案 0 :(得分:0)
对我来说就像一个魅力。
CLASS Test.TTOO.TempTableWrapper:
{Test/TTOO/ttCustomer.i}
CONSTRUCTOR PUBLIC TempTableWrapper (TABLE ttCustomer):
FOR EACH ttCustomer:
DISPLAY ttCustomer.CustNum ttCustomer.Name .
END.
END CONSTRUCTOR.
END CLASS.
和来电者:
ROUTINE-LEVEL ON ERROR UNDO, THROW.
USING Test.TTOO.* FROM PROPATH.
DEFINE VARIABLE oWrapper AS TempTableWrapper NO-UNDO .
{Test/TTOO/ttCustomer.i}
/* *************************** Main Block *************************** */
CREATE ttCustomer.
ASSIGN ttCustomer.CustNum = 42
ttCustomer.Name = "It works" .
oWrapper = NEW TempTableWrapper(TABLE ttCustomer ) .
你也可以通过-ref:
传递temp-tableoWrapper = NEW TempTableWrapper(TABLE ttCustomer BY-REFERENCE) .
然而,临时表数据仅在构造函数期间可用,因为BY-REFERENCE调用"重叠"被调用者中的临时表仅用于该呼叫的持续时间。
对于永久" BY-REFERENCE",在调用和参数上使用BIND关键字 - 在这种情况下,被调用者必须将temp-table定义为REFERENCE-ONLY。
注意,不需要(尽管至少我建议)在include文件中定义临时表。在运行时和编译时,模式只需要匹配。
当编译器不喜欢你的调用时,删除类r代码并重新编译。