在 COBOL 中,可以使用 OCCURS DEPENDING ON 语法在数据声明中定义可变长度表。 可变长度表的存储是动态的,具体取决于长度说明符变量中的值。 传递的数据量也取决于长度说明符变量中的值:只发送或接收指定的元素数。 可变长度表的长度说明符变量必须是数值类型,其方向必须与它控制的可变长度表的方向匹配。
将 COBOL 导入事务集成器 (TI) 项目并将可变长度表指定为记录集时,可变长度表将自动成为其他参数限制其大小的数组或记录集对象。 长度说明符作为参数在自动化端公开,在将参数发送到主机应用程序时必须正确设置。
若要手动指示方法中的参数是数组的长度说明符,请先定义长度说明符参数,然后定义数组或记录集参数:
在要定义为 ODO 数组的参数属性类中,使用设计器选择 Is Array 属性。 选择 IsArray 后,数组维度 和 依赖于 属性变得可用。 使用 Array Dimensions 属性定义数组的维度。 将 ODO 索引分配给定义为 ODO 数组的参数。 通过展开属性“取决于”来选择索引。
还可以手动指示方法中的参数是记录集参数的长度说明符。
遵循前面定义的相同步骤;但是,将参数的数据类型从简单数据类型更改为记录集。
以下 COBOL 代码显示了可变长度表:
01 CUSTOMER-DATA.
05 CUSTOMER-NUMBER PIC 9(9).
05 LAST-NAME PIC X(20).
05 FIRST-NAME PIC X(20).
05 INVOICE-COUNT PIC 9(7) COMP-3.
05 INVOICES OCCURS 50 TIMES DEPENDING ON INVOICE-COUNT.
10 INVOICE-NUMBER PIC 9(10).
10 INVOICE-DATE PIC 9(7) COMP-3.
10 INVOICE-AMOUNT PIC S9(13)V9(2) COMP-3.
10 INVOICE-DESCRIPTION PIC X(40).
下面是导入上一个 COBOL 时创建的方法:
SendInvoices(lCustomerNo As Long, strLastName As String, strFirstName As String _
, lcInvoices As Long) As Object
下面是调用导入方法的® Microsoft Visual Basic® 代码的示例:
Dim objCustomer As Object 'Uses late binding
Dim objInvoices As ADODB.Recordset
Dim lCustomerNumber As Long
Dim iRow As Integer
Dim iCol As Integer
Dim strLastName As String
Dim strFirstName As String
'create an instance of the invoicing object
On Error GoTo ErrorHandler1
Set objCustomer = CreateObject("Customer.Invoicing.1")
lCustomerNumber = CLng(txtCustomerNumber)
'invoke the GetInvoices method
On Error GoTo ErrorHandler2
Set objInvoices = objCustomer.GetInvoices(lCustomerNumber _
, strLastName, strFirstName)
'
' Transfer the Recordset data to a variant array in a single operation.
' This is efficient, but may not be suitable for larger Recordsets.
'
Dim Data As Variant
Data = objInvoices.GetRows
grdInvoices.Rows = UBound(Data, 2) + 1
grdInvoices.Cols = UBound(Data, 1) + 1