현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

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

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

216873
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.
현상
두 필드에서 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 조건 찾기

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 216873 - 마지막 검토: 08/24/2001 08:40:00 - 수정: 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
피드백
pe"> El Salvador - Español
Panamá - Español
Uruguay - Español
대한민국 - 한국어
España - Español
Paraguay - Español
Venezuela - Español
>