【发布时间】:2014-06-19 19:40:14
【问题描述】:
尝试在 Delphi XE2 中对 ADO 数据集应用过滤器时遇到问题 ...
Filter := ' [Name] like ''%john'' ';
引发异常:
Project Test.exe raised exception class EOleException with message
'Arguments are of the wrong type, are out of acceptable range,
or are in conflict with one another'. Process stopped.
但使用时:
Filter := ' [Name] like ''john%'' '
效果很好!
为什么?
【问题讨论】:
-
所以实际不起作用的代码是
Filter := '[Name] like ''%john'''? -
你试过用 * 代替 % 吗?
-
我不知道这是否适用于最近的 ADO 版本,也不知道 topicstarter 是否使用当代 ADO。 请注意,不支持在 LIKE 子句的字符串条件中使用通配符作为第一个字符。您只能使用通配符作为 ADO 过滤器的 LIKE 原因条件的结束字符,或同时作为开始和结束字符。 support.microsoft.com/kb/181487 和 support.microsoft.com/kb/226119
-
msdn.microsoft.com/en-us/data/aa937730 - MDAC 版本检查器
-
也许您可以将 ADO/MDAC 更新到 2.8sp1 版本。也许您可以使用一些特定于数据服务器的技巧,例如将名称的最后 4 个字母复制到单独的列中。也许您可以将该条件移动到 SQL SELECT WHERE 子句中并重新打开查询。也许有像 TBDEDataSet.OnFilterRecord 这样的事件处理程序,您可以在 Delphi 中计算您想要的所有内容。或者你什么也做不了。