Filter 속성

레코드 집합의 데이터에 대한 필터를 나타냅니다.

설정 및 반환 값

다음 항목 중 하나를 포함할 수 있는 Variant 값을 설정하거나 반환합니다.

  • 조건 문자열:AND 또는 OR 연산자와 연결된 하나 이상의 개별 절로 구성된 문자열입니다.

  • 책갈피 배열:Recordset 개체의 레코드를 가리키는 고유한 책갈피 값의 배열입니다.

  • FilterGroupEnum 값.

설명

Filter 속성을 사용하여 Recordset 개체의 레코드를 선택적으로 차단합니다. 필터링된 레코드 집합이 현재 커서가 됩니다. 현재 커서를 기반으로 값을 반환하는 다른 속성(예: AbsolutePosition 속성(ADO), AbsolutePage 속성(ADO), RecordCount 속성(ADO)PageCount 속성(ADO))이 영향을 받습니다. Filter 속성을 특정 새 값으로 설정하면 현재 레코드가 새 값을 충족하는 첫 번째 레코드로 이동합니다.

조건 문자열은 FieldName-Operator-Value 형식(예: "LastName = 'Smith'")의 절로 구성됩니다. 개별 절을 AND(예: "LastName = 'Smith' AND FirstName = 'John'") 또는 OR(예: "LastName = 'Smith' OR LastName = 'Jones'")과 연결하여 복합 절을 만들 수 있습니다. 조건 문자열의 경우 다음 지침을 사용합니다.

  • FieldName레코드 집합의 유효한 필드 이름이어야 합니다. 필드 이름에 공백이 포함된 경우 이름을 대괄호로 묶어야 합니다.

  • 연산자는 <, >, <=, >=, <>, = 또는 LIKE 중 하나여야 합니다.

  • 값은 필드 값을 비교할 값입니다(예: 'Smith', #8/24/95#, 12.345 또는 $50.00). 문자열이 있는 작은따옴표와 날짜가 있는 파운드 기호(#)를 사용합니다. 숫자의 경우 소수점, 달러 기호 및 과학적 표기법을 사용할 수 있습니다. 연산자가 LIKE인 경우 값은 와일드카드를 사용할 수 있습니다. 별표(*) 및 백분율 기호(%) 와일드카드만 허용되며 문자열의 마지막 문자여야 합니다. 값은 Null일 수 없습니다.

참고

필터 값에 작은따옴표(')를 포함하려면 두 개의 작은따옴표를 사용하여 하나를 나타냅니다. 예를 들어 O'Malley를 필터링하려면 조건 문자열이 "col1 = 'O''Malley'"여야 합니다. 필터 값의 시작과 끝에 작은따옴표를 포함하려면 문자열을 파운드 기호(#)로 묶습니다. 예를 들어 '1'을 필터링하려면 조건 문자열이 "col1 = #'1'#"여야 합니다.

  • AND와 OR 사이에는 우선 순위가 없습니다. 절은 괄호 안에 그룹화할 수 있습니다. 그러나 다음 코드 조각과 같이 OR에 의해 조인된 절을 그룹화한 다음, AND를 사용하여 그룹을 다른 절에 조인할 수 없습니다.
    (LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

  • 대신 다음과 같이 이 필터를 구성합니다.
    (LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')

  • LIKE 절에서는 패턴의 시작과 끝에 와일드카드를 사용할 수 있습니다. 예를 들어 LastName Like '*mit*'을 사용할 수 있습니다. 또는 LIKE를 사용하면 패턴의 끝에만 와일드카드를 사용할 수 있습니다. LastName Like 'Smit*')을 입력합니다.

필터 상수는 예를 들어 마지막 UpdateBatch Method 메서드 호출 중에 영향을 받은 레코드만 볼 수 있으므로 일괄 업데이트 모드 중에 개별 레코드 충돌을 보다 쉽게 해결할 수 있도록 합니다.

기본 데이터와의 충돌로 인해 Filter 속성 자체 설정이 실패할 수 있습니다. 예를 들어 다른 사용자가 레코드를 이미 삭제한 경우 이 오류가 발생할 수 있습니다. 이 경우 공급자는 Errors Collection(ADO) 컬렉션에 경고를 반환하지만 프로그램 실행을 중단하지는 않습니다. 런타임 시 오류는 요청된 모든 레코드에 충돌이 있는 경우에만 발생합니다. Status 속성(ADO Recordset) 속성을 사용하여 충돌이 있는 레코드를 찾습니다.

Filter 속성을 길이가 0인 문자열("")로 설정하면 adFilterNone 상수 사용과 같은 효과가 있습니다.

Filter 속성이 설정될 때마다 현재 레코드 위치는 레코드 집합에서 필터링된 레코드 하위 집합의 첫 번째 레코드로 이동합니다. 마찬가지로 Filter 속성이 지워지면 현재 레코드 위치가 레코드 집합의 첫 번째 레코드로 이동합니다.

레코드 집합이 sql_variant 형식과 같은 일부 변형 형식의 필드를 기반으로 필터링된다고 가정합니다. 필드의 하위 형식과 조건 문자열에 사용된 필터 값이 일치하지 않으면 오류(DISP_E_TYPEMISMATCH 또는 80020005)가 발생합니다. 예를 들어 다음을 가정해 보세요.

  • Recordset 개체(rs)에는 sql_variant 형식의 열(C)이 포함됩니다.
  • 그리고 이 열의 필드에는 I4 형식 중 값 1이 할당되었습니다. 조건 문자열이 필드에서 rs.Filter = "C='A'"로 설정됩니다.

이 구성은 런타임 동안 오류를 생성합니다. 그러나 동일한 필드에 rs.Filter = "C=2"를 적용하면 오류가 발생하지 않습니다. 그리고 필드는 현재 레코드 집합에서 필터링됩니다.

Filter 속성과 함께 사용할 배열을 빌드할 수 있는 책갈피 값에 대한 설명은 Bookmark 속성(ADO) 속성을 참조하세요.

조건 문자열 형식의 필터만 지속형 레코드 집합의 내용에 영향을 줍니다. 조건 문자열의 예는 OrderDate > '12/31/1999'입니다. 책갈피 배열로 만들거나 FilterGroupEnum의 값을 사용하여 만든 필터는 지속형 레코드 집합의 내용에 영향을 주지 않습니다. 이러한 규칙은 클라이언트 쪽 또는 서버 쪽 커서를 사용하여 만든 레코드 집합에 적용됩니다.

참고

일괄 업데이트 모드에서 필터링되고 수정된 Recordset에 adFilterPendingRecords 플래그를 적용하면 필터링이 단일 키 테이블의 키 필드를 기반으로 하고 키 필드 값에 대한 수정된 경우 결과 레코드 집합이 비어 있습니다. 다음 명령문 중 하나가 true이면 결과 레코드 집합은 비어 있지 않습니다.

  • 필터링은 단일 키 테이블의 키가 아닌 필드를 기반으로 했습니다.

  • 필터링은 다중 키 테이블의 모든 필드를 기반으로 했습니다.

  • 단일 키 테이블의 키가 아닌 필드가 수정되었습니다.

  • 다중 키 테이블의 모든 필드가 수정되었습니다.

다음 표에서는 필터링 및 수정의 다양한 조합으로 adFilterPendingRecords 의 효과를 요약합니다. 왼쪽 열에는 가능한 수정 내용이 표시됩니다. 키가 없는 필드, 단일 키 테이블의 키 필드 또는 다중 키 테이블의 키 필드를 수정할 수 있습니다. 위쪽 행에는 필터링 기준이 표시됩니다. 필터링은 키가 없는 필드, 단일 키 테이블의 키 필드 또는 다중 키 테이블의 키 필드를 기반으로 할 수 있습니다. 교차하는 셀에 결과가 표시됩니다. + 더하기 기호는 adFilterPendingRecords를 적용하면 비어 있지 않은 레코드 집합이 생성됨을 의미합니다. - 빼기 기호는 빈 레코드 집합을 의미합니다.

조합 비키 단일 키 여러 키
비키 + + +
단일 키 + - 해당 없음
여러 키 + 해당 없음 +

적용 대상

레코드 집합 개체(ADO)

참고 항목

Filter 및 RecordCount 속성 예제(VB)Filter 및 RecordCount 속성 예제(VC++)Clear 메서드(ADO)Property-Dynamic 최적화(ADO)