将以下SQL语句应用于ClientDataset作为Filter属性:
'(((DORcode > ''00'') AND (DORcode < ''10'')) AND (((SiteNumber+'' ''+SiteStreet+SiteCity)<>(OwnerAddr1+OwnerCity)) AND ((SiteNumber+SiteStreet+SiteCity)<>(OwnerAddr1+OwnerCity))) AND (TaxStatus > ''!''))'
它给了我以下错误:')'预期但没有找到,或(对于&gt;甚至更长的语句):类型不匹配。
潜水的细节发现问题是由声明的长度引起的,部分是有效的,如:
'(((DORcode > ''00'') AND (DORcode < ''10'')) AND (((SiteNumber+'' ''+SiteStreet+SiteCity)<>(OwnerAddr1+OwnerCity))))';
或任何其他较短的部分。
所有字段名称都有效,数据集不为空,如果语句较短,过滤器对所有涉及的字段名称都可以正常工作。
因此,错误不是语法错误,显然是由超出字符数限制的语句的内部修剪(介于111和196之间)引起的。
我的问题是: 1.有人注意到Delphi XE5上有这个错误吗? 这是它的补丁吗? 3.如何以任何其他方式解决初始(长)语句的过滤?
提前谢谢。
答案 0 :(得分:1)
我无法评论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 :(得分:1)
请注意数据类型。在重新格式化的示例中,1 DORcor似乎是一个字符串,在示例2中,它被编码为数字。你还将Sitenumber(听起来像一个数字)和Sitestreet结合起来,听起来更像是一个字符串。