1

当使用带有 mtTableFields MetaDataType 的 TFDMetaInfoQuery 时,文档说将返回的 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 列的行会生成 Invalid typecast 的编译器错误。我尝试将 Column_Attributes 字段作为变体和其他几种类型,但我不断收到相同的错误。顺便说一下,Column_Attributes 列的数据类型是 dtUInt32。FireDAC 帮助说“将值转换为 FireDAC.Stan.Intf.TFDDataAttributes”。

建议?

4

1 回答 1

1

我在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)^);
于 2019-06-04T11:35:46.127 回答