如何在嵌套的TClientDataSet中找到详细TClientDataSet上的链接字段名?
我正在将数据从一个TClientDataSet复制到另一个(逐条记录),我希望自动忽略链接字段。
我也可以使用TClientDataSet.Data属性复制数据,但仍需要清除链接和键字段。
如何在嵌套的TClientDataSet中找到详细TClientDataSet上的链接字段名?
我正在将数据从一个TClientDataSet复制到另一个(逐条记录),我希望自动忽略链接字段。
我也可以使用TClientDataSet.Data属性复制数据,但仍需要清除链接和键字段。
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;
附言:两年后我不认为这个答案会对问题的作者有所帮助,但或许可以帮助其他搜索同一主题的人。