다음을 통해 공유


Fields 컬렉션

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

Fields 컬렉션에는 레코드 집합의 모든 필드(열)에 대한 Field 개체가 포함됩니다. 모든 ADO 컬렉션과 마찬가지로 CountItem 속성뿐만 아니라 AppendRefresh 메서드도 있습니다. 다른 ADO 컬렉션에서는 사용할 수 없는 CancelUpdate, Delete, Resync, Update 메서드도 있습니다.

필드 컬렉션 검사

이 섹션에 소개된 샘플 레코드 집합Fields 컬렉션을 고려합니다. 샘플 레코드 집합은 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 속성 값을 반환합니다. Field 속성을 더 많이 사용하여 필드에 대한 정보를 가져올 수 있습니다. Field를 쿼리하는 방법에 대한 자세한 내용은 Field 개체를 참조하세요.

열 계산

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

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

필드로 가져오기

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

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

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

Refresh 메서드 사용

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

레코드 집합에 필드 추가

Append 메서드는 레코드 집합에 필드를 추가하는 데 사용됩니다.

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

개발자는 일부 데이터를 일시적으로 저장할 장소가 필요한 경우도 있고 일부 데이터가 서버에서 온 것처럼 행동하여 사용자 인터페이스에서 데이터 바인딩에 참여하려는 경우도 있습니다. ADO(OLE DB용 Microsoft 커서 서비스와 함께)를 사용하면 개발자가 열 정보를 지정하고 Open을 호출하여 빈 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 개체에 대한 자세한 내용은 레코드 및 스트림을 참조하세요.

참고 항목

계층적 레코드 집합 작성