我有一个包含产品表的 ADO 记录集。我有一个用于过滤表格的产品列表 - 像这样动态构建一个过滤器(但更长):
rs.Filter = "productType = 'product A' " _
+ "or productType = 'product B' " _
+ "or productType = 'product C' "
这对我来说很好,我将过滤后的行复制到一个单独的工作表中,一切都很好。
然后新的项目要求意味着我也需要获得排除的项目。很好,我做了一些布尔代数,并使用相反的过滤器运行相同的查询:
rs2.Filter = "productType <> 'product A' " _
+ "and productType <> 'product B' " _
+ "and productType <> 'product C' "
这也很好用。我将排除的项目复制到不同的工作表中,所以现在我既有包含的项目也有排除的项目。
但是一个新的要求意味着我必须处理一个特殊情况——产品 B 只会在特定日期包含。现在,这适用于正过滤器,即查找包含项目的过滤器:
rs.Filter = "productType = 'product A' " _
+ "or (productType = 'product B' and expiry = 16/08/2013) " _
+ "or productType = 'product C' "
但我遇到了负面过滤器(查找排除项目的过滤器)的问题。由于ADO Recordset Filter 中嵌套 OR 的限制,不允许执行以下操作:
rs2.Filter = "productType <> 'product A' " _
+ "and (productType <> 'product B' or expiry <> 16/08/2013) " _
+ "and productType <> 'product C' "
有替代解决方案吗?例如某种方式来获得过滤器的补充(即只是它排除的行)?
我应该强调 - 要包含的产品列表是动态构建的,在编写代码时它对我不可用。