如何在VB中调用并运行SQL的储存过程?
我有一个数据库名称为客户关系管理信息系统有一个连接数据库的模块PublicconnAsNewADODB.Connection'定义数据库连接对象PublicrsAsNew...
我有一个数据库名称为 客户关系管理信息系统 有一个连接数据库的模块
Public conn As New ADODB.Connection '定义数据库连接对象
Public rs As New ADODB.Recordset '定义数据库记录对象
Public Sub DataLink()
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open "Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=客户关系管理信息系统;Data Source=ALEXANDER-PC"
End Sub
在我的数据库中 照葫芦画瓢 我弄了个储存过程 但是不会调用。。。
希望给我个详细代码 所有分压上 一切为了毕设~~~~ 展开
Public conn As New ADODB.Connection '定义数据库连接对象
Public rs As New ADODB.Recordset '定义数据库记录对象
Public Sub DataLink()
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open "Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=客户关系管理信息系统;Data Source=ALEXANDER-PC"
End Sub
在我的数据库中 照葫芦画瓢 我弄了个储存过程 但是不会调用。。。
希望给我个详细代码 所有分压上 一切为了毕设~~~~ 展开
1个回答
展开全部
我给你两种简单的方法:
1.
过程
CREATE PROCEDURE cyPFindWaitExecSO
----按货品编码查出没有执行销售订单(不包括 CANCEL 作废, stoped 中止)
@GOODSCODE VARCHAR(100)
AS
SELECT SO.WDATE,so.BILLCODE,a.QTY,a.EXEQTY,a.QTY-a.EXEQTY WaitExec,c.CLIENTNO,a.USERDEF1
FROM
(SELECT * FROM S_ORDERd WHERE EXEQTY< qty AND STOPED=0 AND canceled=0 AND GOODSID=
(SELECT GOODSID FROM GOODS g WHERE CODE = @GOODSCODE))AS a
LEFT JOIN S_ORDER so ON so.BILLID= A.BILLID
LEFT JOIN CLIENT c ON c.CLIENTID=so.CLIENTID
调用
cyPFindWaitExecSO是一个查询存储过程, GOODSCODE 是一个参数
Tsql = "exec cyPFindWaitExecSO '" & goodscode & "'"
Rs.Open Tsql, DBcn1
cyPFindWaitExecSO是一个查询存储过程, GOODSCODE 是一个参数
2. 过程
CREATE PROC ConfirmIDcardUsering
@card_id NVARCHAR(16),
@emp_id NVARCHAR(12),
@outStr NVARCHAR(50) OUTPUT
AS
IF EXISTS(SELECT Etime FROM KQID k WHERE k.card_id=@card_id AND etime IS NULL)
SET @outStr = '卡在正常使用中'
ELSE if exists(SELECT Etime FROM KQID k WHERE k.emp_id= @emp_id AND etime IS NULL)
SET @outStr = '该员工已有卡在用'
else
SET @outStr= ''
GO
调用:
Set Cmd = New ADODB.Command
With Cmd
.ActiveConnection = dbcn '数据连接字符串
.CommandType = 4
.CommandText = "ConfirmIDcardUsering" '过程名'
.Parameters.Item("@card_id").Value = Card_id '参数一'
.Parameters.Item("@emp_id").Value = emp_id '参数二'
.Execute
TestS = .Parameters.Item("@outStr").Value '反回的函数'
End With
Set Cmd = Nothing
1.
过程
CREATE PROCEDURE cyPFindWaitExecSO
----按货品编码查出没有执行销售订单(不包括 CANCEL 作废, stoped 中止)
@GOODSCODE VARCHAR(100)
AS
SELECT SO.WDATE,so.BILLCODE,a.QTY,a.EXEQTY,a.QTY-a.EXEQTY WaitExec,c.CLIENTNO,a.USERDEF1
FROM
(SELECT * FROM S_ORDERd WHERE EXEQTY< qty AND STOPED=0 AND canceled=0 AND GOODSID=
(SELECT GOODSID FROM GOODS g WHERE CODE = @GOODSCODE))AS a
LEFT JOIN S_ORDER so ON so.BILLID= A.BILLID
LEFT JOIN CLIENT c ON c.CLIENTID=so.CLIENTID
调用
cyPFindWaitExecSO是一个查询存储过程, GOODSCODE 是一个参数
Tsql = "exec cyPFindWaitExecSO '" & goodscode & "'"
Rs.Open Tsql, DBcn1
cyPFindWaitExecSO是一个查询存储过程, GOODSCODE 是一个参数
2. 过程
CREATE PROC ConfirmIDcardUsering
@card_id NVARCHAR(16),
@emp_id NVARCHAR(12),
@outStr NVARCHAR(50) OUTPUT
AS
IF EXISTS(SELECT Etime FROM KQID k WHERE k.card_id=@card_id AND etime IS NULL)
SET @outStr = '卡在正常使用中'
ELSE if exists(SELECT Etime FROM KQID k WHERE k.emp_id= @emp_id AND etime IS NULL)
SET @outStr = '该员工已有卡在用'
else
SET @outStr= ''
GO
调用:
Set Cmd = New ADODB.Command
With Cmd
.ActiveConnection = dbcn '数据连接字符串
.CommandType = 4
.CommandText = "ConfirmIDcardUsering" '过程名'
.Parameters.Item("@card_id").Value = Card_id '参数一'
.Parameters.Item("@emp_id").Value = emp_id '参数二'
.Execute
TestS = .Parameters.Item("@outStr").Value '反回的函数'
End With
Set Cmd = Nothing
更多追问追答
追问
老是提示我 参数类型不正确,你知道为什么?是我少引用了?还是没加载控件?
不过还是谢谢你,分肯定给你~~
追答
你看下你存储过程中的参数,与你转入的参数对照下,是否相匹配
再在,你可以SQL查询分析器中测试下
EXEC 存储过程 '参数'的方式测一下,是语法问题,还是参数问题 比如下:
exec cyPFindWaitExecSO '" & goodscode & "'"
还有是以解问题帮到别人为乐,不以求分为乐,呵呵
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询