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

Mar*_*lot 5 delphi firedac delphi-10.1-berlin

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

通常,您可以打开查询,而不必担心是否添加了新字段.如果新字段不在您的持久字段中,那么您将无法看到它们.但是在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;
Run Code Online (Sandbox Code Playgroud)

谢谢

Uwe*_*abe 6

如果数据集具有持久字段,并且您希望在查询打开时创建其他字段,则必须设置dataset.FieldOptions.AutoCreateModeacCombineAlwaysfirst.

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

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

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