使用sql server带参数的存储过程作为报表数据源-青源
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> ADP及SQL SERVER


使用sql server带参数的存储过程作为报表数据源

发表时间:2022/5/7 11:10:47 评论(0) 浏览(2671)  评论 | 加入收藏 | 复制
   
摘 要: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群(群号:198465573)
 
 相关文章
简述什么是储存过程  【红尘如烟  2011/4/11】
在Access快速开发平台中调用SqlServer存储过程优化性能...  【红尘如烟  2017/10/20】
获取SQL SERVER某个数据库中所有存储过程的参数  【宏鹏  2017/12/13】
报表的记录源是存储过程,应该怎么做?  【杨雪  2018/2/27】
平台企业版如何运行后台sql中其他数据库中的存储过程  【123  2018/4/9】
调用参数存储过程  【萤火虫  2018/6/27】
Access快速开发平台企业版--开发平台调用储存过程怎么加参数?  【麥田  2022/2/14】
Access快速开发平台企业版--调用的储存过程怎么获得输出的参数...  【金宇  2022/3/3】
常见问答
技术分类
相关资源
文章搜索
关于作者

青源

文章分类

文章存档

友情链接