如果是ado的话 采用parameter对象 比如dim cmd as adodb.command dim param1 as adodb.parameter dim param2 as adodb.parametercmd.commandtext="存储过程名" cmd.commandtype=adcmdstoredproc 'param1返回值 param2传入参数 set param1=cmd.createparameter("Return",adinteger,adparamreturnvalue) set param2=cmd.createparameter("col1",adbstr,adparaminput)param2.value=传入值cmd.parameters.append param1 cmd.parameters.append param2cmd.execute
TO:foolishtiger(吴文智) To:sqstudio_zsp(镇山炮) 请再帮我看一下。这两天我试验了下你们给出的代码,自己也找书研究了一下, 但还是不能解决。代码如下:Private Sub Command1_Click() Dim cn As New ADODB.Connection Dim cmdTest As ADODB.Command Dim parIn As ADODB.Parameter Dim parOut As ADODB.Parameter
cn.Open "driver={SQL Server};server=server;uid=sa;pwd=sa;database=hs" Set cmdTest = New ADODB.Command
cmdTest.CommandText = "lsh" 'lsh为存储过程名 cmdTest.CommandType = adCmdStoredProc Set parIn = cmdTest.CreateParameter("abc", adInteger,adParamInput) cmdTest.Parameters.Append parIn '输入参数用 adParamOutput Set parOut = cmdTest.CreateParameter("return",adBSTR,adParamReturnValue) cmdTest.Parameters.Append parOut
cmdTest.Execute
MsgBox cmdTest.Parameters("return").Value, vbInformation End Sub 当执行到cmdtest.execute那句提示: 连接无法用于执行此操作。在此上下文中它可能已被关闭或无效。
漏了 Set adoTest.ActiveConnection = cn
To:foolishtiger(吴文智) To:sqstudio_zsp(镇山炮) 请再帮我看看,这两天我试验了一下你们给出的代码,自己也找书看了看,但还是 没有解决问题,代码如下: Private Sub Command1_Click() Dim cn As New ADODB.Connection Dim cmdTest As ADODB.Command Dim parIn As ADODB.Parameter Dim parOut As ADODB.Parameter cn.Open "driver={SQL Server};server=server;uid=sa;pwd=sa;database=hs"
Set cmdTest = New ADODB.Command
cmdTest.CommandText = "lsh" 'lsh为存储过程名 cmdTest.CommandType = adCmdStoredProc Set parIn = cmdTest.CreateParameter("abc", adInteger, adParamInput) cmdTest.Parameters.Append parIn Set parOut = cmdTest.CreateParameter("return", adBSTR,adParamReturnValue) cmdTest.Parameters.Append parOut
cmdTest.Execute
MsgBox cmdTest.Parameters("return").Value, vbInformation End Sub 当执行到cmdTest.Execute时提示: 连接无法用于执行此操作,在此上下文中它可能已被关闭或无效。
你怎么回事? 你当然需要先在你的这个“lsh”的存储过程中加一个类型是 Output的参数啦!如果你的存储过程没有输出参数,怎么可能光在 VB里面做点东东就能获得返回值了呢?????例程: Create Proedure Test @iReturn as int [output] as set @iReturn=100完了!
我已经增加了,我的存储过程内容为: CREATE PROCEDURE dbo.lsh @hao as int output AS select * from 流水号表 update 流水号表 set @hao=流水号, 流水号=流水号+1 GO 请再帮看看
'以下是Rdo方式,Ado差不多,自己去改写吧dim con as rdoconnection dim sSql as string dim Qry as rdoqueryset con= rdoenvironments(0).openconnection("pubs") sSql="{ 返回值 = call 存储过程名(参数1,参数2) }" set qry = con.createQuery(" ",sSql)qry(0).direction = rdParamReturnValue '返回值 qry(1).direction = raParamInput '输入 qry(2).direction = rdParamOutput '输出qry(1)="传入值"qry.executemsgbox "存储过程返回值" & qry(0) msgbox "存储过程输出值" & qry(2)
TO:junglerover(灌木丛) 我觉得我已经按照你说的去做了,但还是不行,请再帮看看。现在的代码为: Private Sub Command1_Click() Dim cmdTest As ADODB.Command Dim parIn As ADODB.Parameter Dim parOut As ADODB.Parameter
Set cmdTest = New ADODB.Command Set cmdTest.ActiveConnection = cn cmdTest.CommandText = "lsh" cmdTest.CommandType = adCmdStoredProc Set parIn = cmdTest.CreateParameter("abc", adInteger, adParamInput) cmdTest.Parameters.Append parIn
'输入参数用 adParamOutput Set parOut = cmdTest.CreateParameter("return", adInteger, adParamOutput) cmdTest.Parameters.Append parOut
cmdTest.Execute
MsgBox cmdTest.Parameters("return").Value, vbInformation End Sub存储过程为: CREATE PROCEDURE dbo.lsh @hao as int output AS select * from 流水号表 update 流水号表 set @hao=流水号, 流水号=流水号+1 GO
TO:wlk(温水) 不好意思,RDO我没有研究过,你能否给出一段ADO的代码呢?
调用存储过程应该是很简单吧 Dim cmm As New ADODB.Command With cmm .ActiveConnection = '连接 .CommandType = adCmdStoredProc .CommandText = '存储过程名称 .Parameters(1).Value = '参数1值 .Parameters(2).Value = '参数2值 .Execute reValue = .Parameters(0).Value '默认返回值 strResult = .Parameters(7).Value '存储过程中对应的返回值 End With Set cmm = Nothing
(我对command对象不熟悉) 我有一个存储过程 create proc is_user @username varchar(10),@userid varchar(10) as declare @result integer /*user 为表名,username 和 usrid 都为字段名*/ select * from user where username=@username and userId=@userid if @@rowcount=0 set @result=0 else set @result=@@rowcount最后。我想在VB中得到@result的值应该怎么做? 我的存储过程还有缺陷吗? 请指点
Dim parIn As ADODB.Parameter
Dim parOut As ADODB.Parameter
Set cmdTest = New ADODB.Command
cmdTest.Prepared
'输入参数用 adParamInput,其中名称,类型长度和值按你的需要来写
Set parIn = cmdTest.CreateParameter(名称, 类型, adParamInput, 长度, 值)
cmdTest.Parameters.Append parIn
'输入参数用 adParamOutput
Set parOut = cmdTest.CreateParameter("输出参数", 类型, adParamOutput, 长度, 值)
cmdTest.Parameters.Append parOut
cmdTest.Execute
MsgBox cmdTest.Parameters("输出参数"), vbInformation
采用parameter对象
比如dim cmd as adodb.command
dim param1 as adodb.parameter
dim param2 as adodb.parametercmd.commandtext="存储过程名"
cmd.commandtype=adcmdstoredproc
'param1返回值 param2传入参数
set param1=cmd.createparameter("Return",adinteger,adparamreturnvalue)
set param2=cmd.createparameter("col1",adbstr,adparaminput)param2.value=传入值cmd.parameters.append param1
cmd.parameters.append param2cmd.execute
To:sqstudio_zsp(镇山炮)
请再帮我看一下。这两天我试验了下你们给出的代码,自己也找书研究了一下,
但还是不能解决。代码如下:Private Sub Command1_Click()
Dim cn As New ADODB.Connection
Dim cmdTest As ADODB.Command
Dim parIn As ADODB.Parameter
Dim parOut As ADODB.Parameter
cn.Open "driver={SQL Server};server=server;uid=sa;pwd=sa;database=hs"
Set cmdTest = New ADODB.Command
cmdTest.CommandText = "lsh" 'lsh为存储过程名
cmdTest.CommandType = adCmdStoredProc
Set parIn = cmdTest.CreateParameter("abc", adInteger,adParamInput)
cmdTest.Parameters.Append parIn
'输入参数用 adParamOutput
Set parOut = cmdTest.CreateParameter("return",adBSTR,adParamReturnValue)
cmdTest.Parameters.Append parOut
cmdTest.Execute
MsgBox cmdTest.Parameters("return").Value, vbInformation
End Sub
当执行到cmdtest.execute那句提示:
连接无法用于执行此操作。在此上下文中它可能已被关闭或无效。
Set adoTest.ActiveConnection = cn
To:sqstudio_zsp(镇山炮)
请再帮我看看,这两天我试验了一下你们给出的代码,自己也找书看了看,但还是
没有解决问题,代码如下:
Private Sub Command1_Click()
Dim cn As New ADODB.Connection Dim cmdTest As ADODB.Command
Dim parIn As ADODB.Parameter
Dim parOut As ADODB.Parameter
cn.Open "driver={SQL Server};server=server;uid=sa;pwd=sa;database=hs"
Set cmdTest = New ADODB.Command
cmdTest.CommandText = "lsh" 'lsh为存储过程名
cmdTest.CommandType = adCmdStoredProc Set parIn = cmdTest.CreateParameter("abc", adInteger, adParamInput)
cmdTest.Parameters.Append parIn
Set parOut = cmdTest.CreateParameter("return", adBSTR,adParamReturnValue)
cmdTest.Parameters.Append parOut
cmdTest.Execute
MsgBox cmdTest.Parameters("return").Value, vbInformation
End Sub
当执行到cmdTest.Execute时提示:
连接无法用于执行此操作,在此上下文中它可能已被关闭或无效。
还是不行,加了那句:Set adoTest.ActiveConnection = cn(根据我的变量名不同,我
将其改为:Set cmdTest.ActiveConnection = cn 后,
又提示:为过程或函数lsh指定的参数太多。
你当然需要先在你的这个“lsh”的存储过程中加一个类型是
Output的参数啦!如果你的存储过程没有输出参数,怎么可能光在
VB里面做点东东就能获得返回值了呢?????例程:
Create Proedure Test
@iReturn as int [output]
as
set @iReturn=100完了!
CREATE PROCEDURE dbo.lsh @hao as int output
AS
select * from 流水号表
update 流水号表 set @hao=流水号, 流水号=流水号+1
GO
请再帮看看
两点,绝对不可能得不到返回值:(现在我并不确定你
已经做到)
1。保证你对ADOCommand对象添加的参数和你的存储过程中
定义的数量相等、类型匹配;
2。用来获取返回值的参数对象的Direction属性不应是
adParamReturnValue,而应是adParamOutput
dim sSql as string
dim Qry as rdoqueryset con= rdoenvironments(0).openconnection("pubs")
sSql="{ 返回值 = call 存储过程名(参数1,参数2) }"
set qry = con.createQuery(" ",sSql)qry(0).direction = rdParamReturnValue '返回值
qry(1).direction = raParamInput '输入
qry(2).direction = rdParamOutput '输出qry(1)="传入值"qry.executemsgbox "存储过程返回值" & qry(0)
msgbox "存储过程输出值" & qry(2)
我觉得我已经按照你说的去做了,但还是不行,请再帮看看。现在的代码为:
Private Sub Command1_Click()
Dim cmdTest As ADODB.Command
Dim parIn As ADODB.Parameter
Dim parOut As ADODB.Parameter
Set cmdTest = New ADODB.Command
Set cmdTest.ActiveConnection = cn cmdTest.CommandText = "lsh"
cmdTest.CommandType = adCmdStoredProc Set parIn = cmdTest.CreateParameter("abc", adInteger, adParamInput)
cmdTest.Parameters.Append parIn
'输入参数用 adParamOutput
Set parOut = cmdTest.CreateParameter("return", adInteger, adParamOutput)
cmdTest.Parameters.Append parOut
cmdTest.Execute
MsgBox cmdTest.Parameters("return").Value, vbInformation
End Sub存储过程为:
CREATE PROCEDURE dbo.lsh @hao as int output
AS
select * from 流水号表
update 流水号表 set @hao=流水号, 流水号=流水号+1
GO
不好意思,RDO我没有研究过,你能否给出一段ADO的代码呢?
Dim cmm As New ADODB.Command
With cmm
.ActiveConnection = '连接
.CommandType = adCmdStoredProc
.CommandText = '存储过程名称
.Parameters(1).Value = '参数1值
.Parameters(2).Value = '参数2值
.Execute
reValue = .Parameters(0).Value '默认返回值
strResult = .Parameters(7).Value '存储过程中对应的返回值
End With
Set cmm = Nothing
谢谢!!!能不能写详细一点,我对COMMAND对象一点都不熟悉。
以下是昨天我贴的帖子。怎么我在这里说,说了又说,你就是一点都听不进去呢?
我已经告诉了你,应该:
保证你对ADOCommand对象添加的参数和你的存储过程中
定义的数量相等、类型匹配而看你的程序:
VB调用过程中提供了两个参数,一个IN的,一个OUT的
存储过程只有一个参数,OUT的。
这个也叫做“数量相等,类型匹配”??????????????????要是这样也能不出错,我简直要一头撞死了。
非常感谢,终于解决了,看来太粗心了,竟然没有注意到多了一个参数。哈哈哈
再次表示感谢!!!!这些分我也给其他人一点,因为他们毕竟也帮了我,你不会介意吧?
非常感谢,终于解决了,看来太粗心了,竟然没有注意到多了一个参数。哈哈哈
再次表示感谢!!!!这些分我也给其他人一点,因为他们毕竟也帮了我,你不会介意吧?
我有一个存储过程
create proc is_user @username varchar(10),@userid varchar(10) as
declare @result integer
/*user 为表名,username 和 usrid 都为字段名*/
select * from user where username=@username and userId=@userid
if @@rowcount=0
set @result=0
else
set @result=@@rowcount最后。我想在VB中得到@result的值应该怎么做?
我的存储过程还有缺陷吗?
请指点