野火烧不完 2015-04-07 04:57 采纳率: 100%
浏览 1722
已采纳

求助下关于VB6连接SQL Sever 2008数据库的问题

Private Sub Borrow_Click() '单击“借书”按钮
Dim Readernumber, ISBN, BookID As String
Dim in_ReaderID, in_ISBN, in_BookID, out_str '储存过程执行的参数
Dim ReturnValue As Integer '定义返回值变量
Dim Strs As String
Readernumber = ReaderID.Text
ISBN = T_ISBN.Text
BookID = T_BookID.Text
'如果借书证号、ISBN、图书ID均不为空
If Readernumber <> "" And ISBN <> "" And BookID <> "" Then
SqlCmd.CommandText = "Book_Borrow"
SqlCmd.CommandType = adCmdStoredProc
'追加参数法调用存储过程
Set in_ReaderID = SqlCmd.CreateParameter("@in_ReaderID", adChar, adParamInput, 8)
SqlCmd.Parameters.Append (in_ReaderID)
Set in_ISBN = SqlCmd.CreateParameter("@in_ISBN", adChar, adParamInput, 18)
SqlCmd.Parameters.Append (in_ISBN)
Set in_BookID = SqlCmd.CreateParameter("@in_BookID", adChar, adParamInput, 10)
SqlCmd.Parameters.Append (in_BookID)
Set out_str = SqlCmd.CreateParameter("@out_str", adChar, adParamInput, 30)
SqlCmd.Parameters.Append (out_str)
'参数赋值
SqlCmd("@in_ReaderID") = ReaderID.Text
SqlCmd("@in_ISBN") = T_ISBN.Text
SqlCmd("@in_BookID") = T_BookID.Text
SqlCmd.Execute (ReturnValue) '执行存储过程,并将返回值赋给ReturnValue
Strs = SqlCmd.Parameters("@out_str") '将存储过程输出参数的值赋给变量Strs
MsgBox (Strs) '给出提示信息
'删除参数
SqlCmd.Parameters.delete ("@in_ReaderID")
SqlCmd.Parameters.delete ("@in_ISBN")
SqlCmd.Parameters.delete ("@in_BookID")
SqlCmd.Parameters.delete ("@out_str")
'刷新BorrowADO控件
BorrowADO.RecordSource = "SELECT * FROM RBL WHERE 借书证号='" + Trim(Readernumber) + "'"
BorrowADO.Refresh
Else
MsgBox ("请输入正确的借书信息!")
End If
End Sub
数据库已经设置好,Book_Borrow存储过程也设置好了,在SQL中执行未出错
代码中 SqlCmd.Execute (ReturnValue) '执行存储过程,并将返回值赋给ReturnValue 这一行出错
实时错误'-2147217904 (80040e10)'
过程或函数'Book_Borrow'需要参数'@out_str',但未提供该参数
希望有高手可以帮我查查错,感谢

附上SQL里的设置
USE MBOOK

GO
CREATE PROCEDURE Book_Borrow @in_ReaderID char(6),@in_ISBN char(18),
@in_BookID char(10),@out_str char(30) OUTPUT
AS
BEGIN
/*判断是否存在该读者*/
IF NOT EXISTS(SELECT * FROM TReader WHERE 借书证号=@in_ReaderID)
BEGIN
SET @out_str='该读者不存在'
RETURN 0
END
/*判断是否存在该图书*/
IF NOT EXISTS(SELECT * FROM TBook WHERE ISBN=@in_ISBN)
BEGIN
SET @out_str='该图书不存在'
RETURN 0
END
/*判断借书量是否已经到了借书上限数5*/
IF(SELECT 借书量 FROM TReader WHERE 借书证号=@in_ReaderID)=5
BEGIN
SET @out_str='读者借书量不能大于5'
RETURN 0
END
/*判断库存量是否为0*/
IF (SELECT 库存量 FROM TBook WHERE ISBN=@in_ISBN)=0
BEGIN
SET @out_str='图书库存量为0'
RETURN 0
END
/*判断读者是否已经借过该书*/
IF @in_ISBN IN (SELECT ISBN FROM TLend WHERE 借书证号=@in_BookID)
BEGIN
SET @out_str='读者已经借过该书'
RETURN 0
END
/*判断该书是否已经被借*/
IF EXISTS(SELECT * FROM TLend WHERE 图书ID=@in_BookID)
BEGIN
SET @out_str='该图书ID已存在'
RETURN 0
END
BEGIN TRAN /*开始一个事务*/
/*插入借书记录*/
INSERT INTO TLend(借书证号,ISBN,图书ID,借书时间)
VALUES(@in_ReaderID,@in_ISBN,@in_BookID,GETDATE())
IF @@ERROR>0 /*如果前面一条SQL语句出错则回滚事务并返回*/
BEGIN
ROLLBACK TRAN
SET @out_str='执行过程中遇到错误'
RETURN 0
END
UPDATE TReader SET 借书量=借书量+1 WHERE 借书证号=@in_ReaderID
IF @@ERROR>0 /*如果前面一条SQL语句出错则回滚事务并返回*/
BEGIN
ROLLBACK TRAN
SET @out_str='执行过程中遇到错误'
RETURN 0
END
UPDATE TBook SET 库存量=库存量-1 WHERE ISBN=@in_ISBN
IF @@ERROR>0 /*如果前面一条SQL语句出错则回滚事务并返回*/
BEGIN
ROLLBACK TRAN
SET @out_str='执行过程中遇到错误'
RETURN 0
END
UPDATE TBLend SET 是否借出=1 WHERE 图书ID=@in_BookID
IF @@ERROR=0 /*如果所有语句都不出错则结束事务并返回*/
BEGIN
COMMIT TRAN
SET @out_str='借书成功'
RETURN 1
END
ELSE /*如果执行出错则回滚所有操作并返回*/
BEGIN
ROLLBACK TRAN
SET @out_str='执行过程中遇到错误'
RETURN 0
END
END

这是在SQL 2008中执行的Borrow_Book过程

  • 写回答

3条回答 默认 最新

  • feiyun0112 2015-04-07 05:12
    关注

    设置为Output
    Set out_str = SqlCmd.CreateParameter("@out_str", adChar, adParamOutput, 30)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Oracle触发器记录修改前后的字段值
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器