在access中编程输出sql server存储过程的返回值

      前两天,自己在access中实现一个功能时,想利用sql server中的存储过程实现,于是想到到网上找资料,看有没有能实现VBA编程实现输出sql server存储过程的返回值的例子。没有还真有(没有做不到的,只有想不到的)。我看过之后,就试着做起来,测试了,问题就出来了,总是提示:运行时错误...多步 OLE DB ...,从来没遇到过的错误提示,就又上网搜索了一下,结果列表随即显示,果然这么多此类问题,真希望从中找到答案和解决办法,谁知我打开了一个又一个网址,分析测试了我的程序一遍又一遍,还是没有头绪。最后,我想到到论坛发帖子,谁知,结果是没人回帖。

      我总有这样的感觉,有些问题需要花一定的时间来解决,也许过个几天,你就找到答案了,前提是:别气馁,多想想,多测试。这不,我有花了两天的时间,今天上午的不懈努力,终于解决了我的问题。可是,我还没明白是为什么。

      今天,第一次发表“文章”,来分享下我的感受和我的问题。

      下面就是我在网上找的例子,直接贴在我的程序中提示错误(刚开始,我以为是我自己的程序有问题,后来我就试试找的例子,没想到也是错误的),所以我就猜测各种原因,最终被我找到了。

       首先在sql server中创建存储过程(正确的)

CREATE PROCEDURE sp_2
@p int output,
@p1 int,
@p2 int
as
set @p = @p1+@p2
return 99

        在access中的一个窗体按钮上测试

Private Sub Command1_Click()
Dim cmd As New ADODB.Command
Set cmd.ActiveConnection = CurrentProject.Connection(其实根本原因就是这个连接的问题,不知道是不是在access中不适合用,我就用了,最后想到是这个地方有错)
 '@return_value"这个参数在输入参数的最前面,名称是固定的

    cmd.Parameters.Append cmd.CreateParameter("@return_value", adInteger, adParamReturnValue)

 '输入和输出的参数顺序同存储过程的参数顺序
    cmd.Parameters.Append cmd.CreateParameter("@p", adInteger, adParamOutput)
    cmd.Parameters.Append cmd.CreateParameter("@p1", adInteger, adParamInput, , 1)
    cmd.Parameters.Append cmd.CreateParameter("@p2", adInteger, adParamInput, , 2)
    cmd.CommandText = "sp_2"
    cmd.CommandType = adCmdStoredProc
    cmd.execute (执行到这会提示错误,就是我上面提到的“...多步 OLE DB...”)
    Dim i As Integer
    For i = 0 To cmd.Parameters.Count - 1
        Debug.Print cmd.Parameters(i).name & "=" & cmd.Parameters(i).Value
    Next i
    Set cmd.ActiveConnection = Nothing
    Set cmd = Nothing

要想正常的运行,需要把

Set cmd.ActiveConnection = CurrentProject.Connection 替换为:

Dim cn As New ADODB.Connection
    cn.Open "Provider=SQLOLEDB;Data Source=servername;Initial Catalog=datebasename;User ID=<username>;Password=<strong password>;"
    Set cmd.ActiveConnection = cn

就可行了。

      这是我自己的实践,如有什么错误,希望提示,大家共同学习。

  

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值