我在表单上有一个奇怪的问题:我添加了一个范围来过滤数据源executeQuery()方法中的记录,这在打开表单时工作正常但如果我在网格标题中手动设置过滤器,则在ExecuteQuery()中设置范围方法不适用。我的范围定义如下:
this.query.dataSourceNo(1).AddRange(fieldnum(MyTable,MyField)).Value('MyRangeValue');
我使用视图作为表单DataSource,可能是它的问题。 任何想法总是应用范围并保持甚至在网格上手动添加过滤器? 谢谢你的帮助
答案 0 :(得分:4)
您必须在super()
中的executeQuery()
之前应用过滤器。
但我认为您的问题是每次运行executeQuery()
时都会添加过滤器,从而导致生成的SQL表达式中出现OR。
这是做到这一点的方法:
QueryBuildRange qr = SysQuery::findOrCreateRange(this.query.dataSourceNo(1), fieldnum(MyTable,MyField));
qr.value(queryValue('MyRangeValue'));
qr.status(RangeStatus::Locked); // Or ::Hidden