使用sql server带参数的存储过程作为报表数据源
时 间:2022-05-07 11:10:47
作 者:青源 ID:63238 城市:大兴
摘 要:sql server 带参数的存储过程、ACCESS报表。
正 文:
关键字:sql server 带参数的存储过程、ACCESS报表、传递查询
什么是存储过程: 存储过程 是在sql server数据库服务器上执行的,而且是编译过的,所以执行速度非常快。不懂的小伙伴可以百度一下。有条件的,但没用过的,可以用一下感受一下,就能明白了,当然建议数据量大的情况,若是本来就没多少条数据,多半没什么感觉。
概 述:
之前我用ACCESS查询作为报表的数据源,但是执行时,需要将所有数据从SQL server 数据库服务器加载到本的地ACCESS客户端,这样就会产生大量的网络流量,加载过来之后,再从海量数据里面查询出符合条件的数据。数据量大了之后,这种方法变得很慢,有人反映,想要打印个报表需要1分多钟才能生成打印预览界面。
解决思路:
由于传递查询不支持在里面输入[forms].[frm窗体名].[控件名] 这种自定义变量
可以这么解决:
1、先创建一个传递查询,设置好ODBC连接符字符串,返回记录设置为:是
2、用VBA代码修改这个传递查询,以生成一个包含参数的传递查询的sql 语句。
3、将报表数据来源改为这个传递查询 qstp测试 就可以了。
4、关于在多用户环境下,是否会存在多个用户同时使用同一个存储过程导致一些未知的问题,可以将传递查询的结果插入到一个临时表中去。这样即使在同一时间多个用户同时调用一个存储过程,理论上也不会出现问题。(未经测试,仅个人猜想)
5、将这个 qstp测试 传递查询作为报表数据源,或者将传递查询的结果保存到一个临时表中去,然后将报表数据源改为这个临时表。
如下图:
Private Sub Command2_Click()
'先断判控件是否输入内容,如为空则 进行提示
If IsNull([Forms]![frm测试].[Text0]) Then
MsgBox "请输入生产单号!", vbInformation, "提示"
Else
Dim qdf As Object 'DAO.QueryDef
Set qdf = CurrentDb.QueryDefs("qstp测试")
qdf.SQL = "exec pro测试 '" & [Forms]![frm测试].[Text0] & "'"
DoCmd.OpenQuery "qstp测试", acViewNormal '打开查询查看结果
End If
End Sub
效果如下图:
至此,这个问题就解决完了,本人亲测试有效。
速度非常快,原来需要一分多钟,使用这种方法之后,基本一两秒钟就有结果了。
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- 【Access Inputbo...(12.23)
- 【Access Dsum示例】...(12.16)

学习心得
最新文章
- 仓库管理实战课程(7)-创建查询(03.31)
- 仓库管理实战课程(6)-创建查询(03.29)
- 仓库管理实战课程(5)-字段属性(03.27)
- 设备装配出入库管理系统;基于Acc...(03.24)
- 仓库管理实战课程(4)-建表操作(03.22)
- 仓库管理实战课程(3)-需求设计说...(03.19)
- 仓库管理实战课程(2)-软件背景和...(03.18)
- 仓库管理实战课程(1)-讲师介绍(03.16)
- 统计当月之前(不含当月)的记录数怎...(03.11)
- 【Access Inputbox示...(03.03)