데이터 세트를 운영할 때 데이터를 필터링해야 하는 경우가 많습니다. 예를 들어 Customer라는 데이터 테이블에는 CustNo, CustName, Country, Address, Phone, State, TaxRate 및 기타 필드가 있습니다. 중국의 고객 레코드 또는 고객 번호가 1000보다 큰 경우 데이터 세트를 필터링해야 합니다. 요약하면 다음과 같은 필터링 방법이 있습니다.
1. TTable 및 TQuery의 필터 속성 사용
1. 디자인 타임에 필터 속성을 설정합니다.
예를 들어 필터를 Country='China'로 설정한 다음 필터링됨 속성을 True로 변경합니다(필터링은 필터링이 True인 경우에만 유효합니다). 그러면 해당 국가 필드 내용이 '중국'인 레코드만 볼 수 있습니다.
필터 설정 시 사용할 수 있는 연산자는 <, >, <=, >=, =, <>, AND, OR, NOT입니다.
예를 들어 필터를 CustNo>=1000andCustNo<=5000으로 설정하면 고객 번호가 1000에서 5000 사이인 고객 레코드만 볼 수 있습니다.
2. 프로그램 실행 중 동적 필터링
프로그램이 실행되는 동안 필터 속성을 변경하려면 다음 두 가지 상황이 포함됩니다.
(1) 연산자의 오른쪽은 상수입니다. 예: Table1Filter:=′State′+′=′+′′′HI′′′;
참고: 문자열 상수는 세 쌍의 작은따옴표로 묶어야 합니다.
(2) 연산자의 우변은 상수가 아니고, 변수에서 지정한 값일 수도 있고, 입력란에서 지정한 값일 수도 있습니다. 이때 Format 기능을 이용해야 합니다. 코드 형식은 다음과 같습니다. Table1Filter:=Format(′State′+′=′+′′′%S′′′,[StateValue]); 여기서 StateValue는 값이 할당된 문자열 변수이며 다음과 같습니다. 다른 형식으로도 가능합니다(예:Edit1Text).
2. ApplyRange를 사용하여 데이터 세트의 레코드를 필터링합니다.
다음 코드를 실행하면 고객 번호가 1000~5000 사이인 고객 기록만 볼 수 있습니다. 이 루틴을 구성하는 여러 프로세스는 다음과 같습니다.
ApplyRange,SetRangeStart,SetRangeEnd.
Table1SetRangeStart;
테이블1['CustNo']:=1000;
Table1SetRangeEnd;
테이블1['CustNo']:=5000;
표1적용범위;
참고: 이 프로세스는 색인이 생성된 필드에서만 작동합니다. 색인화되지 않은 필드를 기준으로 필터링하려면 약간의 트릭을 사용하는 것이 좋습니다. 즉, 가짜 색인을 생성하는 것입니다. 구현 방법은 다음과 같습니다. Table1.IndexFieldNames:=필드 이름; Delphi는 SetRangeStart, SetRangeEnd 및 ApplyRange를 호출하는 간단한 방법도 제공합니다. 예: Table1.SetRange([Edit1.Text],[Edit2.Text]);
3. OnFilterRecord 이벤트를 사용하여 필터링합니다. OnFilterRecord 이벤트를 사용하면 키가 없는 필드를 기반으로 필터링 프로그램을 만들 수 있습니다. 예:
PRocedureTForm1.Table1FilterRecord(DataSet:TDataSet;varAccept:Boolean);
시작하다
수락:=DataSet[′State′]=′CA′;
끝;
4. TQuery 컨트롤을 사용한 SQL 문
1.SQL 문에는 변수와 매개변수가 포함되어 있지 않습니다.
고객으로부터*선택
WhereCustNo>=1000andCustNo<=5000
2. SQL 문에는 매개변수가 포함됩니다.
고객으로부터*선택
WhereCustNo>=:CustNo
CustNo 매개변수에는 런타임 중에 값이 할당됩니다.
3. SQL 문에는 변수가 포함되어 있습니다.
이때 TQuery 컨트롤에 SQL 문을 추가하는 코드는 다음과 같이 작성해야 합니다.
쿼리1.닫기;
쿼리1.SQL.지우기;
Query1.SQL.Add(Format(′Select*fromCustomer′+′′+′whereState=′+′′′%S′′′,[StateValue]));
Query1.Open; 위의 네 가지 방법 중 네 번째 방법이 가장 강력하고 사용하기 가장 유연합니다.