我想从TADOQuery过滤一些记录。我设置了过滤属性为true,当我设置过滤器字段=“值”,一切工作正常。我想通过附加动态地建立这个滤波器

<space>AND field='value'

要总是正确的值,并且我想1 = 1将达到目的。因此,我将有1 = 1为默认过滤器,然后只是追加AND field='value'它作为必要的。

此,但是,不工作。错误消息显示如下:

  

参数的错误类型,超出可接受的范围内,或在冲突彼此。

谁能告诉我什么我能作为一个多功能的始终真表达式中使用此过滤器?

有帮助吗?

解决方案

我想这是不言而喻的,但它取决于OLE DB提供程序是否这工作。当您设置在现有的记录集的过滤器,它最终通过不同的OLE DB接口去(IViewFilter如果我没有记错)。因此,即使过滤器上的SQL语句的WHERE子句中的作品,它并不一定意味着它会工作作为过滤器。您设置最终过滤得到解析,进了组分片段,然后传递到OLE DB接口。这可能是提供者实现不期望形式的过滤器“恒=常数”。作为一种变通方法,你可以尝试设置它所有的SQL语句的WHERE子句。

其他提示

您必须设置“过滤”属性设为False,如果你不过滤的东西,当你想过滤的结果集设置它真正的和你的病情。

我要动态地构建正确的SQL属性,虽然让你始终确切地知道什么是被发送到数据库(你是确保只有那些你想要的记录是由你的程序接收到的)。

在1 = 1特技查询的where子句中工作得很好,但不是在过滤性能。如果您希望禁用过滤器,过滤设定为false,所有记录都将被退回。

具有过滤的问题是,它完成客户端。如果你正在使用的数据库引擎,如SQL Server和期望有一个大的记录集过滤,然后你更好地通过改变SQL查询,这将使数据库服务器只返回请求的记录服务。不过,别忘了先关闭TAdoQuery,更改SQL然后重新打开。

我用它来避免返回整个数据集的恶作剧(多用于大型数据集)是考虑我想显示,然后用TOP SQL语法记录的最大数目返回比我想的记录数多一个显示“N” ...如果余达到这个数字,然后我通知有超过n-1个记录,并返回到调整搜索/过滤器条件的用户。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top