2013-07-29 3 views
5

TClientDataSet에서 인덱스를 사용하여 레코드를 정렬하는 방식을 변경할 수 있습니까? this question을 읽은 후, 문자열 필드 을 논리적으로 클라이언트 데이터 셋에서으로 정렬하는 것이 좋을 것이라고 생각했습니다. 하지만 인덱스에 관해서 클라이언트 데이터 셋의 기본 동작을 재정의하는 방법을 알지 못합니다. 어떤 아이디어?TClientDataSet의 정렬 메커니즘을 재정의하는 방법

추 신 : 내 CDS는 어떤 제공 업체와도 연결되어 있지 않습니다. TClientDataSet (또는 메커니즘이 구현 된 상위) 자체의 정렬 메커니즘을 수정하는 방법을 찾고 있습니다.

+0

CDS의 데이터를 사용자에게 표시하고 있습니까? 그렇다면 어떤 구성 요소를 사용하고 있습니까? 대부분의 Grid- 및 ListView 유형 구성 요소를 사용하면 사용자 정의 정렬을 구현할 수 있으므로 CDS에 필요한 항목이 없으면 대신이 항목을 사용해보십시오. – LightBulb

+0

@ LightBulb JvDBGrid를 사용하고 있습니다. –

답변

5

Midas의 해당 부분을 다시 작성하지 않는 한 ClientDataSet의 정렬 메커니즘을 재정의 할 수 없습니다.

정확한 정렬 (어떤 논리가을 의미)을 달성하려면 새로운 메커니즘을 도입하고 표준 메커니즘으로 정렬 된 방식으로 값을 설정하여 필요한 정렬 순서를 지정하면됩니다.

+0

midas.obj 소스를 사용할 수 있습니까? 소스를 사용할 수 있고 라이선스 계약에 수정이 필요한 경우 해당 부분을 기꺼이 변경하는 것보다 더 기쁩니다. –

+0

c : \ Program Files (x86) \ Embarcadero \ RAD Studio \ 9.0 \ source \ data \ dsnap \ midas \ –

+0

XE2 설치 폴더에 언급 된 폴더가 없습니다. :-( –

1

ClientDataSet을 제공하는 SQL 문으로 원하는 정렬을 얻으려고합니다. 예를 들어

내가 FieldN

a_1 
a_20 
a_10 
a_2 

에 다음 문자열을 처리하고 있었고, 난 그들에게 다음과 같이 분류 원한다면 (난 당신이 논리적으로

a_1 
a_2 
a_10 
a_20 
무엇을 의미하는이 유사한 가정

그러면 SQL을 쓸 것입니다

SELECT  FieldA, 
      FieldB, 
      ... , 
      FieldN, 
      CAST(SUBSTRING(FieldN, 3, 2) TO INTEGER) As FieldM '<== pseudocode 
FROM  TableA 
ORDER BY FieldM 

SubString과 Cast to Integer 연산의 정확한 구문은 사용중인 DBMS에 따라 다릅니다.

+0

내 CDS는 _in 메모리 _ 데이터 세트입니다. –

+0

컴퓨터의 모든 데이터가 메모리에 있습니다. CDS의 특별한 점은 무엇입니까? :-) – Sam

+0

ClientDataSet이 SQL을 실행할 수 없습니다. –

1

우수 온라인 제품 Understanding ClientDataSet 색인 읽기 Cary Jensen.

이 분류 및 색인 IndexDefs, IndexFieldNamesIndexName를 사용하는 다양한 방법을 사용하는 방법에 대해 설명합니다.

: 귀하의 의견에 회신하십시오.

당신은 TClientDataSet에 정렬 방법을 재정의 할 수 없습니다,하지만 당신이 할 추가 할 수 있습니다 : 당신이 기존의 필드보다 더 아무것도에 사용자 지정 정렬하고 싶은 경우에, 당신이하는 Calculated Field 추가의 종류를 수행해야

OnCalcFields 이벤트에서 주문 계산을 수행 한 다음 해당 필드를 IndexDefs에 추가하십시오.

+0

나는이 기사를 읽었습니다. 현재 인덱스에 따라 레코드를 비교하고 위치를 지정하는 실제 메서드를 재정의하려고합니다. 뭔가가 http://docwiki.embarcadero.com/Libraries/XE4/en/System.Classes.TStringList.CustomSort –

+0

내 편집보기 : 당신은 이것을 위해 계산 필드를 사용할 수 있습니다. –

+0

계산 된 필드 및 인덱스 사용과 관련하여 다른 질문이 있습니다. 지금까지 인덱스에서 내부 계산 된 필드를 사용할 수 없었습니다. http://stackoverflow.com/questions/17896329/how-to-sort-a-clientdataset-on-a-calculated-field?rq=1 –