当 MetaDataType 为 mtTableFields 时,如何转换由 TFDMetaInfoData 返回的 Column_Attributes 字段?

How to cast the Column_Attributes field returned by a TFDMetaInfoData when MetaDataType is mtTableFields?

当使用 TFDMetaInfoQuery 和 mtTableFields 的 MetaDataType 时,文档说将返回的 Column_Attributes 字段转换为 TFDDataAttributes 类型,以便检查特定字段的属性,例如不需要的 (caAllowNull) 和 caReadOnly。这到底是怎么做到的?考虑以下代码段,其中 returns 与 MyTable 字段相关的 table 数据:

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 帮助说 "Cast value to FireDAC.Stan.Intf.TFDDataAttributes."

建议?

我在 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)^);