PRB: 오류 3001 비교 같이 필드 레코드 필터링 조건

기술 자료 번역 기술 자료 번역
기술 자료: 216873 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

현상

두 필드에서 ADO Filter 속성 조건 문자열 비교하는 (예를: 조건 문자열의 절을 형식으로 구성됩니다: FieldName 연산자 FieldName) 다음 오류가 발생하는 경우를 보여 줍니다.
런타임 오류 '3001':
응용 프로그램이 잘못된 형식의 허용되는 범위를 벗어났습니다 있거나 서로 충돌하는 인수를 사용하고 있습니다.

원인

현재 버전의 ADO이 이 기능을 수행할 수 없습니다. ADO Filter 속성 조건 구문은 다음과 같이 정의됩니다.
"FieldName 연산자 'Literal_Value'"
'Literal_Value' 데이터 형식은 문자열, 숫자 또는 날짜 수 있습니다. 앞의 식을 두 필드를 비교할 수 없습니다. 이렇게 하면 3001 오류가 발생합니다.

해결 방법

한 가지 해결 방법은 필터 조건으로 부울 연산자로 조인된 여러 식이 있어야 합니다. 이 경우 경우에만 사용할 수 있는 비교 필드 값의 개발자에게 알려져 있습니다. 이 방법은 개발자가 필요한 결과를 만족하는지 조건 문자열에 대한 수식이 제안하는 수 있습니다. 예를 들면:
rs.Filter = "Field1 Operator1 'Value1' AND Field2 Operator2 'Value2'"
				

다음 개발자가 Field1, Field2 값을 인식하지 못하므로 경우 개발자가 사용자 지정 필터 루틴을 클라이언트 응용 프로그램) 내에서 또는 저장된 프로시저를 서버 쪽의 기능을 동적으로 수행할 수 있습니다. 제어 흐름문을 필요한 필드 비교를 수행하고 예상되는 결과를 생성하는 사용자 지정 필터 루틴을 또는 저장된 프로시저 내에서 사용할 수 있습니다.

이 문서에서는 이 문서의 "추가 정보" 섹션에 이러한 루틴에 대한 데모를 제공합니다.

경고: 추가 정보 절에 나와 있는 해결 방법은 경우에만 그림은 목적으로 제한되지 않은 묵시적인, 어떠한 보증 없이 상품성 및 특정 목적에의 적합성에 대한 묵시적된 보증은 지정됩니다.

현재 상태

Microsoft 문제는 이 문서의 시작 부분에 나열한 제품에서 문제를 확인했습니다.

추가 정보

ADO 도움말 설명서를 필터 메서드는 조건 식--설명 아래에 다음 상태:

조건 문자열의 절을 양식 FieldName - 운영자 - 값 구성됩니다 (예를 들어, "LastName = '박찬식'"). 개별 절을 함께 연결하여 복합 절을 만들 수 있습니다 AND (예를 들어, "성 '박찬식' AND 이름 = 'John' =") 또는 OR (예를 들어, "LastName = '박찬식' OR 성 'Jones' =").

이를 위한 조건 값 다음 지침을 또한 상태:

값이 있는 필드의 값을 비교합니다 (예를 들어, '박찬식', # 8/24/95 #, 12.345 또는 $ 50.00). 문자열 및 날짜와 함께 파운드 기호 (#) 작은따옴표를 사용하십시오. 번호, 소수점, 달러 기호 및 지수 표시법을 사용할 수 있습니다. 와일드카드를 사용할 수 있는 값 LIKE 연산자 경우. 별표 경우에만 별표(*) 및 백분율 (%) 서명할 와일드카드가 허용되고 문자열의 마지막 문자가 있어야 합니다. 값은 Null일 수 없습니다.
문제를 재현하기 위한 단계
===========================

  1. 새 Visual Basic 프로젝트를 시작하십시오. 기본적으로 Form1이 만들어집니다.
  2. 프로젝트 참조 Microsoft ActiveX 데이터 개체 2.x 라이브러리에 설정하십시오.
  3. 폼에서 명령 단추를 삽입하십시오. Command1 기본적으로 만들어집니다.
  4. Form1의 일반 선언 구역에 다음 코드를 삽입하십시오.
   Option Explicit
   Dim cn As New ADODB.Connection
   Dim rs As New ADODB.Recordset

   Private Sub Command1_Click()
       cn.Open "provider=SQLOLEDB;Data Source=<your data source>;User ID=<uid>;" _ 
    "password=;Initial Catalog=pubs;"
       On Error Resume Next
       cn.Execute "drop table tblFilterTest"
       On Error GoTo errh
       ' Create the test table
       cn.Execute "create table tblFilterTest(ID int primary key, Field1  
    varchar(20), Field2 varchar(20))"
       ' Open ADO recordset
       rs.Open "select * from tblFilterTest", cn, adOpenKeyset, 
    adLockOptimistic
       ' Add first record
       rs.AddNew
       rs("ID") = 1
       rs("Field1") = "A"
       rs("Field2") = "B"
       rs.Update
       rs.Requery
   
       ' Add 2nd record
       rs.AddNew
       rs("ID") = 2
       rs("Field1") = "D"
       rs("Field2") = "C"
       rs.Update
       rs.Requery
    
       ' Print original recordset
       Debug.Print "Original Recordset:"
       Debug.Print "====================="

       While Not rs.EOF
            Debug.Print rs("Field1") & vbTab & rs("Field2") 
             rs.MoveNext
       Wend

       rs.MoveFirst

       ' You get error 3001 on the following line
       rs.Filter = " Field1 > Field2 "

       ' To demonstrate the workaround, comment the preceding line and
       ' uncomment the following line:

       ' Call Filter
       Exit Sub

   errh:
       Debug.Print "Error Number:", Err.Number
       Debug.Print "Error Source:", Err.Source
       Debug.Print "Error Description:", Err.Description
   End Sub

   Private Sub Filter()
       Debug.Print "Filtered Recordset: "
       Debug.Print "====================="
    
       While Not rs.EOF
         If rs("Field1") > rs("Field2") Then
             Debug.Print rs("Field1") & vbTab & rs("Field2") 
         End If
         rs.MoveNext
       Wend
   End Sub
				
F5 키를 눌러 프로젝트를 실행하고 오류 3001 발생합니다.

참조

자세한 내용은 ADO 도움말 설명서를 참조하십시오.
자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
195222PRB: ADO 메서드 전용 Supports 1 조건 찾기

속성

기술 자료: 216873 - 마지막 검토: 2001년 8월 24일 금요일 - 수정: 1.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.01
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.1 서비스 팩 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
키워드:?
kbmt kbcode kbdatabase kbfix kbprb KB216873 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com