使用Access 2010作为SQL Server数据库的前端

4

我需要快速开发一个应用程序。我选择了SQL Server(2012)作为数据库后端,并将在后端编写所有存储过程、触发器等。

然而,对于UI(登录、报告等),我使用Access 2010作为前端。我对Access和SQL Server都很陌生(早些时候使用过其他数据库)。

目标是让数据库驻留在服务器上,并让客户端使用在其本地机器上运行的Access 2010实例进行连接。

我正在寻找一个快速教程,向我展示如何从Access前端使用SQL Server对象(我相信它被称为链接)-任何有用资源的链接都会非常有帮助,因为我似乎找不到任何有用的东西(我可能使用了错误的关键词搜索)。


SQL Server 2010?只有2005年->2008年->2008 R2->2012年->2012 R2,现在是2014年的SQL Server。 - M.Ali
@M.Ali - 啊,我错了。它是SS 2012。 - Homunculus Reticulli
3个回答

5
假设您在SQL服务器上构建了所有表和数据,那么在Access中将Access链接到该数据库就是一件简单的事情。为了节省开发时间,您可以继续使用Access简单的方法,即使用绑定到这些表的表单。只要启动带有某种条件的表单(例如发票号码),那么该绑定表单将仅从SQL服务器中拉取一个记录到该表单中。(因此,对于该表单不需要编写或使用存储过程等)。并且您在SQL服务器中构建的任何触发器等都将在无需从Access方面做任何事情的情况下运行。
因此,在Access中构建的普通表单,如果绑定到Access中的1百万行数据表,则不需要任何“特殊”代码 - 只需确保使用Access提供的“where”子句启动表单,并且该表单仅会拉取和加载一个记录。
因此,您过去在Access中使用的99%的正常开发流程将继续工作。在大多数情况下,使用SQL服务器与构建编辑此类数据的表单没有太大变化。

然而,对于查询和搜索数据等的报告和某些表单,或需要“处理”数据的某些VBA代码,您可以自由地调用存储过程。您只需在Access中创建一个经过传递的查询。使用该T-SQL的VBA代码如下:

Currentdb.QueryDefs("MyRawt-sqlPassThoughquery").Execute

或者

with CurrentDb.QueryDefs("MyPass") 
     .SQL = "exec sp_myProc" 
     .Execute
end with

过去,在大多数访问应用程序中,您可能使用了链接表 - 这些链接表可以是Access文件(后端)、Oracle或SQL服务器 - 实际应用程序的工作和功能对于所有情况来说基本相同。(因此,您不需要从Access方面了解太多“具体”内容 - 如果您熟悉Oracle或SQL服务器,则将Access用作前端就可以正常工作,并且在Access中使用的典型开发方法仍然是典型的。)
这里有一篇文章概述了链接过程:

https://support.office.com/en-us/article/Import-or-link-to-SQL-Server-data-A5A3B4EB-57B9-45A0-B732-77BC6089B84E?ui=en-US&rs=en-US&ad=US&fromAR=1

请注意,您会看到很多涉及ADP项目的文章 - 自Access 2010以来,它们已被弃用,我不建议再使用ADP项目与Access - 所以要小心,因为许多关于Access + SQL服务器的文章都建立在已不应再使用的ADP项目上。


尽管这是一篇非常出色且高度详细的答案,但我认为使用 Access 数据项目要优于使用连接表和视图(以及 DAO)的方法。 - Nick.McDermaid
也许是这样,但 ADP 支持已经完全消失了两个版本。你必须回到 Access 2010 才能使用 ADP。除此之外,你不能在 Access 中使用 ADP 项目。 - Albert D. Kallal
是的,ADP正在被淘汰,但请看问题的标题,并考虑这显然是一个以SQL Server为中心的应用程序。如何通过链接调用存储过程?我不确定,但我知道它们在ADP中得到了很好的支持。 - Nick.McDermaid
1
尝试阅读我上面的帖子。我在上面有一个调用存储过程的DAO示例。(而且在上面的示例中,我甚至不需要在VBA中声明任何变量。因此,上述示例使用了一个未链接的穿透查询。穿透查询包含连接字符串。您可以在代码中提供连接字符串,但是既然上述DAO调用存储过程的示例如此简单和容易,为什么还要麻烦呢?) - Albert D. Kallal
标题谈论2010年的时候,如何考虑到它是最后一个版本?采用一个已经过时3个版本和周期的开发方法几乎没有任何意义。我无法想象有人会投资于一个已经被折旧的应用选择上。我一直认为ADP很棒,但忽略了.NET在10多年前就放弃了ADO(他们使用ado.net - 一个非常不同的东西,基于sqlproviders而不是原始的ADO)。 - Albert D. Kallal

0

-3

2
ADP已经在两个版本前(Access 2010)被弃用。因此,在2010年之后,不支持或甚至不允许使用ADP项目。下一个大问题是SQL Server正在放弃oleDB支持(并且在最近的版本中开始弃用oleDB)。由于ADP使用ADO和oleDB,那么对于那些仍然停留在行业落后的oleDB支持者来说,情况变得更加糟糕(所以是SQL正在放弃并远离oleDB支持)。无论如何,ADP已经在两个版本前完全从Access中删除。ADP已经像建议使用FoxPro的DOS版本一样成为不可行的选择。 - Albert D. Kallal
1
但是请看问题的标题...这确实是Access 2010。链接表(DAO)比ADO更旧的技术。ADP本地使用大量SQL功能,而链接表无法做到,这似乎是这个问题的关键。您完全正确,它正在被弃用,但我在我的答案中也明确指出了这一点。 - Nick.McDermaid
好的,这里被淘汰的是ADO。.NET社区在10多年前就开始抛弃ADO了。Access现在不再使用也不需要引用DAO,而是使用ACE引擎。所以ACE是DAO "新"版本 - 它向后兼容并且正在收到新功能 - 而ADO则没有。因此,不仅.NET社区在10多年前放弃了ADO,SQL Server也在停止支持oleDB。"oleDB"是仅限于Windows的技术。建议的方法是OpenDataBaseConnetvity - 它是未来的发展方向,并且是平台中立的。 - Albert D. Kallal
1
对于一个可以简化为“我正在使用MS Access 2010,并且大量使用SQL Server数据库对象,例如存储过程,我需要快速开发应用程序”的需求,那么ADP平台似乎是理想的选择,当然前提是它已经被弃用了。这基本上就是我的答案。您可能会发现使用链接表更快地进行开发。我们不知道该应用程序的未来发展路径。 - Nick.McDermaid
我相信你对于其他各种库的弃用是正确的,但我必须说我从未见过使用ODBC驱动程序连接到SQL Server的.NET应用程序。 - Nick.McDermaid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接