How can I find if a DataSet is the master in a master/detail relationship in Delphi?

delphi, master-detail, tdataset

Solution

You should call `TDataSet`.`GetDetailDataSets` method. If the list is not empty, then this dataset is the master dataset for the datasets in the list. For example:

var
  oDetails: TList;
  lIsMaster: Boolean;
...
  oDetails := TList.Create;
  try
    myDataSet.GetDetailDataSets(oDetails);
    lIsMaster := oDetails.Count > 0;
  finally
    oDetails.Free;
  end;

Problem

I want to create a "Duplicate Record" action which when invoked, duplicates current record in any `TDataSet` descendant. How can I find out if the dataset is the master dataset of a master/detail relationship? With `TClientDataSet` it's rather easy, but I need this action to be used with all descendants of `TDataSet`.

Original source