3
給定一個嵌套的TClientDataSet,我怎麼能找到細節TClientDataSet上的鏈接字段名?如何在嵌套的TClientDataSet上查找「外鍵」字段名稱?
我正在從一個TClientDataSet複製數據到另一個(記錄記錄),我想自動忽略鏈接字段。
我也可以使用TClientDataSet.Data屬性複製數據,但我仍然需要清除鏈接和關鍵字段。
給定一個嵌套的TClientDataSet,我怎麼能找到細節TClientDataSet上的鏈接字段名?如何在嵌套的TClientDataSet上查找「外鍵」字段名稱?
我正在從一個TClientDataSet複製數據到另一個(記錄記錄),我想自動忽略鏈接字段。
我也可以使用TClientDataSet.Data屬性複製數據,但我仍然需要清除鏈接和關鍵字段。
您可以檢查詳細/嵌套數據集的「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年後,我不相信這個答案將幫助的作者問題,但也許可以幫助其他人尋找相同的主題。
抱歉,需要三年才能評論您的答案。但我正在查找鏈接字段的名稱,而不是_DataSetField_字段名稱本身。例如,在具有_ID的主從關係中,在詳細信息_DataSet_中的PARENT_ID_我希望找到_PARENT_ID_字段名稱。 – Valdir 2015-10-23 17:53:09