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

[DocWiki 번역] 레코드 정렬하기 (FireDAC)


Recommended Posts

Docwiki에 있는 "Sorting Records (FireDAC)"을 번역한 글: 번역일: 2022년 4월 9일)

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

목차


 

1 일반 (General)

모든 FireDAC 데이터셋은 로컬에서 레코드를 정렬할 수 있다. FireDAC은 레코드를 정렬하기 전에 결과 세트 (result set)에 있는 모든 레코드를 담아와서 내부적으로 정렬된 레코드 목록을 구축하고 유지한다. 따라서, 레코드 용량이 많을 경우, 정렬하는 데 시간이 오래 걸릴 수 있지만, 그 이후 레코드 탐색(navigation)은 정렬을 하지 않는 것과 동일하게 빠르다.

 

2 표준 정렬 (Standard Sorting)

데이터셋을 필드 값으로 정렬하려면, 애플리케이션은  IndexFieldNames 프로퍼티를 사용해야 한다. 이 프로퍼티는 필드 여러개, 대소문자 구분안함, 내림차순 모드 등을 지원한다. 또한 FormatOptions.SortOptions를 사용하여 정렬 순서 프로퍼티를 변경할 수 있다. 예를 들면,

FDQuery1.IndexFieldNames := 'ORDERID';

또는 

FDQuery1.IndexFieldNames := 'OrderDate:D;Price';

대안으로, 데이터셋에 있는 Indexes  컬렉션에 인덱스가 정의되어 있다면, 정의된 인덱스들 중에서 하나를 선택할 수도 있다. 그렇게 하려면,  IndexName 프로퍼티를 사용한다. 예를 들면,

with FDQuery1.Indexes.Add do begin
  Name := 'By OrderDate';
  Fields := 'OrderDate';
  Active := True;
end;
FDQuery1.IndexName := 'By OrderDate';

 

3 데이터셋 뷰 (Dataset Views)

FireDAC에서는 Indexes  컬렉션을 사용하여 데이터셋 레코드의 뷰(view)를 정의할 수 있다. TFDIndex의 아래 프로퍼티 들이 뷰를 제어한다.

뷰는  Name 프로퍼티에 의해 식별된다. 이 값은 데이터셋에서 반드시 고유해야 한다.

뷰는 애플리케이션이 레코드를 담아오거나 편집할 때 FireDAC에서 관리하는 레코드 목록이다. 뷰는  Active 프로퍼티와 IndexesActive 프로퍼티가 모두 True일 때 유지된다. 뷰의 Options 안에 soUnique 또는 soPrimary 프로퍼티가 들어 있고 애플리케이션이 레코드의 유일성을 강제해야할 필요가 있으면, 데이터셋의 ConstraintsEnabled 프로퍼티를 True로 지정한다.

뷰를 선택하면, 데이터셋은 이 뷰에서 유지되는 레코드 목록을 나타낸다. 뷰를 선택하려면, 뷰의 Selected 프로퍼티를 True로 지정하거나 또는  데이터셋의  IndexName 프로퍼티에 뷰 이름(name)을 지정한다. 예를 들면,

with FDQuery1.Indexes.Add do begin
  Name := 'May sale dates';
  Fields := 'OrderDate';
  Filter := 'MONTH(OrderDate) = 5';
  Distinct := True;
  Active := True;
  Selected := True;
end;

 

4 기타 옵션 (Other Options)

Locate / Lookup / SetRange 등 일부 탐색(navigation) 메소드는 현재 정렬 순서를 사용하여 작동을 최적화한다. Filter 프로퍼티는 뷰를 사용하여 최적화하지 않는다는 점을 알아두자.

애플리케이션은 fkInternalCalcfkAggregate 필드를 사용하여 정렬할 수 있다. FireDAC은 fkCalculated 또는 fkLookup 유형인 필드를 사용하여 정렬할 수 없다. 대안으로,  애플리케이션에서 fkInternalCalc 필드를 생성하고, 그 값을 넣을 때 OnCalcFields 이벤트 핸들러에서  fkCalculated 또는 fkLookup 필드 값을 사용한다. 그런 다음 fkInternalCalc 필드를 사용하여 정렬한다.

데이터셋을 레코드의 원래 순서대로 (데이터를 담아올 당시 그리고/또는 덛붙인 그대로) 정렬하려면,  IndexFieldNames와 Fields 프로퍼티 값에  '#' 을 지정한다.

 

5 TFDTable과 정렬 (TFDTable and Sorting)

TFDTable 정렬은 서버 쪽 (ORDER BY)에서 수행된다. FireDAC은 자동으로 그리고 투명하게 정렬 순서에 PK(프라이머리 키) 필드를 추가한다. 그래야  라이브 데이터 창 모드 (Live Data Window Mode)가 올바르게 작동한다.

6 기타 자료 (See Also)

 

6.1 예제 (Samples)

 

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

이 토의에 참여하세요

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

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...

중요한 정보

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