具有用户功能条件的 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 数据的主要内容,如果未能解决你的问题,请参考以下文章

MS Access:具有多个条件的双循环查询以显示在表单上

MS Access 中的条件选择语句

查询不使用 MS-Access 中的日期条件进行拉取

SQL MS Access查询的排除条件

查询 MS Access 多个条件(where)

查询未在MS-Access中使用日期条件