检查查询是否比创建它并定义其持久字段时多 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
。
顺便说一句,使用上面的设置您可能不再需要该检查了。
当你有一个 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
。
顺便说一句,使用上面的设置您可能不再需要该检查了。