检查查询是否比创建它并定义其持久字段时多 returns 个字段

To check if a query returns more Fields than when you created it and defined its persistent fields

当你有一个 select * from XXX 查询时,最终你可以获得比预期更多的字段,你知道是否有办法检查是否有新的自您创建该查询并定义其持久字段以来,已添加字段 ?.

通常情况下,您可以打开查询而不必担心是否添加了新字段。如果新字段不在您的持久字段中,那么您将看不到它们。但是在 Datasnap REST 服务器上,当您尝试 return 来自查询的数据集时,您会得到一个 AV,该查询现在具有比您创建其持久字段时更多的字段。

如果想知道是否有快速检查我可以这样做,我可以return一个更有用的错误而不是 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;

谢谢

如果数据集具有持久字段并且您希望在查询打开时创建这些附加字段,则必须先将 dataset.FieldOptions.AutoCreateMode 设置为 acCombineAlways

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

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

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