세부/중첩 된 데이터 집합의 "DataSetField"속성을 확인하거나 마스터 데이터 집합의 "NestedDataSet"속성에 액세스 할 수 있습니다.
function GetCDSDLinkFieldName(cds: TClientDataSet): string;
var
i: Integer;
cdsDetail: TClientDataSet;
begin
Result := EmptyStr;
cdsDetail := nil;
if Assigned(cds.DataSetField) then
cdsDetail := cds;
if not Assigned(cdsDetail) and (cds.FieldCount > 0) then
begin
i := 0;
while not Assigned(cdsDetail) and (i < cds.FieldCount) do
begin
if cds.Fields[i].DataType = ftDataSet then
cdsDetail := TClientDataSet(TDataSetField(cds.Fields[i]).NestedDataSet);
Inc(i);
end;
end;
if Assigned(cdsDetail) then
Result := cdsDetail.DataSetField.FieldName;
end;
호출 예 :
샘플 코드는 "링크"필드 이름을 얻을 수
procedure ...
begin
ShowMessage(GetCDSDLinkFieldName(cdsMaster));
ShowMessage(GetCDSDLinkFieldName(cdsDetail));
end;
PS : 2 년 후 나는이 대답은의 저자 도움이 될 것입니다 생각하지 않는다 질문을하지만 다른 사람들이 동일한 주제를 검색하는 것을 도울 수 있습니다.
답안에 대해 3 년 동안 의견을 말하면 죄송합니다. 하지만 _DataSetField_ 필드 이름 자체가 아니라 링크 필드의 이름을 찾고있었습니다. 예를 들어 _ID가있는 마스터 - 세부 관계에서 PARENT_ID_ 세부 정보 _DataSet_ _PARENT_ID_ 필드 이름을 찾고 싶습니다. – Valdir