Access传递查询访问Sql Server数据库存储过程(Store procedure)的详细教程
- 2017-07-13 22:10:00
- zstmtony 转贴
- 7396
Access检索和操作Sql Server数据有一种方法叫作pass-throught查询,也就是所说的传递查询。传递查询克服了jet数据库扮演Access与Sql Server之间协同工作的翻译编译角色的缺点。Access可以通过传递查询直接把事务SQL命令发往Sql Server,而不是让jet数据引擎指导Access析数据请求怎样在Sql Server上运行。在Access是虽然没有在链接表上运行查询直观,但是图形界面的缺憾却换来了传递查询中更多的控制和更好的理解。
一、认识传递查询
所以在Access中传递查询向Sql Server传递一组执行的SQL命令,专门用于远程数据处理。
二、为什么要使用传递查询
传递查询包含的是事务SQL语句,它们被直接发往Sql Server进行处理,并不需要jet数据库引擎翻译和编译它们。
2)传递查询的优点:
3、 更新、查询等动作的传递查询比基于链接表的Sql Server动作查询要快得多,尤其是在涉及记录很多的情况下。
另外需要注意的是由于传递查询是发往Sql Server处理数据,因此传递查询不能处理Access独有函数和自定义函数,也不能直接对本地Access表进行操作。
三、存储过程的使用
当两个输入参数为’1/1/2009’和’12/31/2009’运行时,此存储过程会得到与PROC1同样的结果,为2009年所定的货。
四、在Access中调用存储过程
例如:EXECUTE PROC1EXEC PROC2 @startdate=‘1/1/2009’,@enddate=‘12/31/2009’EXEC PROC2 ‘1/1/2009’,‘12/31/2009’
Office交流网(http://www.office-cn.net)
Declear @output char(3)Exec myproc ’参数1’,’参数2’, @outputparameter OUTPUTSelect @outputparameter
Select * Into allrecords ‘Access本地表名称 From myproc ‘传递查询的名称
这里必须用*,因为每个记录集可能包含不同的列。当这个生成表运行时,将生成多个表放置多个结果集,表的名称为(如上例)allrecords、allrecords1、allrecords2、allrecords3、……
这个表名称的编号由Access自动完成。
4) 如果传递查询中只运行一个SQL语句或调用一个只返回一个记录集,可以此传递查询作为数据源建立窗体来察看数据结果。
如果传递查询返回多个记录集,以此为数据源建立窗体也只显示第一记录集的数据。
dim mydb as database ‘定义数据库对象变量 dim myquery as querydef ‘定义查询对象变量 set mydb=currentdb() ‘设置数据库对象变量为当前数据库 set myquery=mydb.createquerydef(“test”) ‘创建名为test的查询 myquery.connect=” ODBC;DRIVER=SQL Server;_ SERVER=127.0.0.1\EXPRESS;UID=sa;PWD=system;DATABASE=cwbase1”’设置查询为传递查询并定义连接字符串 myquery.sql=”select * from zwkmzd”’设置SQL语句,相当于传递查询窗口中的语句 myquery.returnsrecords=true ‘返回记录为”真” Office交流网(http://www.office-cn.net) docmd.openquery “test” ‘运行这个查询,有数据窗口提供数据结果
dim mydb as database ‘定义数据库对象变量 dim myquery as querydef ‘定义查询对象变量 set mydb=currentdb() ‘设置数据库对象变量为当前数据库 set myquery=mydb.querydef(“test”) ‘设名为test的查询 myquery.sql=”select * from zwpzk”’重新设置SQL语句,相当于传递查询窗口中的语句 myquery.returnsrecords=true ‘返回记录为”真” myquery.execute ‘运行这个查,等价docmd.openquery “test”,但execute属性只能用运作查询
dim mydb as database ‘定义数据库对象变量 dim myquery as querydef ‘定义查询对象变量 set mydb=currentdb() ‘设置数据库对象变量为当前数据库 set myquery=mydb.createquerydef(“test”) ‘创建名为test的查询 Office交流网(http://www.office-cn.net) myquery.connect=” ODBC;DRIVER=SQL Server;_ SERVER=127.0.0.1\EXPRESS;UID=sa;PWD=system;DATABASE=cwbase1”’设置查询为传递查询并定义连接字符串 myquery.sql=”exec myproc ’” & me![窗体文本框的值] & “’”’设置SQL语句,相当于传递查询窗口中的语句。当然也可以用SQL语句。 myquery.returnsrecords=true ‘返回记录为”真” docmd.openquery “test” ‘运行这个查询,有数据窗口提供数据结果
也可以先创建一个传递查询,设置传递查询的属性:创建连接字符串,returnsrecords属性设为”yes”,把SQL字符串属性留空。然后用修改传递查询的方法进行修改。
dim mydb as database ‘定义数据库对象变量 dim myquery as querydef ‘定义查询对象变量 Office交流网(http://www.office-cn.net) set mydb=currentdb() ‘设置数据库对象变量为当前数据库 set myquery=mydb.querydef(“test”) ‘设名为test的查询 myquery.sql=”exec myproc ’” & me![窗体文本框的值] & “’”’重新设置SQL语句,相当于传递查询窗口中的语句。当然也可以用SQL语句。 myquery.execute ‘运行这个查,等价docmd.openquery “test”
这样传递查询会根据输入的参数被修改,保存,并可以在此存储过程的基础上创建查询、报表。但是这个方法有一个问题,就是需要修改现有的查询和保存所作的改变。
总结:
传递查询是Access与Sql Server实现客户机/服务器编程的重要工具,传递查询比使用链接表更加直接的与Sql Server交互,绕过了jet数据库引擎,实现了对Sql Server后台有更多的控制,提高了整个系统的效率。
传递查询相关技巧:
- office课程播放地址及课程明细
- Excel Word PPT Access VBA等Office技巧学习平台
- 将( .accdb) 文件格式数据库转换为早期版本(.mdb)的文件格式
- 将早期的数据库文件格式(.mdb)转换为 (.accdb) 文件格式
- KB5002984:配置 Jet Red Database Engine 数据库引擎和访问连接引擎以阻止对远程数据库的访问(remote table)
- Access 365 /Access 2019 数据库中哪些函数功能和属性被沙箱模式阻止(如未启动宏时)
- Access Runtime(运行时)最全的下载(2007 2010 2013 2016 2019 Access 365)
- Activex控件或Dll 在某些电脑无法正常注册的解决办法(regsvr32注册时卡住)
- office使用部分控件时提示“您没有使用该ActiveX控件许可的问题”的解决方法
- RTF文件(富文本格式)的一些解析
- Access树控件(treeview) 64位Office下出现横向滚动条不会自动定位的解决办法
- Access中国树控件 在win10电脑 节点行间距太小的解决办法
- EXCEL 2019 64位版(Office 2019 64位)早就支持64位Treeview 树控件 ListView列表等64位MSCOMMCTL.OCX控件下载
- VBA或VB6调用WebService(直接Post方式)并解析返回的XML
- 早期PB程序连接Sqlserver出现错误
- MMC 不能打开文件C:/Program Files/Microsoft SQL Server/80/Tools/Binn/SQL Server Enterprise Manager.MSC 可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版
- sql server连接不了的解决办法
- localhost与127.0.0.1区别
- Roych的浅谈数据库开发系列(Sql Server)
- sqlserver 自动备份对备份目录没有存取权限的解决办法
- 安装Sql server 2005 express 和SQLServer2005 Express版企业管理器 SQLServer2005_SSMSEE
联系人: | 王先生 |
---|---|
Email: | 18449932@qq.com |
QQ: | 18449932 |
微博: | officecn01 |