Kori 4월 9일, 2022에 포스트됨 공유하기 4월 9일, 2022에 포스트됨 Docwiki에 있는 "Sorting Records (FireDAC)"을 번역한 글: 번역일: 2022년 4월 9일) 위로 가기: [DocWiki 번역] 데이터셋을 가지고 작업하기 (FireDAC) 목차 1 일반 (General) 2 표준 정렬 (Standard Sorting) 3 데이터셋 뷰 (Dataset Views) 4 기타 옵션 (Other Options) 5 TFDTable과 정렬 (TFDTable and Sorting) 6 기타 자료 (See Also) 6.1 예제 (Samples) 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의 아래 프로퍼티 들이 뷰를 제어한다. 필드로 정렬: Fields, CaseInsFields, DescFields, Options. 표현식으로 정렬: Expression, Options. 레코드 필터: Filter, FilterOptions. 레코드 구별 플래그(distinction flag): Distinct. 뷰는 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 프로퍼티는 뷰를 사용하여 최적화하지 않는다는 점을 알아두자. 애플리케이션은 fkInternalCalc와 fkAggregate 필드를 사용하여 정렬할 수 있다. 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) 표현식 쓰기 레코드 필터링하기 레코드 찾기 계산된 필드와 집계된 필드 마스터-디테일 관계 (M/D) 테이블 조회하기 (FireDAC) 6.1 예제 (Samples) FireDAC TFDMemTable Main 예제 FireDAC TFDQuery Indices 예제 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.