Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > ADP及SQL SERVER

使用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交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助