Kori 4월 9일, 2022에 포스트됨 공유하기 4월 9일, 2022에 포스트됨 Docwiki에 있는 "Finding a Record (FireDAC)"을 번역한 글: 번역일: 2022년 4월 10일) 위로 가기: [DocWiki 번역] 데이터셋을 가지고 작업하기 (FireDAC) FireDAC에는 FireDAC 데이터셋 안에 있는 특정 레코드를 찾는 메소드가 몇가지 있다. 목차 1 일반 (General) 2 표준 찾기 (Standard Locating) 3 확장 찾기 (Extended Locating) 4 필터를 사용하여 찾기 (Locating Using a Filter) 5 인덱스와 키 값을 사용하여 찾기 (Locating Using an Index and a Key Value) 6 기타 옵션 (Other Options) 7 기타 자료 (See Also) 1 일반 (General) 모든 FireDAC 데이터셋에는 로컬 데이터셋 캐시(cache) 안에서 레코드를 찾는 방법이 있다. 현재 정렬에 의존하면 레코드 검색이 최적화될 수 있다. 2 표준 찾기 (Standard Locating) FireDAC 데이터셋에는 레코드를 찾아가기(locate) 또는 특정 키(key)에 해당하는 값(value)을 찾기(lookup)를 할 수 있는 옵션들이 있다. 이 메소드들은 호출이 적절하다면 데이터셋의 현재 인덱스(current dataset index)를 사용한다. Locate 메소드를 사용하면 특정 특정 키 값(key value)에 해당하는 레코드(record)를 찾을(find) 수 있다. FDQuery1.IndexFieldNames := 'ORDERID'; if FDQuery1.Locate('ORDERID', 10150, []) then ShowMessage('Order is found') else ShowMessage('Order is not found'); Lookup 메소드를 사용하면 특정 특정 키 값(key value)에 해당하는 값(value)를 찾을(lookup) 수 있다. 3 확장 찾기 (Extended Locating) FireDAC 데이터셋에는 레코드를 찾아갈 수 있는 메소드가 보다 확장된 것들이 몇가지 있다. LocateEx 메소드는 Locate 메소드와 유사하지만, 앞으로 검색, 뒤로 검색, 처음부터 검색, 특정 레코드에서부터 검색, 텍스트 서술(표현식)을 사용한 검색 등등 더 많은 옵션을 사용할 수 있다. 예를 들면, if FDQuery1.LocateEx('Price >= 1000 and Price <= 2000', []) then ShowMessage('Order is found') else ShowMessage('Order is not found'); LookupEx 메소드는 Lookup 메소드와 유사하지만, 위에 설명한 LocateEx 메소드처럼 더 많은 옵션들을 사용할 수 있다. 4 필터를 사용하여 찾기 (Locating Using a Filter) 이 레코드 찾기 방식은 BDE 컴포넌트들과 호환성을 유지하기 위해 FireDAC에 도입되었다. LocateEx 메소드로 이것을 완전히 대체할 수 있다. 이 방식에서는 다음과 같은 메소드들을 사용한다. FindFirst -- 텍스트 서술(표현식)을 충족하는 첫 레코드를 찾는다. FindNext -- 텍스트 서술(표현식)을 충족하는 현재 레코드 다음에 있는 충촉하는 레코드를 찾는다. FindPrior -- 텍스트 서술(표현식)을 충족하는 현재 레코드 이전에 있는 충촉하는 레코드를 찾는다. FindLast -- 텍스트 서술(표현식)을 충족하는 마지막 레코드를 찾는다. 이 방식으로 검색을 하려면, 애플리케이션은 먼저 Filter 프로퍼티 안에 불리언(boolean) 표현식으로 서술문을 작성하여 지정해야만 한다. 주의할 점은, 이 메소드는 필터링된 데이터셋 안에서는 레코드를 찾을 때 사용할 수 없다. 또한 필터는 활성화된(activated) 상태가 아니고 오직 레코드 찾기에만 사용되어야 한다. 예를 들면, FDQuery1.Filter := 'Price >= 1000 and Price <= 2000'; if FDQuery1.FindFirst then ShowMessage('Found !'); ... if FDQuery1.FindNext then ShowMessage('Found !'); 5 인덱스와 키 값을 사용하여 찾기 (Locating Using an Index and a Key Value) 레코드 찾기에 도움이 되는 이 방식은 BDE와 호환성을 유지하기 위해 FireDAC에 도입되었다. SetKey -- 데이터셋을 dsSetKey 모드로 지정한다, 그래서 인덱스 필드 값을 명시할 수 있도록 허용 한다. GotoKey -- 인덱스 필드 값을 사용하여 정확한 레코드를 검색한다. 인덱스 필드 값은 SetKey 메소드를 호출 한 다음에 명시해야 한다. GotoNearest -- 인덱스 필드 값을 사용하여 정확한 레코드 또는 다음 레코드를 검색한다. 인덱스 필드 값은 SetKey 메소드를 호출 한 다음에 명시해야 한다. FindKey -- 인덱스 필드 값 명시하여 정확한 레코드를 찾는다. FindNearest -- 인덱스 필드 값 명시하여 정확한 레코드 또는 다음 레코드를 찾는다. 이 메소드들을 호출하기 전에 반드시 현재 인덱스(current index)가 지정되어 있어야 한다. 예를 들면, FDQuery1.IndexFieldNames := 'ORDERID'; FDQuery1.SetKey; FDQuery1.FieldByName('ORDERID').AsInteger := 10150; if FDQuery1.GotoKey then ShowMessage('Order is found') else ShowMessage('Order is not found'); 6 기타 옵션 (Other Options) 검색 메소드 대부분은 레코드를 찾으면 True를 반환한다. 대안으로 데이터셋의 Found 프로퍼티를 통해서도 알 수 있다. 또한 FireDAC은 fkCalculated 또는 fkLookup 유형인 필드를 사용하여 찾기(locate)를 할 수 없다는 점을 유의하자. 대신 애플리케이션에서 fkInternalCalc와 fkAggregate 필드를 사용하여 찾기(locate)를 할 수 있다. 7 기타 자료 (See Also) 표현식 쓰기 레코드 정렬하기 레코드 필터링하기 계산된 필드와 집계된 필드 마스터-디테일 관계 (M/D) 테이블 조회하기 (FireDAC) 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.