레코드 집합 개체(ADO)
기본 테이블의 전체 레코드 집합 또는 실행된 명령의 결과를 나타냅니다. Recordset 개체는 항상 집합 내의 단일 레코드만 현재 레코드로 참조합니다.
설명
Recordset 개체를 사용하여 공급자의 데이터를 조작합니다. ADO를 사용하는 경우 거의 전적으로 Recordset 개체를 사용하여 데이터를 조작합니다. 모든 Recordset 개체는 레코드(행) 및 필드(열)로 구성됩니다. 공급자가 지원하는 기능에 따라 일부 Recordset 메서드 또는 속성을 사용할 수 없을 수 있습니다.
ADODB.Recordset은 Recordset 개체를 만드는 데 사용해야 하는 ProgID입니다. 오래된 ADOR.Recordset ProgID를 참조하는 기존 애플리케이션은 다시 컴파일하지 않아도 계속 작동하지만 새 개발은 ADODB.Recordset를 참조해야 합니다.
ADO에는 다음 네 가지 커서 형식이 정의되어 있습니다.
동적 커서 다른 사용자에 의한 추가, 변경 및 삭제를 볼 수 있습니다. 책갈피를 사용하지 않는 레코드 집합에서 모든 유형의 이동을 허용합니다. 공급자가 지원하는 경우 책갈피를 허용합니다.
키 집합 커서 동적 커서처럼 동작합니다. 단, 다른 사용자가 추가하는 레코드를 볼 수 없으며 다른 사용자가 삭제하는 레코드에 대한 액세스를 차단합니다. 다른 사용자에 의한 데이터 변경 내용은 계속 표시됩니다. 항상 책갈피를 지원하므로 레코드 집합에서 모든 유형의 이동을 허용합니다.
정적 커서 데이터를 찾거나 보고서를 생성하는 데 사용할 레코드 집합의 정적 복사본을 제공합니다. 항상 책갈피를 허용하므로 레코드 집합에서 모든 유형의 이동을 허용합니다. 다른 사용자에 의한 추가, 변경 또는 삭제는 표시되지 않습니다. 클라이언트 쪽 Recordset 개체를 열 때 허용되는 유일한 커서 유형입니다.
정방향 전용 커서레코드 집합에서 앞으로만 스크롤할 수 있습니다. 다른 사용자에 의한 추가, 변경 또는 삭제는 표시되지 않습니다. 그러므로 레코드 집합을 한 번만 통과해야 하는 상황에서 성능이 향상됩니다.
레코드 집합을 열기 전에 CursorType 속성을 설정하여 커서 유형을 선택하거나 Open 메서드를 사용하여 CursorType 인수를 전달합니다. 일부 공급자는 일부 커서 형식을 지원하지 않습니다. 공급자 설명서를 확인세요. 커서 유형을 지정하지 않으면 ADO는 기본적으로 정방향 전용 커서를 엽니다.
CursorLocation 속성을 adUseClient로 설정하여 레코드 집합을 열면 반환된 Recordset 개체에서 Field 개체의 UnderlyingValue 속성을 사용할 수 없습니다. 일부 공급자와 함께 사용할 경우(예: OLE DB용 Microsoft ODBC 공급자를 Microsoft SQL Server와 함께 사용) Open 메서드를 사용하여 연결 문자열을 전달하여 이전에 정의한 Connection 개체와 독립적으로 Recordset 개체를 만들 수 있습니다. ADO는 여전히 Connection 개체를 만들지만 해당 개체를 개체 변수에 할당하지는 않습니다. 그러나 동일한 연결에서 여러 Recordset 개체를 여는 경우 Connection 개체를 명시적으로 만들고 열어야 합니다. 그러면 Connection 개체가 개체 변수에 할당됩니다. Recordset 개체를 열 때 이 개체 변수를 사용하지 않는 경우, 동일한 연결 문자열을 전달하더라도 ADO는 새 레코드 집합 각각에 대해 새 Connection 개체를 만듭니다.
필요한 만큼 Recordset 개체를 만들 수 있습니다.
레코드 집합을 열면 현재 레코드가 첫 번째 레코드(있는 경우)에 배치되고 BOF 및 EOF 속성이 False로 설정됩니다. 레코드가 없는 경우 BOF 및 EOF 속성 설정은 True입니다.
공급자가 관련 기능을 지원한다고 가정하면, MoveFirst, MoveLast, MoveNext 및 MovePrevious 메서드, Move 메서드 및 AbsolutePosition, AbsolutePage 및 Filter 속성을 사용하여 현재 레코드의 위치를 변경할 수 있습니다. 정방향 전용 Recordset 개체는 MoveNext 메서드만 지원합니다. Move 메서드를 사용하여 각 레코드를 방문(또는 레코드 집합을 열거)하는 경우 BOF 및 EOF 속성을 사용하여 레코드 집합의 시작 또는 끝을 넘어 이동했는지 확인할 수 있습니다.
Recordset 개체의 기능을 사용하기 전에 개체에서 Supports 메서드를 호출하여 기능이 지원되는지 또는 사용할 수 있는지 확인해야 합니다. Supports 메서드가 false를 반환하는 경우 이 기능을 사용하면 안 됩니다. 예를 들어 Recordset.Supports(adMovePrevious)
가 True를 반환하는 경우에만 MovePrevious 메서드를 사용할 수 있습니다. 그렇지 않으면 Recordset 개체가 닫혀 있어 인스턴스에서 이 기능을 사용하지 못할 수 있으므로 오류가 발생합니다. 관심 있는 기능이 지원되지 않는 경우에도 Supports가 false를 반환합니다. 이 경우 Recordset 개체에서 해당 속성 또는 메서드를 호출하지 않아야 합니다.
Recordset 개체는 즉시 업데이트 및 일괄 업데이트의 두 가지 업데이트 유형을 지원할 수 있습니다. 즉시 업데이트에서는 Update 메서드를 호출하면 모든 데이터 변경 내용이 기본 데이터 원본에 즉시 기록됩니다. AddNew 및 Update 메서드를 사용하여 값 배열을 매개 변수로 전달하고 레코드의 여러 필드를 동시에 업데이트할 수도 있습니다.
공급자가 일괄 업데이트를 지원하는 경우 공급자가 둘 이상의 레코드에 대한 변경 내용을 캐시하도록 한 다음 UpdateBatch 메서드를 사용하여 데이터베이스에 단일 호출로 전송할 수 있습니다. 이는 AddNew, Update 및 Delete 메서드를 사용하여 변경한 내용에 적용됩니다. UpdateBatch 메서드를 호출한 후 Status 속성을 사용하여 데이터 충돌을 확인하고 해결할 수 있습니다.
참고
Command 개체를 사용하지 않고 쿼리를 실행하려면 쿼리 문자열을 Recordset 개체의 Open 메서드에 전달합니다. 그러나 명령 텍스트를 유지하거나, 다시 실행하거나, 쿼리 매개 변수를 사용하려는 경우 Command 개체가 필요합니다.
Mode 속성은 액세스 권한을 제어합니다.
Fields 컬렉션은 Recordset 개체의 기본 멤버입니다. 따라서 다음 두 코드 문은 동일합니다.
Debug.Print objRs.Fields.Item(0) ' Both statements print
Debug.Print objRs(0) ' the Value of Item(0).
Recordset 개체가 프로세스 간에 전달되면 행 집합 값만 마샬링되고 Recordset 개체의 속성은 무시됩니다. 역 마샬링하는 동안 행 집합은 새로 만든 Recordset 개체로 압축이 풀립니다. 또한 이 개체는 자신의 속성을 기본값으로 설정합니다.
Recordset 개체는 스크립팅에 안전합니다.
이 섹션에서는 다음 항목을 다룹니다.