Мельница данных- Интерфейс ITableInfo  (раздел целиком)  (08.08.2020)
Интерфейс ITableInfo
Информация о таблице представляется объектом через интерфейс (наследник INamedItemInfo )
  ITableInfo = interface(INamedItemInfo)
    ['{3FC1998A-9031-4936-82B5-8CAA2219085E}']
    function Get_FieldCount: Integer; safecall;
    function Get_Field(Index: Integer): IFieldInfo; safecall;
    function Get_PrimaryKey: IFieldInfo; safecall;
    function Get_Uplink: IFieldInfo; safecall;
    function Get_Parent: ITableInfo; safecall;
  end;
  • функция Get_FieldCount возвращает количество полей в таблице.
  • функция Get_Field возвращает ссылку на поле с номером Index. Ссылка на интерфейс IFieldInfo
  • функция Get_PrimaryKey возвращает ссылку на поле, являющееся первичным ключем. Это поле должно быть задано.
  • функция Get_Uplink возвращает ссылку на поле, осуществляющее иерархическую связь между записями таблицы. Если это поле задано, записи отображаются в виде иерархии.
  • функция Get_Parent возвращает ссылку на родительскую таблицу. Дочерняя таблица связана с родительской первичными ключами, т. е. соотношением 1:1. Если таблица не имеет родительской, возвращается nil.

1. Интерфейс ITableInfo2
Для таблиц, имеющих полиморфные ссылки, реализуется интерфейс (наследник ITableInfo )
  ITableInfo2 = interface(ITableInfo)
    ['{9DF4C8AC-1DA2-4E7B-BF44-7EDD7A269418}']
    function Get_PolymorphCount: Integer; safecall;
    function Get_PolymorphTable(Index: Integer): ITableInfo; safecall;
    function Get_PolymorphField(Index: Integer): IFieldInfo; safecall;
  end; 
Полиморфной ссылкой является, например, ссылка, физически размещенная в родительской таблице, указывающая на свою запись. Реализация этого интерфейса не является обязательной.
  • функция Get_PolymorphCount возвращает количество полиморфных ссылок.
  • функция Get_PolymorphTable возвращает ссылку на таблицу, на которую указывает полиморфная ссылка номер Index.
  • функция Get_PolymorphTable возвращает ссылку на поле, реализующее полиморфную ссылку номер Index. Это поле должно иметь тип dtReference, информация о его типе должна реализовать интерфейс IReferenceInfo. Значение, возвращаемое функцией Get_TargetTable этого интерфейса в данном случае не имеет значения и игнорируется.

2. Интерфейс ITableInfo3
Для таблиц, при запросах к которым требуется наложение дополнительных условий отбора, реализуется интерфейс (наследник ITableInfo )
  ITableInfo3 = interface(ITableInfo)
    ['{3FB73AA9-010C-48DA-81C7-E1DCFE2E6136}']
    function GetPersistentClause(const Alias: WideString): WideString; safecall;
    function GetPreConditionsCount: Integer; safecall;
    function GetPreConditionCaption(Index: Integer): WideString; safecall;
    function GetPreConditionCategory(Index: Integer): WideString; safecall;
    function Get_ActivePreCondition(Index: Integer): WordBool; safecall;
    procedure Set_ActivePreCondition(Index: Integer; Value: WordBool); safecall;
    function GetPreConditionParamsCount(Index: Integer): Integer; safecall;
    function GetPreConditionParam(Index: Integer; PreConditionIndex: Integer): IOptionInfo; safecall;
  end;
  • функция GetPersistentClause возвращает выражение дополнительного условия отбора. Алиас таблицы передается в параметре Alias.