Как преобразовать поле Column_Attributes, возвращаемое TFDMetaInfoData, когда MetaDataType имеет значение mtTableFields? - PullRequest
0 голосов
/ 03 июня 2019

При использовании TFDMetaInfoQuery с MetaDataType для mtTableFields в документации говорится, что необходимо преобразовать возвращаемое поле Column_Attributes в тип TFDDataAttributes для проверки атрибутов конкретного поля, таких как необязательные (caAllowNull) и caReadOnly. Как именно это сделано? Рассмотрим следующий сегмент кода, который возвращает таблицу данных, касающихся полей MyTable:

var
  FieldAttributes: TFDDataAttributes;
  Required: Boolean;
begin
  FDMetaInfoQuery1.MetaInfoKind := mkTableFields;
  FDMetaInfoQuery1.Open('MyTable'); 
  for i := 0 to FDMetaInfoQuery1.RecordCount -1  do
  begin   
    FieldAttributes := TFDDataAttributes(FDMetaInfoQuery1.FieldByName('Column_Attributes').AsExtended);
    // test for particular TFDDataAttribute flags in the TFDDataAttributes set
   // ie, if not  ( caAllowNull in FieldAttributes ) then // flag column as required
  end;

Строка, приводящая столбец Column_Attributes, генерирует ошибку компилятора неверного типа. Я попытался получить поля Column_Attributes как вариант и несколько других типов, но я продолжаю получать ту же ошибку. Кстати, тип данных столбца Column_Attributes - dtUInt32. Справка FireDAC говорит: «Приведите значение в FireDAC.Stan.Intf.TFDDataAttributes.»

Предложения

1 Ответ

1 голос
/ 04 июня 2019

Я нашел код ниже на http://docwiki.appmethod.com/appmethod/1.17/topics/en/Metadata_Structure_(FireDAC)

var
  i: Integer;
...
  i := FDMetaInfoQuery1.FieldByName('COLUMN_ATTRIBUTES').AsInteger;
  eAttrs := TFDDataAttributes(Pointer(@i)^);
...