【发布时间】:2010-08-04 07:53:04
【问题描述】:
我正在通过 ODBC 连接到 Jet 4 DB。 Jet DB 使用对 Oracle DB 的传递查询。到目前为止,这有效(无法直接访问 p-t 查询,但在查询上创建视图就可以了)。
我需要一些 p-ts 返回的数据子集。最好有参数,但不支持。
两个问题:
1) Jet 似乎确实能够将一些 where 子句推送给 Oracle。例如,我有一个返回 100k 行的直通查询。带有单个过滤子句(例如“district = '1010'”)的 p-t 视图非常快,因此处理似乎发生在 Oracle 上。添加更多子句会使查询减慢到爬行速度,在 CPU 使用率高的情况下循环数分钟。是否有任何文档说明在 Jet 端传递了什么以及做了什么?
2) 有很多关于如何使用 VBA/Access 创建动态直通查询的教程。是否可以使用通过 ODBC 访问的 Jet 来执行此操作(或任何类似的操作)?
谢谢 马丁
编辑: 抱歉这么不清楚。
我有一个通过 ODBC 访问 Jet db 的报告工具。 Jet db 包含一些数据和几个到 Oracle db 的直通查询。一个典型的用例是使用来自 Jet 和 Oracle 的数据为给定部门和给定日期生成报告。这在原则上非常有效。
问题是直通查询不能包含任何参数。直通查询就像一个视图,所以我可以简单地执行“select * from pt_query where dep = 'a' and date = somedate”。然而,Jet 从 pt 加载所有行并在客户端进行全面扫描。这对于 100k 行视图来说非常慢,我需要找到一种方法来避免这种情况。
对于 一些 简单的选择,Jet 似乎确实让 Oracle 完成了艰苦的工作并且不会加载所有行,因此我的问题是 1。
如果这不起作用,我需要找到一种方法来强制 Jet 仅从 Oracle 为给定请求加载我需要的数据。
我知道我可以通过Access VBA修改pts,但我只能通过ODBC连接,所以我只能将SQL传递给Jet,不能调用vb api(除非可以在SQL语句中内联VB)。
【问题讨论】:
-
如果查询Oracle,为什么需要Jet?为什么不使用 ODBC 和 ADO connectionstrings.com/oracle ?
-
一如既往,业务策略...我无法在 Oracle 数据仓库上创建表或上传任意数据。我正在将当前存储在 Access/Jet 中的一些自定义数据与来自 Oracle db 的数据相结合。
-
Jet 传递给服务器数据库的内容将取决于所涉及的服务器数据库以及 ODBC 驱动程序的编写情况。 Jet 将请求尽可能多的元数据以优化查询并将尽可能多的元数据发送到服务器进行处理。我会查看您的 SQL 跟踪,看看是什么导致了更多标准的减速。我会注意到,当我查看 SQL Server 中的跟踪时,来自 Jet 的带有条件的简单查询是使用通用参数化存储过程执行的。我希望在 Oracle 中有类似的东西。
-
是否允许在 Oracle DB 中链接 Access? orafaq.com/node/60
-
如果无法链接,可能值得一试,要么将 Oracle 标签添加到此帖子,要么使用 Oracle 标签重新发布。直通查询需要使用 Oracle 语法,因此最好使用 Oracle 观点,而不是 Jet 观点。
标签: oracle ms-access vba odbc jet