Vous pouvez vérifier la propriété "DataSetField" du jeu de données detail/imbriqué ou accéder à la propriété "NestedDataSet" de l'ensemble de données maître.
Exemple de code pour obtenir le nom du champ "lien":
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;
Invoquer exemple:
procedure ...
begin
ShowMessage(GetCDSDLinkFieldName(cdsMaster));
ShowMessage(GetCDSDLinkFieldName(cdsDetail));
end;
PS: 2 ans plus tard, je ne crois pas que cette réponse aidera l'auteur du question, mais peut-être peut aider les autres qui cherchent le même sujet.
Désolé de prendre trois ans pour commenter votre réponse. Mais je cherchais le nom du champ de lien, pas le nom du champ _DataSetField_ lui-même. Par exemple, dans une relation maître-détail avec _ID, PARENT_ID_ dans le détail _DataSet_ je voudrais trouver le nom de champ _PARENT_ID_. – Valdir