【问题标题】:Can I call an SQL Server's user defined function from Microsoft Access我可以从 Microsoft Access 调用 SQL Server 的用户定义函数吗
【发布时间】:2010-11-10 22:21:31
【问题描述】:

我正在尝试将我的 Access 应用程序升级为 Access FE 和 SQL Server 数据库 BE。

我遇到的一个问题是带有“过滤参数”的查询是在客户端执行的,并且需要将所有行从服务器发送到客户端。

示例:

SELECT * FROM MyTable WHERE MyId = Forms!MyForm!MyControl.Value;

此查询将要求将 MyTable 中的所有行从 SQL Server 发送到最终将执行 WHERE 子句的 Access。

我已经阅读了有关 SQL Server 的用户定义函数的信息,如果我可以像在 SQL Server 查询中那样从 Access 中调用它们,它看起来对我有用。

我可以这样做吗?

【问题讨论】:

    标签: sql-server ms-access user-defined-functions


    【解决方案1】:

    MyID 是否已编入索引?如果是这样,那么 Access 不应将整个表从服务器拖过。

    不过,我不确定您从哪里获得条件,因为这不是表单过滤器要发送的 SQL。甚至是保存的 QueryDef,其中包含对表单上控件的硬连线引用。

    尝试删除 .Value(这是多余的,因为它是默认属性)。

    另外,如果是已保存的 QueryDef,请尝试将控件引用定义为参数,即 PARAMETERS Forms!MyForm!MyControl Long;

    基本上,您报告的任何内容都不是标准的访问行为,即 ODBC 链接表到 SQL Server。如果是这样,Access 将无法升级,而且根本不是。

    【讨论】:

    • 好吧,我必须承认我自己没有测试过这个。我在网上某处读到,在这种情况下,Access 不会将 WHERE 发送到 SQL 服务器。如果我能找到一种方法来查看 Access 向服务器发送的内容,我将尝试自己进行测试。
    • Jet/ACE 在将数据检索交给服务器方面非常聪明。您可以通过为其提供服务器无法执行的操作来强制执行此操作(例如在 Access UDF 上进行选择),但您发布的 SQL 根本不会引起任何问题。
    【解决方案2】:

    应该可以使用“直通”查询。

    【讨论】:

      【解决方案3】:

      我同意,传递查询会做到这一点,但这会在您的应用程序窗口中留下一个持久查询对象。

      使用 ADO 记录集和连接对象将允许您将过滤结果返回到记录集中,但您需要编写 TSQL 语句,这与 Access SQL 不同。

      【讨论】:

      • 如果您需要根据来自 Access 表单上的控件的数据过滤返回的数据,那么如果没有它,传递将无法为您提供任何您没有的东西。
      • 我经常在 TSQL 中动态构建一个 sql 字符串(包含表单控件的值),然后更新传递查询的 sql 属性。这个直通查询会给您更快的响应,因为它绕过了 ODBC 转换层。
      猜你喜欢
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多