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

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

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