다음을 통해 공유


OCCURS DEPENDING 절을 사용하여 가변 길이 테이블 정의

COBOL에서 구문에 따라 OCCURS를 사용하여 데이터 선언에서 가변 길이 테이블을 정의할 수 있습니다. 가변 길이 테이블의 스토리지는 길이 지정자 변수의 값에 따라 동적입니다. 전달된 데이터의 양도 길이 지정자 변수의 값에 따라 달라집니다. 지정된 요소의 수만 보내거나 받습니다. 가변 길이 테이블의 길이 지정자 변수는 숫자 형식이어야 하며 해당 방향은 제어하는 가변 길이 테이블의 방향과 일치해야 합니다.

COBOL을 TI(트랜잭션 통합자) 프로젝트로 가져오고 가변 길이 테이블을 레코드 집합으로 지정하면 가변 길이 테이블은 다른 매개 변수에 의해 크기가 제한된 배열 또는 레코드 집합 개체가 됩니다. 길이 지정자는 Automation 쪽에 매개 변수로 노출되며 매개 변수가 호스트 애플리케이션으로 전송될 때 올바르게 설정되어야 합니다.

메서드의 매개 변수가 배열의 길이 지정자임을 수동으로 나타내려면 먼저 길이 지정자 매개 변수를 정의한 다음 배열 또는 레코드 집합 매개 변수를 정의합니다.

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