【问题标题】:Microsoft Jet wildcards: asterisk or percentage sign?Microsoft Jet 通配符:星号还是百分号?
【发布时间】:2010-10-17 16:11:34
【问题描述】:

Microsoft Jet 中的 LIKE 运算符中正确的多字符通配符是什么?什么设置会影响它(如果有)?我支持在 Microsoft Jet(在 Access 数据库上)上运行的旧 ASP 应用程序,它使用 LIKE 运算符中的 % 符号,但我有一个客户显然在他的环境中遇到问题,因为 % 字符被理解为常规字符,我假设他的多字符通配符是 *.另外,我几乎可以肯定,在过去我使用 * 而不是 % 编写了带有查询的应用程序。最后,Microsoft Access(作为应用程序)也仅适用于 * 而不是 %(但我不确定它的相关性)。

我刚刚在网上搜索了大约 20 分钟,没有任何有用的结果,所以我认为在 stackoverflow 上提问会很有用。有人可能已经知道了,无论如何,最好将潜在答案保留在 stackoverflow 上,而不是任何其他随机讨论论坛。

【问题讨论】:

    标签: sql ms-jet-ace


    【解决方案1】:

    如果您使用的是 DAO,请使用星号(以及单个符号占位符的问号)。如果您使用的是 ADO,请使用百分号(和下划线)。

    【讨论】:

      【解决方案2】:

      您可能会发现这很有用:

      http://msdn.microsoft.com/en-us/library/aa140104(office.10).aspx

      在查询设计网格中,DAO 使用 *,ADO 和 ASP 使用 %

      【讨论】:

        【解决方案3】:

        通过 ODBC 访问 Jet,我不清楚应该使用哪些通配符。我假设是自然的 Jet SQL (*/?),但由于我从不通过 ODBC 使用 Jet 数据,所以我不能说。

        在 Access 中,正如 Remou 引用的文章所说,在代码中,这取决于您使用的数据访问接口 - ADO(没有人应该在 Access 中使用),您使用 %/_ ,而使用 DAO(Jet 的本机接口层),您使用 Jet 的本机通配符 (*/?)。

        更高版本的 Access 在 Access 中执行 SQL 时出现异常。我不知道是 Access 2002 还是 2003 添加了它,但现在,您可以打开一个 ANSI SQL 92 兼容模式。如果这样做,通配符将变为 %/_ 而不是 */?。但是能够选择 ANSI 模式仅适用于 Access 本身——正如 onedaywhen 告诉我们的那样,您必须选择不同的数据接口库来使用不同的 SQL 模式,其中 ADO 使用 92 和 DAO 和 ODBC 89。

        【讨论】:

        • ACE/Jet 有 两组 组原生通配符:一组用于 ANSI-89 查询模式,另一组用于 ANSI-92 查询模式。这些查询模式是引擎原生的,“仅在 Access 本身内”不适用。
        • 在针对 Jet 运行 SQL 时如何设置 ANSI 模式?我真的不知道,因为我从不使用 Jet,除非通过 Access 本身。
        • 对于 Access2007,请参阅 office.microsoft.com/en-gb/access/HA100766011033.aspx(在“查找数据库支持的 ANSI 标准”部分下)。
        • 我不知道 Jet/ACE 有任何接口可以让您选择 ANSI 查询模式...除了 MS Access —— 取决于“接口”的含义。我怀疑 Access 用户界面在 ANSI-92 查询模式下使用 OLE DB 作为 ACE/Jet 的接口(我使用“接口”这个词来表示不同的东西)。
        • ADO 始终使用 ANSI-92 查询模式,即使是针对 Jet 3.51 .mdb 的 3.51 OLE DB 提供程序。 DAO 始终使用 ANSI-89 查询模式。因此,如果您希望 ACE/Jet-not-MS-Access 应用程序同时支持这两者,您可以在 ADO(或其他 OLE DB)和 DAO 中实现查询。
        【解决方案4】:

        直接的答案是通配符的行为取决于所使用接口的 ANSI 查询模式。

        ANSI-89 查询模式('传统模式')使用* 字符,ANSI-92 查询模式('SQL Server 兼容模式')使用% 字符。这些模式是 ACE/Jet 特有的,与 ANSI/ISO SQL-89 和 SQL-92 标准有一些相似之处。

        ADO 接口 (OLE DB) 始终使用 ANSI-92 查询模式。

        DAO 接口始终使用 ANSI-89 查询模式。

        使用 ODBC 时,可以通过 ExtendedAnsiSQL 标志明确指定查询模式。

        MS Access 用户界面,从 2003 版本开始,可以使用任何一种查询模式,所以不要假设它在任何给定时间都是其中一种(例如,不要在验证中使用特定于查询模式的通配符规则)。

        ACE/Jet SQL 语法有一个ALIKE 关键字,它允许ANSI-92 查询模式字符(%_)不管接口的查询模式如何,但是有@ 987654327@ 关键字与 SQL-92 不兼容(但 ALIKE 仍然具有高度可移植性)。然而,主要的缺点是我知道ALIKE 关键字不受官方支持(尽管我无法想象它会很快消失或改变行为)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-26
          • 1970-01-01
          • 2018-11-01
          • 2011-09-25
          • 1970-01-01
          • 2014-08-29
          • 1970-01-01
          相关资源
          最近更新 更多