这是一个多余的问题。 Progress 10.2B中是否有动态数组或列表?
示例:
我创建了一个名为“InventoryTransaction”的基类。我从Progress读取了一个MSSQL表,我想为找到的每个记录创建一个InventoryTransaction类的实例,然后将其添加到“list / array”中,以便稍后处理它们。
有类似MyArray的东西:Add(MyItem)会自动增加数组大小+1然后将MyItem的实例添加到数组中吗?
我发现函数EXTENT可以动态地为数组设置大小,但在读取MSSQL表中的所有事务之前我不知道计数。或者,我可以在读取所有事务之前执行“从MyTable中选择count(*)”以检索计数,然后对数组进行扩展。
谢谢! 星期五快乐! 的Sebastien
答案 0 :(得分:2)
您可以创建“不确定”数组。即。
define variable x as decimal extent no-undo.
不确定数组变量可以处于以下两种状态之一:固定或不固定,这意味着它具有固定维度或不具有固定维度。首次定义时,不确定的数组变量具有不固定的维度。您可以通过以下方法修复不确定数组变量的维度:
定义变量时初始化数组值
使用INITIAL选项
设置数组变量中的元素数
使用EXTENT语句
将确定数组分配给不确定数组,将其固定到确定数组的维度
将数组参数传递给过程,用户定义函数或基于类的方法,以便不确定数组变量是传递确定数组的目标,将不确定数组固定到确定数组
一旦修复,ABL将固定的不确定数组视为确定数组。
答案 1 :(得分:2)
我刚发现progress.lang.object:
FILE:array.p
/* declaration */
DEFINE TEMP-TABLE arrITem
FIELD Item AS CLASS PROGRESS.lang.OBJECT.
DEFINE VARIABLE oItem AS CLASS Item NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
/* create 10 products */
DO i = 1 TO 10:
CREATE arrItem.
arrItem.Item = NEW Item("Item_" + STRING(i), "Description_" + STRING(i)).
END.
/* display object information */
FOR EACH arrItem:
ASSIGN oItem = CAST(arrItem.Item,Item).
DISPLAY oItem:ItemNo.
END.
FILE:item.cls
CLASS Item:
DEFINE PUBLIC PROPERTY ItemNo AS CHARACTER
GET.
SET.
DEFINE PUBLIC PROPERTY DESCRIPTION AS CHARACTER
GET.
SET.
/* constructor */
CONSTRUCTOR PUBLIC Item():
END.
CONSTRUCTOR PUBLIC Item(
INPUT strItemNo AS CHARACTER
,INPUT strDescription AS CHARACTER
):
ASSIGN ItemNo = strItemNo.
ASSIGN DESCRIPTION = strDescription.
END.
END CLASS.
谢谢! 的Sebastien
答案 2 :(得分:0)
简短的回答是 - 不,10.2B AVM不允许您动态调整阵列大小。
答案很长,你可以(a)将对象添加到链接的对象列表中,或者(b)创建一个带有Progress.Lang.Object字段的临时表,为每个对象实例创建一个新的TT记录想要跟踪,并将对象的指针分配给TT的PLO字段。