本人现在在用VB6.0写一个信息管理程序,是C/S的,想在后台用存储过程完成对数据的操作。现在又这样一个存储过程:CREATE PROCEDURE [admin_now] 
  @name varchar
AS
  DECLARE  @R varchar
Select @R=mm  from admin where name= @name
   RETURN  @R
GO              ------用于获取用户表admin中从text1.text获取的用户名对应的密码
在VB6.0中关于调用这个存储过程的代码:
Private Sub cmd1_Click()
Dim Conn As New ADODB.Connection
Dim Cmd As New ADODB.Command
Dim Par As ADODB.Parameter
Dim y As String
y = Text1.Text
Conn.Open "Driver={SQL server};server=FS;uid=sa;pwd=;database=yd"    ----建立连接
Cmd.CommandType = adCmdStoredProc                                    ----要设置Command类型为存储过程
Set Cmd.ActiveConnection = Conn                                      ----现在设置Command的数据连接
Set Par = Cmd.CreateParameter("R", adInteger, adParamReturnValue)    -----返回值的参数
Cmd.Parameters.Append Par
Set Par = Cmd.CreateParameter("name", adChar, adParamInput, 20, y)   -----调用的参数
Cmd.Parameters.Append Par
Cmd.CommandText = "admin_now"
Set DS = Cmd.Execute
MsgBox Cmd.Parameters("R").Value    ----问题在这里,这个确定提示上面除了个提示按钮什么也没有,没有返回的@R的值
Conn.Close
Set Cmd = Nothing
Set Conn = Nothing
Set DS = Noting                               -----这里总是提示“类型不匹配”?
End Sub现在问题是返回的值看不到,而我想把这个返回的值赋给一个变量,然后判断值对不对,不知道这样的语句该怎样写?
我才学的调用存储过程,但书上写的都不清楚,不用具体语句是做什么用的,为什么这样写?各位老师能不能推荐本具体讲调用存储过程的帖子或书。我找的这段代码还是太多了,现在我还是搞不清怎样向存储过程传递多个参数,让控件直接显示存储过程返回的值或视图返回的查询结果(表格)。
最好有一个调用存储过程的函数,想这样:函数名(存储过程名,传递参数,)就好了,hehe .
我在线等老师们的解答,谢谢!

解决方案 »

  1.   

    dim ds as recordset
    msgbox ds("R")
      

  2.   

    现在提示Set ds = Cmd.Execute这个语句类型不匹配了
      

  3.   

    我用你写的msgbox ds("R")
    替换了MsgBox Cmd.Parameters("R").Value
    然后加上dim ds as recordset
    ,我是想让返回的值赋给一个变量,不在MSGBOX中显示了
      

  4.   

    是Recordsets
    你把Option Explicit 加上是好习惯。
      

  5.   

    现在提示:msgbox ds("R")对象变量未设置
      

  6.   

    我又用这个代码改写了这调用:
    Dim strS As String '定义一变量
    Dim adoconn As New ADODB.Connection
    Dim adocomm As New ADODB.Command
    Dim ReturnValue As Integer '调用存储过程的返回值
    Dim y As String
    y = "&Text1.Text&"
    adoconn.ConnectionString = Adodc1.ConnectionString
    adoconn.Open
    Set adocomm.ActiveConnection = adoconn
    adocomm.CommandText = "admin_now"
    adocomm.CommandType = adCmdStoredProc
    adocomm.Parameters(1) = "y"
    adocomm.Parameters(2) = R 'OutputParameters可以为任意的字符串或数字
    adocomm.Execute
    ReturnValue = adocomm.Parameters(0) '存储过程的返回值,返回0则成功执行。
    strS = adocomm.Parameters(2) '把存储过程的输出参数的值赋给变量strS
    Text3.Text = strS但在这一句adocomm.Parameters(2) = R 提示“在对应所需名称或序数的集合中,未找到项目”,
    这是怎么回事啊?
      

  7.   

    Option Explicit 还没加?R是什么
      

  8.   


    adoconn要先使用客户端游标adoconn.CursorLocation = adUseClient,然后再打开数据库。
      

  9.   

    我把你说的这句:adoconn.CursorLocation = adUseClient加在了adoconn.ConnectionString = Adodc1.ConnectionString
    的前面,但还是不行啊,还是提示“在对应所需名称或序数的集合中,未找到项目”
      

  10.   

    谢谢各位老师的解答,我现在继续写代码,现在我调用insert_ghs往ghs表里增加一条记录,
    存储过程CREATE PROCEDURE [insert_ghs]
    (@ghsID_1  [smallint],
     @ghsname_2  [nvarchar](50),
     @ghspym_3  [nvarchar](50))AS INSERT INTO [yd].[dbo].[ghs] 
     ( [ghsID],
     [ghsname],
     [ghspym]) 
     
    VALUES 
    ( @ghsID_1,
     @ghsname_2,
     @ghspym_3)
    GO
    书上的代码是这样的:
    模块Module1里面:
    Public SQLusername As String
    Public SQLpassword As String
    Public Myconnection As New ADODB.Connection
    然后主窗口:
    Private Sub Form_Load()
      Myconnection.ConnectionString = "Driver={SQL server};server=FS;uid=sa;pwd=;database=yd"
    Myconnection.Open
    End Sub
    再是添加供货商窗口的“保存”按钮:
    Private Sub ComSaveA_Click()  
      Dim A As String
     Dim rsaddnew As ADODB.Recordset
      Set rsaddnew = Myconnection.Execute("exec insert_ghs"& ""&Text1.Text&"',"& ""&Text2.Text&"',"& ""&Text3.Text&"")
    ----这一句总是提示“缺少:分隔符或”),这是咋回事,书上写错了
    End Sub
      

  11.   

    必要的空格还是要加的。不能把它们连成一片。Set rsaddnew = Myconnection.Execute("exec insert_ghs" & "" & Text1.Text & "'," & "" & Text2.Text & "'," & "" & Text3.Text & "")
      

  12.   

    http://topic.csdn.net/u/20080317/10/e37d695a-7d49-403e-ac0d-9f93c1fe8e92.html