【传递查询】如何在Access中使用SQL Server数据库引擎进行查询

hi,大家好,我是Edon

今天,我要大家分享一个与SQL Server相关联的示例。

使用Access进行应用系统开发,基于安全性、扩展性等多种原因,我们可能会使用SQL Server作为后台数据库。如果不使用ADP(ADP的方式已经淘汰了,可以不再学习),客户前端就只能通过链接表的方式连接到SQL Server数据库。但用链接表方式时,由于对数据的处理依然要通过Access 的Jet引擎来进行的,所以当数据量很大的时候,性能还是很差。这个时候我们就可以用到SQL Server了。

在Access中让SQL Server来进行查询的方式就是传递查询。假如我们需要进行一个选择查询,可以先将查询在SQL Server中定义为一个带参数的存储过程,然后在Access中通过传递查询来返回存储过程查询得到的结果。但在传递查询中不支持VBA,所以我们不能使用类似于“Forms!窗体名!控件名”的方式将条件绑定到窗体控件作为变量。对于此种情况,我们可以在每次通过传递查询进行查询的时候,用代码自动重写查询的SQL属性来变通实现。

具体示例步骤如下:

01、在SQL Server中创建一个带参数的存储过程

我们先在SQL Server创建一个带参数的存储过程,文中的示例用的是SQL Server 2012版本。这里我们来查询对应产品的信息。

图片

 

CREATE PROCEDURE SP_Product
(@ProductName AS NVARCHAR(100))
AS
SELECT *
FROM dbo.tbl_ProductList
WHERE ProductName LIKE @ProductName;
GO

02、在Access中创建查询

a.在Access中新建一个查询,不选择任何表,然后通过点击菜单——查询——SQL 特定查询——传递查询,将查询更改为传递查询:

 

图片

b.点击工具栏上图片的按钮,显示出查询属性窗口;

c.在查询属性窗口中,点击“ODBC 连接字符串”属性右边的生成器,通过向导设置到SQL Server的连接:

图片

d.成功连接到SQL Server数据库后的效果如下:

图片

这里的配置是我自己电脑上的信息,大家在测试时需要替换成自己的信息。

如何链接SQL Server数据库请查询我之前的文章: 如何链接SQL Server中的表

03、查询中添加传递代码

再将该查询的中添加传递查询的代码:

图片

 

execute SP_Product @ProductName='%'

04、创建窗体

创建一个窗体,创建一个用于输入查询内容的名为“查询内容”的文本框,和一个用于执行查询的名为“查询”的命名按钮,以及一个用于显示查询结果的子窗体,这里我们直接用查询对象作为子窗体的来源对象:

 

图片

 

 

05、添加代码

接下来在窗体的加载事件过程和按钮的单击事件过程中,添加代码:

 

Private Sub Command0_Click()
CurrentDb.QueryDefs("qry结果").SQL = "execute SP_Product @ProductName='%" & Me.txt查询内容 & "%'"
Me.Child1.Requery

End Sub

Private Sub Form_Load()
CurrentDb.QueryDefs("qry结果").SQL = "execute SP_Product @ProductName='%'"
Me.Child1.Requery
End Sub

06、运行测试

窗体的加载事件代码用于打开窗体时查询所有记录,效果如下:

 

图片

在输入框中输入要查询的值,然后单击“查询”按钮,我们就能得到由SQL Server数据库引擎查询得到的记录:

 

图片

 

好了,大家快去试一下吧!

Access传递查询_说明 说明和示例 Access传递查询访问Sql Server数据方法简介 Access检索和操作Sql Server数据有一种方法叫作pass-throught查询,也就是所说的传递查询传递查询克服了jet数据库扮演AccessSql Server之间协同工作的翻译编译角色的缺点。Access可以通过传递查询直接把事务SQL命令发往Sql Server,而不是让jet数据引擎指导Access析数据请求怎样在Sql Server上运行。在Access是虽然没有在链接表上运行查询直观,但是图形界面的缺憾却换来了传递查询更多的控制和更好的理解。 一、认识传递查询 传递查询与一般的Access查询类似,但是在传递查询使用使用事务SQL(Sql Server使用SQL),所以在Access不能图形化地建立传递查询,而只能手工键入所有的SQL语句。 传递查询有两部分组成:以SQL写成的命令字符串和ODBC连接字符串。 SQL字符串包含一个或多个事务SQL语句,或者包含一个SQL程序流程控制语句的复杂过程,还可调用存在于Sql Server上的存储过程。 ODBC连接字符串来标识命令字符串将要发送的数据源,连接字符串也可包括指定Sql Server的用户登录信息。 所以在Access传递查询Sql Server传递一组执行的SQL命令,专门用于远程数据处理。 二、为什么要使用传递查询 首先看看在链接表上运行查询的复杂步骤: 1、 jet数据库引擎分析SQL字符串。 2、 jet数据库引擎编译SQL字符串并决定哪一部分发往Sql Server。 3、 jet数据库引擎创建一个事务SQL命令字符串并将宻它发往Sql Server。 4、 Sql Server分析和编译事务SQL命令字符串。 5、 Sql Server完命令字符串定义的任务,如果有返回值的话,则向jet数据库引擎返回结果记录。 传递查询包含的是事务SQL语句,它们被直接发往Sql Server进行处理,并不需要jet数据库引擎翻译和编译它们。 传递查询的优点: 1、 传递查询可以使用Sql Server的固有函数和存储求过程。 2、 传递查询可以记录Sql Server返回的警告和统计信息。 3、 更新、查询等动作的传递查询比基于链接表的Sql Server动作查询要快得多,尤其是在涉及记录很多的情况下。 另外需要注意的是由于传递查询是发往Sql Server处理数据,因此传递查询不能处理Access独有函数和自定义函数,也不能直接对本地Access进行操作。 三、存储过程的使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Access开发易登软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值