다음을 통해 공유


필드 컬렉션

Fields 컬렉션은 ADO의 내장 컬렉션 중 하나입니다. 컬렉션은 단위라고 할 수 있는 정렬된 항목 집합입니다. ADO 컬렉션에 대한 자세한 내용은 ADO 개체 모델 참조하세요.

Fields 컬렉션에는 Recordset모든 필드(열)에 대한 Field 개체가 포함되어 있습니다. 모든 ADO 컬렉션과 마찬가지로 CountItem 속성이 있으며, AppendRefresh 메서드를 사용할 수 있습니다. 다른 ADO 컬렉션에서는 사용할 수 없는 CancelUpdate, Delete, ResyncUpdate 메서드가 있습니다.

필드 컬렉션 살펴보기

이 섹션에서 소개된 샘플 RecordsetFields 컬렉션을 고려하십시오. 샘플 Recordset SQL 문에서 파생되었습니다.

SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = 7  

따라서 Recordset Fields 컬렉션에는 세 개의 필드가 포함되어 있습니다.

'BeginWalkFields  
    Dim objFields As ADODB.Fields  
    Dim intLoop As Integer  
  
    objRs.Open strSQL, strConnStr, adOpenForwardOnly, adLockReadOnly, adCmdText  
  
    Set objFields = objRs.Fields  
  
    For intLoop = 0 To (objFields.Count - 1)  
        Debug.Print objFields.Item(intLoop).Name  
    Next  
'EndWalkFields  

이 코드는 Count 속성을 사용하여 Fields 컬렉션의 Field 개체 수를 결정하고 컬렉션을 반복하여 각 Field 개체의 Name 속성 값을 반환합니다. 더 많은 필드 속성을 사용하여 필드에 대한 정보를 가져올 수 있습니다. 필드를 쿼리하는 방법에 대한 자세한 내용은 필드 개체를 참조하세요.

열 계산

예상한 대로 Count 속성은 Fields 컬렉션에 있는 실제 Field 개체 수를 반환합니다. 컬렉션 멤버에 대한 번호 매기기 시작은 0부터 시작하므로 항상 0 멤버로 시작하고 Count 속성 값에서 1을 뺀 값으로 끝나는 루프를 코딩해야 합니다. Microsoft Visual Basic을 사용 중이며 Count 속성을 확인하지 않고 컬렉션의 멤버를 반복하려면 For Each...Next 명령을 사용하세요.

Count 속성이 0이면 컬렉션에 개체가 없습니다.

필드에 도착하기

ADO 컬렉션과 마찬가지로 Item 속성은 컬렉션의 기본 속성입니다. 전달된 이름 또는 인덱스로 지정된 개별 Field 개체를 반환합니다. 따라서 샘플 Recordset에 대해 다음 문장은 동일합니다.

objField = objRecordset.Fields.Item("ProductID")  
objField = objRecordset.Fields("ProductID")  
objField = objRecordset.Fields.Item(0)  
objField = objRecordset.Fields(0)  

이러한 메서드가 동일한 경우 가장 좋은 방법은 무엇인가요? 그것은 사정 나름이에요. 인덱스를 사용하여 컬렉션에서 필드 검색하는 것은 문자열 조회를 수행할 필요 없이 필드 직접 액세스하기 때문에 더 빠릅니다. 반면에 컬렉션 내의 Fields 순서를 알고 있어야 하며 순서가 변경되면 필드의 인덱스에 대한 참조는 어디에서나 변경되어야 합니다. 약간 느리지만 컬렉션의 Fields 순서에 따라 달라지지 않으므로 필드 이름을 사용하는 것이 더 유연합니다.

Refresh 메서드 사용

다른 ADO 컬렉션과 달리 Fields 컬렉션에서 Refresh 메서드를 사용하면 표시되지 않습니다. 기본 데이터베이스 구조에서 변경 내용을 검색하려면 Requery 메서드를 사용하거나 Recordset 개체가 책갈피를 지원하지 않는 경우 MoveFirst 메서드를 사용해야 합니다. 그러면 명령이 공급자에 대해 다시 실행됩니다.

레코드 집합에 필드 추가

추가 메서드는 Recordset필드를 추가하는 데 사용됩니다.

Append 메서드를 사용하여 데이터 원본에 대한 연결을 열지 않고 프로그래밍 방식으로 Recordset 만들 수 있습니다. 열려 있는 RecordsetFields 컬렉션이나, ActiveConnection 속성이 설정된 Recordset에서 Append 메서드가 호출되면 런타임 오류가 발생합니다. 열려 있지 않고 아직 데이터 원본에 연결되지 않은 Recordset 필드만 추가할 수 있습니다. 그러나 새로 추가된 필드값을 지정하려면 먼저 레코드 집합 열어야 합니다.

개발자는 일부 데이터를 일시적으로 저장할 장소가 필요하거나 일부 데이터가 사용자 인터페이스의 데이터 바인딩에 참여할 수 있도록 서버에서 온 것처럼 작동하도록 합니다. ADO(Microsoft Cursor Service for OLE DB와 함께)를 사용하면 개발자가 열 정보를 지정하고 Open호출하여 빈 Recordset 개체를 빌드할 수 있습니다. 다음 예제에서는 새 Recordset 개체에 세 개의 새 필드가 추가됩니다. 그런 다음 Recordset 열리고, 두 개의 새 레코드가 추가되고, 레코드 집합 파일에 유지됩니다. (Recordset 지속성에 대한 자세한 내용은 데이터 업데이트 및 지속참조하세요.)

'BeginFabricate  
    Dim objRs As ADODB.Recordset  
    Set objRs = New ADODB.Recordset  
  
    With objRs.Fields  
        .Append "StudentID", adChar, 11, adFldUpdatable  
        .Append "FullName", adVarChar, 50, adFldUpdatable  
        .Append "PhoneNmbr", adVarChar, 20, adFldUpdatable  
    End With  
  
    With objRs  
        .Open  
  
        .AddNew  
        .Fields(0) = "123-45-6789"  
        .Fields(1) = "John Doe"  
        .Fields(2) = "(425) 555-5555"  
        .Update  
  
        .AddNew  
        .Fields(0) = "123-45-6780"  
        .Fields(1) = "Jane Doe"  
        .Fields(2) = "(615) 555-1212"  
        .Update  
    End With  
  
    objRs.Save App.Path & "FabriTest.adtg", adPersistADTG  
  
    objRs.Close  
'EndFabricate  

Fields Append 메서드의 사용은 Recordset 개체와 Record 개체 간에 다릅니다. Record 개체에 대한 자세한 내용은 레코드 및 스트림참조하세요.

참고 항목

계층적 레코드 집합 만들기