2017-09-26 65 views
1

我最近已将Access后端传输到SQL Server,现在我知道如何将查询传递给SQL Server以使其执行计算。但是,这仅适用于如果仅包含表查询我,例如:访问2010前端将查询传递给SQL Server 2014后端

Q_Test:

SELECT * FROM T_Test 

,但如果我想通过对包含另一个查询服务器通过查询(与此查询包含一些其他查询太),例如:

Q_Test3:

SELECT * FROM Q_Test2 
INNER JOIN .. 

Q_Test2:

Select * From Q_Test.. 

然后我认为它笨重,并且为了将代码翻译成“唯一表”SQL代码变得复杂。是否有可能以一种聪明的方式将包含子查询的查询传递给SQL Server?我在我的Access前端保存了一些查询,有些我通过VBA代码打开,有些是在Forms的Recordsources中编写的,需要更改它们才能使其工作。对于只包含表的查询,VBA代码可以工作。

林的任何帮助

回答

1

这里的主要问题非常感谢的是,你试图让SQL Server使用访问构建物的SQL Server无法甚至可能知道的。它对Access查询以及Access文件中包含的任何其他对象都一无所知。

它只知道它自己的对象 - 换句话说,你可以在SQL Server Management Studio的对象浏览器中看到的内容是你可以在传递查询中“看到”的内容,因为这是你正在使用的环境。

您应该考虑传递查询允许您使用对于Access而言属于外部的SQL Server结构,例如存储过程或表值函数,或Access SQL方言中不支持的某些T-SQL语法。考虑到这一点,您应该在SSMS中编写存储过程,对其进行测试,并在合适时从Access传递查询中调用该过程。如果您需要更新(例如,将结果绑定到表单并编辑数据),请考虑使用视图。请注意,视图上哪些更新是合法的,有一些限制。

+0

好的,谢谢你的帮助。我将尝试将自己读入存储过程。似乎是正确的。但是,是否有可能在sql server上保存查询,以便知道后面的表?或者将查询保存到他可以阅读的文件或其他内容? –

+0

为什么不只是[链接你的SQL Server表](https://support.office.com/en-us/article/Import-or-link-to-data-in-an-SQL-Server-database-a5a3b4eb- 57b9-45a0-b732-77bc6089b84e?ui = en-US&rs = en-US&ad = US)到Access应用程序并对它们运行本地查询?传递查询需要什么?除非您使用无法转换为Access方言的SQL Server方言,或者需要Access应用程序不需要的操作,否则可能不需要传递查询。 – Parfait

+0

因为运行本地查询的速度非常慢。你可以纠正我,但我认为这是运行SQL Server的原因,所以它可以做计算,只给我结果。我的程序现在运行得非常慢,所以这就是为什么即时尝试SQL服务器..使其运行速度更快。 我也试图通过vba打开一个查询,我通过访问。我可以在访问中打开它,它打开方式更快,但如果我尝试用vba打开此查询,它说它不知道对象“myquery” –

0

请理解,传递查询就是这样做的。 SQL Server不知道你的Access应用程序是关于什么的。

访问和ODBC驱动程序知道这一点,所以如果您包含本地查询,表或函数,所有处理将发生在Access中。

传递查询只能处理服务器对象。 提示:但是,这些可能会包含由Access应用程序填充的临时表。