2

Microsoft Access 是一种访问 MS SQL Server 后端数据库中数据的巧妙方法,但我在访问(可以这么说)大型数据表时总是遇到问题,尤其是在 Access 中尝试在结果和设计模式之间切换时。

Access 为我提供了许多漂亮的东西,其中最重要的是 Crosstabs,但这种与服务器的挂起连接让我有点抓狂!

是否有任何 MS Access 专家知道如何优化 ODBC 连接,因此当我只想调整和构建查询时,它不会执行看起来像是全表扫描的操作?

4

4 回答 4

4

ODBC 驱动程序会将尽可能多的工作传递给 SQL Server,但是一旦您使用像 Nz 这样的 vba 函数或像 PIVOT 这样的非 SQL Server 语法,那么 ODBC 驱动程序必须拉回更多数据和索引才能完成工作客户端。

根据其他答案,要么在 SQL Server 中构建视图并链接到视图,要么使用 Access Data Project。

注意:在 SQL Server 中无法处理具有未知列数的 PIVOT 查询,其方式与 Access 将在本机执行此操作的方式相同 - 因此,如果您在 Access 中针对 SQL Server 数据运行数据透视,您可能会将整个表拉回。必须使用动态 SQL 技术在 SQL Server 中构建透视查询,或者使用硬编码所有列的预保存视图。查看此链接以了解执行此操作的一种方法:

http://www.sqlservercentral.com/articles/Advanced+Querying/pivottableformicrosoftsqlserver/2434/

于 2008-10-15T06:57:43.927 回答
1

正如其他人所说,提高大型表性能的唯一方法是让 SQL Server 数据库引擎为您完成工作。一种尚未提及的方法是使用传递查询,这将使您能够将所有代码保留在 MS Access 中,而无需在 SQL Server 上创建对象:

http://support.microsoft.com/kb/303968

您将不得不编写 SQL Server T-SQL 而不是 Access 方言;但是,SQL 2005(在兼容模式 90 下运行时)确实支持 PIVOT 命令。

于 2008-10-15T07:27:08.017 回答
1

我的类似问题是选择 Link table/ODBC 连接后 ORACLE ODBC 连接挂起。任务管理器说十分钟后没有响应。然后连接对所有可用表 ping ORACLE。我在 ORACLE ODBC 管理器上打开了日志记录,因此它必须将所有这些内容写入日志,这可能会使任何结果减慢几个小时。一小时后日志为 60 MB,当我将其关闭时,一切都很好!

要关闭它,请转到 Oracle 安装/网络管理/MS ODBC 管理员/跟踪选项卡并将其关闭!

关于 ODBC 的一个很好的资源在这里:http ://eis.bris.ac.uk/~ccmjs/odbc_section.html

于 2010-08-18T12:23:21.263 回答
0

不幸的是,Access 无法将大量工作推送到服务器,是的,当针对 SQL Server 中的多个表或视图设计查询时,它会进行大量的表扫描。

您可以使用 SSMS 在 SQL Server 中构建和调整查询(视图),并将视图存储在 SQL Server 中以大幅提升性能,同时仍将 Access 用于您的前端。

于 2008-10-15T00:47:43.377 回答