1
1
我想不用说,但这取决于OLEDB提供程序是否工作。当您在现有记录集上设置过滤器时,它最终会通过另一个OLE DB接口(如果我记得正确,则为IViewFilter)。因此,即使过滤器在SQL语句的WHERE子句中工作,也不一定意味着它将作为过滤器工作。您设置的过滤器最终被分解成组件块,然后传递到ole db接口。可能是提供程序的实现不希望使用“constant=constant”形式的筛选器。作为解决方法,您可以尝试在SQL语句的WHERE子句中全部设置。 |
2
1
如果不筛选某些内容,则必须将“filtered”属性设置为false,并在希望筛选结果集时将其设置为true和条件。 不过,我会动态地构建正确的SQL属性,这样您就可以始终准确地知道发送到数据库的是什么(并且您确信您的程序只接收您想要的那些记录)。 |
3
1
1=1技巧在查询的WHERE子句中工作正常,但在筛选属性中不起作用。如果要禁用筛选,请将filtered设置为false,将返回所有记录。 过滤的问题在于它是在客户端完成的。如果您使用的是像SQL Server这样的数据库引擎,并且希望筛选一组大的记录,那么最好更改SQL查询,这样数据库服务器只返回请求的记录。只需记住先关闭tadoquery,更改SQL,然后重新打开。 我用来避免返回整个数据集(用于大型数据集)的一个技巧是考虑要显示的最大记录数,然后使用顶级SQL语法返回比要显示的“n”记录数多的一个记录…如果我达到该数字,那么我会通知用户返回的记录数超过n-1,并调整搜索/筛选条件。 |