SQL 语句被修剪并作为错误被拒绝



将以下 SQL 语句作为 Filter 属性应用于 ClientDataset:

'(((DORcode > ''00'') AND (DORcode < ''10'')) AND (((SiteNumber+'' ''+SiteStreet+SiteCity)<>(OwnerAddr1+OwnerCity)) AND ((SiteNumber+SiteStreet+SiteCity)<>(OwnerAddr1+OwnerCity))) AND (TaxStatus > ''!''))'

它给了我以下错误:")"预期但未找到,或者(对于>甚至更长的语句):类型不匹配。

潜入细节发现问题是由语句的长度引起的,其中的某些部分正在工作,例如:

'(((DORcode > ''00'') AND (DORcode < ''10'')) AND (((SiteNumber+'' ''+SiteStreet+SiteCity)<>(OwnerAddr1+OwnerCity))))';

或任何其他较短的部分。

所有字段名称都

有效,数据集不为空,如果语句较短,则筛选器对于所有相关字段名称都正常工作。

因此,该错误不是语法错误,显然是由语句的内部修剪超过字符数限制(介于 111 和 196 之间)引起的。

我的问题是: 1. 有人注意到德尔福XE5上的这个错误吗? 2. 它是它的补丁吗? 3. 如何以其他方式解决初始(长)语句的过滤问题?

提前谢谢你。

我无法评论 XE5 是否有问题,但我注意到过滤器中有一大堆不必要的括号。 我认为以下内容是有效的,也许更清楚,尽管在不了解您的所有数据类型的情况下,我不能 100% 确定。

DORcode > '00' AND 
DORcode < '10' AND 
SiteNumber + ' ' + SiteStreet + SiteCity <> OwnerAddr1 + OwnerCity AND
SiteNumber + SiteStreet + SiteCity <> OwnerAddr1 + OwnerCity AND 
TaxStatus > '!'

此外 - 我会考虑像这样构建过滤器,因为我认为它会更清晰

FilterString := 'DORcode > 0 AND DORcode < 10 AND ' +
                'Trim(SiteNumber) + Trim(SiteStreet) + SiteCity <> ' +
                '     OwnerAddr1 + OwnerCity AND ' +
                'TaxStatus > ''!''';

这有帮助吗?

请注意数据类型。在重新格式化的示例 1 中,DORcor 似乎是一个字符串,在示例 2 中,它被编码为数字。您还可以将Sitenumber(听起来像一个数字)与听起来更像字符串的Sitestreet结合起来。

相关内容

  • 没有找到相关文章

最新更新