Microsoft Access 是一种访问 MS SQL Server 后端数据库中数据的巧妙方法,但我在访问(可以这么说)大型数据表时总是遇到问题,尤其是在 Access 中尝试在结果和设计模式之间切换时。
Access 为我提供了许多漂亮的东西,其中最重要的是 Crosstabs,但这种与服务器的挂起连接让我有点抓狂!
是否有任何 MS Access 专家知道如何优化 ODBC 连接,因此当我只想调整和构建查询时,它不会执行看起来像是全表扫描的操作?
Microsoft Access 是一种访问 MS SQL Server 后端数据库中数据的巧妙方法,但我在访问(可以这么说)大型数据表时总是遇到问题,尤其是在 Access 中尝试在结果和设计模式之间切换时。
Access 为我提供了许多漂亮的东西,其中最重要的是 Crosstabs,但这种与服务器的挂起连接让我有点抓狂!
是否有任何 MS Access 专家知道如何优化 ODBC 连接,因此当我只想调整和构建查询时,它不会执行看起来像是全表扫描的操作?
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/
正如其他人所说,提高大型表性能的唯一方法是让 SQL Server 数据库引擎为您完成工作。一种尚未提及的方法是使用传递查询,这将使您能够将所有代码保留在 MS Access 中,而无需在 SQL Server 上创建对象:
http://support.microsoft.com/kb/303968
您将不得不编写 SQL Server T-SQL 而不是 Access 方言;但是,SQL 2005(在兼容模式 90 下运行时)确实支持 PIVOT 命令。
我的类似问题是选择 Link table/ODBC 连接后 ORACLE ODBC 连接挂起。任务管理器说十分钟后没有响应。然后连接对所有可用表 ping ORACLE。我在 ORACLE ODBC 管理器上打开了日志记录,因此它必须将所有这些内容写入日志,这可能会使任何结果减慢几个小时。一小时后日志为 60 MB,当我将其关闭时,一切都很好!
要关闭它,请转到 Oracle 安装/网络管理/MS ODBC 管理员/跟踪选项卡并将其关闭!
关于 ODBC 的一个很好的资源在这里:http ://eis.bris.ac.uk/~ccmjs/odbc_section.html
不幸的是,Access 无法将大量工作推送到服务器,是的,当针对 SQL Server 中的多个表或视图设计查询时,它会进行大量的表扫描。
您可以使用 SSMS 在 SQL Server 中构建和调整查询(视图),并将视图存储在 SQL Server 中以大幅提升性能,同时仍将 Access 用于您的前端。