写了一个存储过程,先用SELECT INTO语名将多个数据表连接查询后生成一个局部临时表#abcd ,然后再用Select 语句对临时表进行分组统计,想将分组统计的多行记录结果集用ADO的方式返回到VB中,并在卓面表格中显示出来, 
  存储过程在SQL Server查询分析器中执行通过且正确。在VB中调用时出现提示:
过程Proc_Energy01’需要参数 ’@OutParam’,由于本人是初次使用存储过程,所以不知道怎么做,请各位高手指教,存储过程该如何写才行,谢谢!存储过程及VB调用程序如下:
存储过程程序:(用VB创建的存储过程)
SQLCreate = "CREATE  PROCEDURE Proc_Energy01(@InParam Char(6),@Outparam CURSOR VARYING OUTPUT)" & _
        vbCrLf & "as" & vbCrLf & _
        "select Q.油田ID,Q.油田名称,R.区块ID,S.井号,年月,日产液,日产油,含水 into #abcd " & _
        "from 油田名称表 Q,油田区块名称表 R,井号名称表 S,产能原始表 T " & _
        "where Q.油田ID=R.油田ID AND R.区块ID=S.区块ID AND S.井号=t.井号 and t.年月=@InParam  " & _
        "order by Q.油田ID,R.区块ID " & vbCrLf & _
        "select 油田名称,count (*) as 井数,sum(日产液) 日产液,sum(日产油) as 日产油," & _
        "100*(sum(日产液)-sum(日产油)/0.805)/sum(日产液) as 含水  from #abcd   " & _
        "where 日产液<>0  " & _
        "group by 油田名称  order by 油田名称" & vbCrLfVB调用程序
Dim Conn As New ADODB.Connection
    Dim cmd As New ADODB.Command
    Dim paraInput As ADODB.Parameter
    Dim rst As ADODB.Recordset
    Set Conn = New ADODB.Connection    
    Set paraInput = New ADODB.Parameter
    Set cmd = New ADODB.Command
    With paraInput
        .Type = adVarChar      '参数类型
        .Size = 6             '参数长度
        .Direction = adParamInput     '参数方向,输入或输出
        .Value = '200707'
    End With
    cmd.Parameters.Append paraInput       '加入参数
    Conn.CursorLocation = adUseClient       '使用由本地游标库提供的客户端游标
    Conn.Open ConnectionString
    Set cmd.ActiveConnection = Conn
    With cmd
        .CommandType = adCmdStoredProc
        .CommandText = "Proc_Energy01"                        '存储过程名
        .CommandTimeout = 15
        .Execute                                                       '运行存储过程
        Set rst = .Execute                                         '如果有记录集返回的写法
    End With
    Debug.Print rst.RecordCount请高手指点

解决方案 »

  1.   


    VB调用程序 
    Dim Conn As ADODB.Connection 
    Dim cmd As New ADODB.Command 
    Dim paraInput As ADODB.Parameter 
    Dim rst As ADODB.Recordset Set Conn = New ADODB.Connection     
    Conn.CursorLocation= adUseClient
    Conn.Open ConnectionString 
        
    Set cmd = New ADODB.Command 
    With cmd 
        .ActiveConnection = Conn 
        .CommandType = adCmdStoredProc 
        .CommandText = "Proc_Energy01"     
         .CommandTimeout = 15 
    End With
     
    Set paraInput = cmd.CreateParameter("@InParam", adChar, adParamInput, 6, "200707")
    cmd.Parameters.Append paraInputset rst = cmd.execute                       
    Debug.Print rst.RecordCount 
      

  2.   

    老大,还是不行,在执行到Debug.Print rst.RecordCount,提示对象关闭时不允许操作 
      

  3.   

    哦,看你的代码不仔细,用exceute的方法返回不了recordcount
      

  4.   


    一定要返回记录集总数rscordcound的话,try:Set rst = new ADODB.Recordset
    rst.CursorLocation = adUseClient
    rst.Open cmd, , adOpenKeyset, adLockReadOnly
      

  5.   

    老大,我是用的VB6,执行时提示: 实时错误'91'   对象变量或with块变量未设置,我是想要结果集(多个记录),只是用
    Debug.Print rst.RecordCount 来查看是否返回了记录集
      

  6.   


    '我晕了,完整的示例如下,如果你引用了ADO,并且正确连接上了数据库,再不行的话我是帮不上你了Dim Conn As ADODB.Connection 
    Dim cmd As ADODB.Command 
    Dim paraInput As ADODB.Parameter 
    Dim rst As ADODB.Recordset 
    '连接数据库:
    Set Conn = New ADODB.Connection     
    Conn.Open ConnectionString '你要检查下ConnectionString中的连接字符串正确否    
    '配置cmd    
    Set cmd = New ADODB.Command 
    With cmd 
        .ActiveConnection = Conn 
        .CommandType = adCmdStoredProc 
        .CommandText = "Proc_Energy01"     
        '.CommandTimeout = 15 
    End With
    '添加参数 
    Set paraInput = cmd.CreateParameter("@InParam", adChar, adParamInput, 6, "200707")
    cmd.Parameters.Append paraInput
    '返回记录集
    Set rst = new ADODB.Recordset
    rst.CursorLocation = adUseClient
    rst.Open cmd, , adOpenKeyset, adLockReadOnly
    '输出结果              
    Debug.Print rst.RecordCount
    '----------------------------------
    '不一定非要返回RecordCount的话,你也可以用execute的方法返回记录集,
    '这个方法返回的记录集是只读向前的,但效率高:'返回记录集
    set rst=cmd.execute
    '输出结果
    while not rst.eof
        debug.print rst!油田ID
        rst.movenext
    wend      
      

  7.   

    老大,执行到while not rst.eof时提示:实时错误'3704'       对象关闭时不允许操作
    数据库连接是没问题的,我觉得问题还出出现在存储过程返回上,但不知道怎么改