具有用户功能标准的 MS Access 查询停止处理 odbc 数据

MS Access query with user function criteria stops working on odbc data

我在 MS Access 查询生成器中工作。我正在使用用户定义的函数来 return 括号中的字符组进行搜索。例如,条件行是

Like Tcode()

而函数 Tcode() 是

Function Tcode() As String
Tcode = "[AC]"
End Function

如果我用 3 行单字符数据创建本地 table 数据

A
B
C

和 运行 使用此条件对该列的查询,我根据需要只得到 A 和 C 的行。如果我 运行 它符合

的标准
Like "[AC]"

我也只得到了 A 和 C 的行,如我所愿。当我 运行 对我们拥有的 ODBC Oracle table 进行查询时,问题就出现了。如果我使用 Like "[AC]" 的标准,那么我会得到 A 和 C 的结果。如果我使用 Like Tcode() 的标准,那么我不会得到任何结果。我已经尝试了 Tcode 的 return 值的几种变体但没有成功:

Tcode returns [AC] 无结果

Tcode returns "[AC]" 无结果

Tcode returns [[AC]] 无结果

Tcode returns [A] 无结果

Tcode returns A 结果在所有行中都带有 A

我想动态构建 Tcode return 值以根据用户在其他表单上的输入获得不同的结果。为什么它在 odbc table 上不起作用?我也接受一种构建搜索的方法

在 ('A','C')

'A' 或 'C'

但我不知道如何使用函数来实现它。

编辑:Oracle 版本

Oracle Database 12c 企业版 12.1.0.2.0 版 - 64 位生产
PL/SQL 版本 12.1.0.2.0 - 生产
“核心 12.1.0.2.0 生产”
IBM/AIX RISC System/6000 的 TNS:版本 12.1.0.2.0 - 生产
NLSRTL 版本 12.1.0.2.0 - 生产

客户端驱动程序 19.5

有意思。我只能在一般情况下 OD​​BC 不是问题的情况下为您提供帮助。

它适用于 Sql 服务器 table:

CREATE TABLE foobar (
    T varchar(10) PRIMARY KEY
);

使用 SQL 服务器的 ODBC 驱动程序 17 在 Access 中链接,包含上述值 A、B、C。

而这个查询:

SELECT T
FROM foobar
WHERE T Like Tcode()

returns 值 A+C(函数定义如您的问题)。

所以肯定是Oracle ODBC驱动的问题。

您可能应该指定您使用的 Oracle 和 ODBC 驱动程序的版本。


请注意,您不能将 IN 子句与函数一起使用,请参阅

我无法找出发生这种情况的原因。我有两个选择;一种是使用 VBA 到 custom-generate sql 对每个 运行 进行 pass-through 查询。我倾向于将此保存用于在服务器上使用特殊功能的复杂查询。我采用的解决方案是将函数转换为评估字符串的布尔值。对于大型查询来说不是最快的事情,但是..权衡。

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