当 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)^);
当使用 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)^);