存储过程如下:use db_test
go
if exists(select * from sysobjects where name='p_test' and type='p')
drop proc p_test
go
create procedure p_test @ref varchar(100)='烟'
as 
select * from t_finished_deal where item_class=@ref
go
exec p_test使用存储过程来update,delete这样很方便调用,如果记录是一条一条的插入的,insert操作也很方便。想问的是有没有使用调用存储过程来返回记录集的?在sqlserver里知道可以返回游标的,但是上面的sql语句也可以返回查询结果集的啊,但不会返回给vb调用。

解决方案 »

  1.   

    dim rs as adodb.recordsetset rs=cn.execute("exec p_test")
      
    *****************************************************************************
    欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 
    http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  2.   

    在VB或VBA里完全可以通过调用存储过程来返回记录集。
    如上楼,在执行存储过程后,和执行SQL后一样,使用rs.Fields,rs.MoveNext等就可以了。当存储过程中有多于一个返回时,在执行完第一个查询后需要掉到下一个时,使用Set rs = rs.NextRecordset。
    在存储过程中,当不需要返回这个结构时,使用SET NOCOUNT ON,当使用了SET NOCOUNT ON后,需要返回某个结果时,使用SET NOCOUNT OFF即可。
      

  3.   

    楼上两个能不能具体点?
    当存储过程有多个参数需要传递的时候呢
    dim rs as adodb.recordset
    set rs=cn.execute("exec p_test")
    只是执行默认参数的查询啊
    怎么设置一下?
    dim cmd_Test as new command
    cmd_Test.CommandType = adCmdStoredProc
    cmd_Test.CommandText = "p_Test"
    cmd_Test.Parameters("@ref").Value = "酒"
    cmd_Test.Prepared = True
      

  4.   

    strSQL=""
    strSQL=strSQL+"存储过程名 "+vbcr
    strSQL=strSQL+"'"+变量名或 val(控件的值)+"',"+vbcr     '当参数为字符型时,使用单引号
    strSQL=strSQL+变量名或 val(控件的值)+vbcr
    ...
    set rs=cn.execute("存储过程名")
      

  5.   

    带或不带参数的存储过程在VB或其他语言中运行和在SQL查询分析器中使用EXEC执行类此