具有用户功能条件的 MS Access 查询停止处理 odbc 数据
Posted
技术标签:
【中文标题】具有用户功能条件的 MS Access 查询停止处理 odbc 数据【英文标题】:MS Access query with user function criteria stops working on odbc data 【发布时间】:2020-10-27 15:02:34 【问题描述】:我在 MS Access 查询生成器中工作。我正在使用用户定义的函数来返回要搜索的括号中的字符组。例如,标准行是
Like Tcode()
而函数Tcode()是
Function Tcode() As String
Tcode = "[AC]"
End Function
如果我创建一个包含 3 个单字符数据行的本地数据表
A
B
C
并使用此条件对该列运行查询,我会根据需要只获得 A 和 C 的行。如果我按照以下标准运行它
Like "[AC]"
我还可以根据需要只获得 A 和 C 的行。当我对我们拥有的 ODBC Oracle 表运行查询时,问题就出现了。如果我使用 Like "[AC]" 的标准,那么我会得到 A 和 C 的结果。如果我使用 like Tcode() 的标准,那么我不会得到任何结果。我在 Tcode 的返回值上尝试了几种变体,但均未成功:
Tcode 返回 [AC] 无结果
Tcode 返回“[AC]”无结果
Tcode 返回 [[AC]] 无结果
Tcode 返回 [A] 无结果
Tcode 在所有带有 A 的行中返回 A 结果
我想动态构建 Tcode 返回值,以根据用户在其他表单上的输入获得不同的结果。为什么它在 odbc 表上不起作用?我也接受一种构建搜索的方法,例如
在('A','C')
或
“A”或“C”
但我不知道如何使用函数来实现。
编辑:Oracle 版本
Oracle Database 12c 企业版 12.1.0.2.0 - 64 位生产 PL/SQL 版本 12.1.0.2.0 - 生产 “CORE 12.1.0.2.0 生产” IBM/AIX RISC System/6000 的 TNS:版本 12.1.0.2.0 - 生产 NLSRTL 版本 12.1.0.2.0 - 生产
客户端驱动程序 19.5
【问题讨论】:
【参考方案1】:有趣。我只能在 ODBC 不是问题的范围内为您提供帮助。
它适用于 Sql Server 表:
CREATE TABLE foobar (
T varchar(10) PRIMARY KEY
);
使用 SQL Server 的 ODBC 驱动程序 17 在 Access 中链接,包含上述值 A、B、C。
这个查询:
SELECT T
FROM foobar
WHERE T Like Tcode()
返回值 A+C(使用问题中定义的函数)。
所以一定是Oracle ODBC驱动的问题。
您可能应该指定您使用的 Oracle 版本和 ODBC 驱动程序。
请注意,您不能将IN
子句与函数一起使用,请参阅https://***.com/a/63054220/3820271
【讨论】:
【参考方案2】:我无法找出发生这种情况的原因。我有两个选择;一种是使用 VBA 为每次运行时的直通查询自定义生成 sql。我倾向于将其保存在使用服务器上特殊功能的复杂查询中。我采用的解决方案是将函数转换为评估字符串的布尔值。对于大型查询来说,这不是最快的事情,但..tradeoffs。
Function TCeval(S As String) As Boolean
'usage: in criteria line: TCeval([FIELDNAME])
TCeval = False
If 1 = 1 Then 'replace with actual if evaluations
If S = "A" Or S = "C" Then TCeval = True
End If
If 1 = 0 Then 'replace
If S = "B" Then TCeval = True
End If
End Function
【讨论】:
以上是关于具有用户功能条件的 MS Access 查询停止处理 odbc 数据的主要内容,如果未能解决你的问题,请参考以下文章