在将 MS Access 拆分为 SQL Server 以执行查询后使用哪个引擎

Posted

技术标签:

【中文标题】在将 MS Access 拆分为 SQL Server 以执行查询后使用哪个引擎【英文标题】:After splitting MS Access to SQL Server for execution queries which engine is used 【发布时间】:2017-09-09 11:11:40 【问题描述】:

我想知道在将 MS Access 拆分到 SQL Server 后,在 Access、MS Access 的引擎或 SQL Server 的引擎中执行查询?

拆分到SQL Server(后端)后,有多少用户可以使用MS Access前端?使用 MS Access(前端)和 MS Access(后端)时,用户数量是否仍然有限?

我们也可以将 MS Access 中的查询传输到 SQL Server 吗?

【问题讨论】:

【参考方案1】:

这是多个问题,但我会尽力回答所有问题:

1.拆分数据库后,有多少用户可以同时使用一个 Access 前端?

这取决于:如果您使用单个文件作为前端(您不应该这样做),并且多个用户正在打开该单个文件,您仍然受到 Access 最大用户数量的限制。

但是,如果您为每个用户提供自己的前端副本,则您可以获得 MS-SQL 的最大连接数 (32,767)。但是,您可以使用 VBA 打开到同一个服务器的多个连接,因此实际上这个数字可能会更低。

如果您同时使用 MS Access 作为前端和后端,您将受到 Access 最大用户数的限制。

2。拆分数据库后,我的现有查询使用哪个查询引擎?

拆分数据库后,所有现有查询仍由 JET/ACE (Access) 数据库引擎执行。但是,您可以将查询更改为传递查询以在 SQL Server 数据库上运行查询。请注意,T-SQL 与 JET/ACE SQL 不同,您的查询可能需要相应调整。

如果您想优化特定查询,您可以将其完全作为视图移动到 SQL 服务器(您应该这样做,尤其是对于经常使用的查询)。通过这种方式,SQL Server 可以做一些事情,比如存储查询执行计划和缓存。

【讨论】:

永远不要共享前端! @BitAccesser 不,当然不是,但只是说明如果您要这样做,则最大用户数量将受到限制(就像您应该真正将查询移至服务器一样)。 你应该在回答中提到这一点,否则人们认为这还不错,除非他们没有达到这个限制。 @BitAccesser 调整答案 值得注意的是,对于“普通查询”(SELECT foo FROM a JOIN b WHERE c,虽然由 ACE 引擎运行,但繁重的工作将在 SQL Server 上完成。例外情况是,例如,当您在查询。@Masoud【参考方案2】:

假设您通过ODBC 链接,这取决于您的使用情况。这两种方法都适用于MS-SQL(您称之为 SQL Server),但其他方法也适用(我使用mysqlas BE)。如果您使用旧的访问查询,则使用 jet,但您可以使用在服务器上执行的直通查询。

用户数量几乎是无限的(32,767 connections 感谢@Erik von Asmuth),并且您不会像在 ms-access 中那样在许多用户中损失性能。

您的查询应该长期转移到服务器上。但是您可以从旧的开始(性能较差,但与多用户 ms-acces BE 相比,它的速度很快,只是一些减速ms-access-query-on-linked-tables-with-multiple-joins-is-very-slow)。

另一大优势:您可以随时备份您的数据库,无论其他人是否正在使用它。

查看Move-Access-data-to-a-SQL-Server 了解操作方法和Optimizing Microsoft Office Access Applications Linked to SQL Server。

试一试,你永远不会回去。

【讨论】:

【参考方案3】:

只是为了澄清当前的 Microsoft Access。通过并弃用项目。在同一个局域网中,将 ODBC 链接到 SQL Server、MySQL 等没有问题。

每个用户都必须有自己的前端。前端文件不能被多个用户同时共享。

Access 是一个前端数据库;查询在 Access 中运行。

同时用户数将由后端服务器定义。当然,作为前端数据库存在有效负载问题。今天的 PC 非常强大,但超过 1M 的活动记录,您不应忽视合理数量的 RAM 和处理。

【讨论】:

请注意,传递查询绝不会被弃用。 ADP 项目,是的。 查询在 Access 中运行,但如果您在该查询中设置限制,则该查询将被传递到服务器,并且只有一行(或多行)被拉下网络线路。某些查询,例如具有多个表(连接)的查询,如果查询在服务器端运行,则 Access 将提取更多记录,但对于从 Access 运行的基本查询,仅从服务器而不是整个表中提取所需的记录。这包括直接绑定到表格的表格。如果您打开带有“where”子句的表单,则只会从 SQL Server 中提取第一条记录,而不是从整个表中提取。 此外,前端可以由多个用户同时共享。这是一种不好的做法,应该避免,但肯定是可能的。

以上是关于在将 MS Access 拆分为 SQL Server 以执行查询后使用哪个引擎的主要内容,如果未能解决你的问题,请参考以下文章

编辑器中的 ms-access VBA 长 sql 查询字符串行拆分(内联双引号)

MS Access 2007 中的 SQL 内部连接

在 MS Access 中管理和调试 SQL 查询

MS Access 和 SQL Server 连接(可信来源与传递登录凭据)

多个 MS Access 前端连接到单个远程 SQL Server 后端

将 Access 交叉表查询转换为 SQL Server