使用 OCCURS DEPENDING 子句定義可變長度資料表
在 COBOL 中,您可以使用 OCCURS DEPENDING ON 語法在資料宣告中定義可變長度資料表。 可變長度資料表的儲存體是動態的,視長度規範變數中的值而定。 傳遞的資料量也取決於長度規範變數中的值:只會傳送或接收指定的元素數目。 可變長度資料表的長度規範變數必須是數數值型別,而且其方向必須符合它所控制之可變長度資料表的方向。
當您將 COBOL 匯入交易整合器 (TI) Project,並將可變長度資料表指定為記錄集時,可變長度資料表會自動成為陣列或記錄集物件,其大小受限於另一個參數。 長度規範會在自動化端公開為參數,而且必須在將參數傳送至主應用程式時正確設定。
若要手動指出方法中的參數是陣列的長度規範,請先定義長度規範參數,然後定義陣列或記錄集參數:
在要定義為 ODO 陣列的參數屬性類別中,使用 Designer 來選取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