Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

[DocWiki 번역] 레코드 찾기 (FireDAC)


Recommended Posts

Docwiki에 있는 "Finding a Record (FireDAC)"을 번역한 글: 번역일: 2022년 4월 10일)

위로 가기: [DocWiki 번역] 데이터셋을 가지고 작업하기 (FireDAC)

FireDAC에는 FireDAC 데이터셋 안에 있는 특정 레코드를 찾는 메소드가 몇가지 있다.

목차


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)

 

이 댓글 링크
다른 사이트에 공유하기

  • Kori changed the title to [DocWiki 번역] 레코드 찾기 (FireDAC)

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.