access链接表访问Sql Server数据方法简介-芊芊
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> ADP及SQL SERVER


access链接表访问Sql Server数据方法简介

发表时间:2010/9/27 7:52:43 评论(2) 浏览(32356)  评论 | 加入收藏 | 复制
   
摘 要:Access链接表访问Sql Server数据方法简介
正 文:
Access链接表访问Sql Server数据方法简介
Access能与许多厂商的数据库服务器和多种类型的数据库系统协同工作,我们推荐Sql Server做为Access的后端部件。这种基于客户/服务器模型下的系统,大部分数据保存在服务器上,而数据的处理则分布在客户机和服务器上,能充分发挥客户/服务器结构的优势,提高数据库的数据处理的最大效率,所以作为数据库设计者必须能精确地知道哪理存放数据,哪理处理数据,减少本地数据处理量,减小网络中的数据流量。
笼统地讲从Access访问Sql Server中的数据的方法有:链接表、传递查询或存储过程、ADPAdo对象连接等。
一、链接表的基本原理
最简单最直观的就是用Access链接表的方法访问Sql Server的数据。连到SQL Server Access MDB前端数据库位于这种体系结构的客户端,它使用ODBC 与后端数据库进行通信。Access 数据库利用ODBC装载Jet数据库引擎来代理服务器和Access客户之间全部信息的传输。链接表建立之后Access就可以像本地表一样使用它,并且在使用链接表中的数据时Access都会自动地通过ODBC接口与Sql Server连接,然后在AccessSql Server之间进行数据传输,Sql Server的数据可以被多个用户共享。当表链接之后,就可以像使用Access中其他的链接表一样使用它了。可以创建引用这些链接表的查询、窗体和报表。
尽管ODBCMDB可能不如ADP,但它们却是非常强大和有用的
Access链接Sql Server数据表时,jet数据库引擎以ODBC函数调用的形式向Sql Server发出数据请求,jet数据库引擎负责翻译和编译Access的数据请求,将它转换为发给Sql Server的事务Sql语句(事务Sql语句是Sql Server使用的Sql Access Sql略有不同),并优化整体性能决定哪个进程应在本地进行,哪个进程应在远程的Sql Server上进行。但是由于事务Sql Access Sql 之间固有的微妙的差别,某些涉及到链接表间不平等链接的Access查询可能产生错误的结果,有时一个看上去无害的链接表查询可能要用去很长时间,可能是在查询是包含了Sql Server不能理解的结构,使得jet数据库引擎将大量的Sql Server数据传送到Access前端,所以有时jet数据引擎也能妨碍数据操作的精确与效率。
    由于AccessSql Server 使用各自的数据处理方法,AccessSql Server间的所有通信都是通过ODBC处理使用两个系统彼此沟通,所以连接两个系统时总是会有一些复杂的情况存在。
二、使用链接表访问数据
在准备链接一个Sql Server表之前,首先要确定有Sql Server的登录名和密码,允许与目标数据库连接。
在表链接后,AccessSql Server中取回表或视图的数据定义,将它们翻译成等价的Access格式,然后存储在本地的数据库中。
但是当Access数据库打开时,与Sql Server的连接不会自动建立,除非启动下列有关的Sql Server的动作:
l       调用链接到服务器的表
l       执行影响到Sql Server表中数据的传递查询
l       试图链接位于服务器的表或视图
仅仅在以上三个动作之一完成之后,Access数据库应用才会与Sql Server连接。
为了从Sql Server获取数据,Access将检查是否Sql Server用户ID和密码保存在本地,如果当初创建链接表时保存了Sql Server的用户ID和密码,Access将把它们发往Sql Server并得到确认之后,从Sql Server中接收数据。如果当初创建链接表时未选择保存密码,Access将在第一次用户连接Sql Server时,提示数据库用户输入登录ID和密码。所以,如果将密码与链接表一同保存,在使用表时就不用每次都提示输入Sql Server的登录信息。
三、链接表潜在的问题和缺陷及应对方法
      虽然Access使用链接Sql Server看上去是实现客户机/服务器结构最方便最直观的方法,但是实际上是与两个系统之间非常复杂的逻辑链接的应用。
l       链接表的某些属性是不能被修改的。因为链接表位于Sql Server中,Access对它没有控制权,甚至都不知道它是一个表还是视图。Access仅在MDB文件中保存链接表的属性,但不会自动检测Sql Server上表结构的变化,这就是为什么有时必须刷新链接表的原因。
l       没有唯一索引的链接表不可更新。
l       如果表中发生某种变化那么与Sql Server的连接必须被刷新。如果与Access应用链接的Sql Server表的结构发生变化,必须刷新链接有表的链接,就是让Access重新检查Sql Server/视图并且刷新链接表的所有属性。
l       包含复杂连接的视图链接到Access应用作为链接表使用时,可能应用会被延迟,如果是多个用户运行这个应用可能最终会导致服务器崩溃。
l       把表从ODBC 数据源链接到Access可能是低效的和非常危险的。Jet数据库引擎必须为链接表代理全部与SQL Server的通信。如果Jet引擎不能使用服务器上的惟一索引,服务器可能要传送(下载)所有的纪录让Jet去处理。设想一下这样的情形。你链接到一个拥有500万条纪录的表,使用不依据惟一索引的查询原则创建一个要求500万条纪录的Access查询。取决于表设计模式,SQL Server可能会将全部500万条纪录交由Jet去排序!如果运行的是一台低端机器,这可能要花几个小时。
要真正发挥后端SQL Server的强大作用,必须使用存储过程。SQL Server上的存储过程就像Access中的保存查询一样它们是编译过的可在服务器上执行的SQL语句,能够接受参数。
用传递查询把SQL 语句发送到服务器,因为这样比使用链接表要快捷。但这种方法比使用存储过程要慢,因为存储过程是编译过的,它在服务器上建有一个执行计划以求达到最快的速度,使用存储过程可使你事半功倍。
除了速度提高外,存储过程还可以降低网络的通信量你只需要向服务器发送个1KB大小的执行指令,而不是一个10OKB或更大的未编译的SQL 语句。还有,服务器只把你需要的数据发送给你。
所以使用存储过程可作为ACcess客户/服务器应用的基础,使用链接表用于查找填充组合框和列表框的数据了还有(报表)等工作。如果要达到更好的最佳性能,可以给想使用的服务器表建立精确的复制品,在启动应用程序时填充这此表。这样做的话,在应用中就需要较少的网络与数据库服务器的连接当然,仅能在相对的静态表中使用这一技术(静态表就是不频繁变化的表)。

Access软件网交流QQ群(群号:198465573)
 
 相关文章
《物流管理系统》用Access快速开发平台开发我的软件学习心得  【郭金平  2013/6/19】
【Access源码示例】选项卡向左,向右滚动改进\用按钮控制选项卡...  【漏蛧尐魚℡  2013/6/20】
【Access示例】报表打印当前窗体内容  【缪炜  2013/6/21】
Access开发平台--修改窗体输入密码才能有权限进行改数据,对字...  【麥田  2013/6/22】
【Access教程】ACCESS统计不重复记录个数问题  【漏蛧尐魚℡  2013/6/23】
常见问答
技术分类
相关资源
文章搜索
关于作者

芊芊

文章分类

文章存档

友情链接