写了一个存储过程,先用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请高手指点
存储过程在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请高手指点
解决方案 »
- 被一家公司开发了一个软件,那个公司副总不给钱如何办?
- 求助VB问题picturebox里面有一个painpicture怎么用啊
- 键列信息不足或不正确
- 请教:如果不安装SQLServer2000客户端,如何在VB中添写配置代码使与SQLServer2000服务器连接?
- 關於twain的問題
- VB写的DLL无法在网页调用,请问何解?急,谢谢!!!
- 以前看到过这个的,现在想不起来了,请谁知道的提示一下
- 谁有VB编的管理系统(最好是用于办公室类的)???
- 欢迎
- 用VB编写的ActiveX DLL 或者 OCX 在运行时需要运行库吗?
- SOS!SOS!SOS! 高手请进 SQL Server 存储过程返回结果集
- vb编程判断操作系统
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
一定要返回记录集总数rscordcound的话,try:Set rst = new ADODB.Recordset
rst.CursorLocation = adUseClient
rst.Open cmd, , adOpenKeyset, adLockReadOnly
Debug.Print rst.RecordCount 来查看是否返回了记录集
'我晕了,完整的示例如下,如果你引用了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
数据库连接是没问题的,我觉得问题还出出现在存储过程返回上,但不知道怎么改