作为。我仍然要求您阅读http://www.catb.org/esr/faqs/smart-questions.html#beprecise并相应地描述您的环境。
- 什么是数据库服务器?
- MDAC/ADO 组件是什么版本?
- 查询是什么?
- SQL 中的名称列类型是什么?
您正在“提高”评论,这很好。但你不回答问题。这并不好。我们不是 ESPers,我们无法读懂你的想法。
我在上面的评论中给了你一些建议。你试过了吗?他们工作了吗?引用它们:
- 也许您可以将 ADO/MDAC 更新到 2.8sp1 版本。参考的 MSDN 知识库文章被告知适用于 MDAC 最高 2.7 版本。也许 2.8sp1 不再有这个限制。
- 也许您可以使用一些特定于数据服务器的技巧,例如将名称的最后 4 个字母复制到单独的列中。
- 也许您可以将该条件移动到 SQL SELECT WHERE 子句中并重新打开查询。
- 也许有像 TBDEDataSet.OnFilterRecord 这样的事件处理程序
有 4 种解决方法,您要么没有尝试,要么没有报告结果。不太好。
- 想法#1是不言自明的
- @SertacAkyuz 尽其所能详细说明了想法 #3,但缺少有关您的程序的信息。
- @Ravaut123 详细介绍了想法 #4
- 想法#2概述如下
假设您的“ADO 数据库”由 Microsoft Access 支持,并根据http://www.databasedev.co.uk/access-sql-string-functions.html ... 或使用 MS SQL 并根据http:// msdn.microsoft.com/en-us/library/ms177532.aspx ...或者...
Query.SQL.Text := 'select Right(Name, 4) as name_tail, * from table where ...'
查看添加到查询的额外列!4 是“约翰”的长度。
对于这样的查询,以下过滤条件是等效的:
- Filter := ' [Name] like ''%john'' ';
- 过滤器 := ' [name_tail] = ''约翰'' ';
但是,如果在某些行上 Name 列短于 4 个字母,我不知道 RIGHT 函数会做什么。也许它会截断结果,或者抛出错误并中止查询。后者可能 - 取决于真实数据 - 可能可以通过用空格填充到 4 长度来缓解,比如
LTrim(Right(' ' || Name, 4)) as name_tail
那是供您测试的,因为只有您知道环境的详细信息。