检查查询是否返回比创建时更多的字段并定义其持久字段

时间:2016-10-24 12:17:56

标签: delphi firedac delphi-10.1-berlin

如果你有一个从* 中选择*最终你可以得到比预期更多的字段,你知道是否有办法检查自创建该查询以来是否添加了新字段并定义了它的持久字段?。

通常,您可以打开查询,而无需担心是否添加了新字段。如果新字段不在您的持久字段中,那么您只是不会看到它们。但是在Datasnap REST服务器上,当您尝试从查询返回数据集时,您会获得AV,该查询现在拥有的字段数多于创建其持久字段时的字段数。

如果想知道我是否可以快速检查,我可以返回更有用的错误而不是AV。

类似的东西:

MyQuery.Open;
if MyQuery.FieldDefs.Count <> MyQuery.Fields.Count then begin
  raise Exception.Create('The number of returned Fields doesn''t match the expected');
end;

谢谢

1 个答案:

答案 0 :(得分:6)

如果数据集包含持久字段,并且您希望在查询打开时创建其他字段,则必须先将dataset.FieldOptions.AutoCreateMode设置为acCombineAlways

现在打开查询后,您可以使用lcAutomatic in dataset.Fields.LifeCycles检查其他字段是否存在。

如果您对哪些字段是新的感兴趣,只需迭代dataset.Fields并检查field.LifeCycle = lcAutomatic

顺便说一句,使用上面的设置你可能不再需要检查了。