2010-07-01 68 views
3

給定一個嵌套的TClientDataSet,我怎麼能找到細節TClientDataSet上的鏈接字段名?如何在嵌套的TClientDataSet上查找「外鍵」字段名稱?

我正在從一個TClientDataSet複製數據到另一個(記錄記錄),我想自動忽略鏈接字段。

我也可以使用TClientDataSet.Data屬性複製數據,但我仍然需要清除鏈接和關鍵字段。

回答

0

您可以檢查詳細/嵌套數據集的「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年後,我不相信這個答案將幫助的作者問題,但也許可以幫助其他人尋找相同的主題。

+0

抱歉,需要三年才能評論您的答案。但我正在查找鏈接字段的名稱,而不是_DataSetField_字段名稱本身。例如,在具有_ID的主從關係中,在詳細信息_DataSet_中的PARENT_ID_我希望找到_PARENT_ID_字段名稱。 – Valdir 2015-10-23 17:53:09

相關問題