Office中国论坛/Access中国论坛
标题:
调用存储过程传递参数的例程
[打印本页]
作者:
zhuyiwen
时间:
2002-4-9 08:28
标题:
调用存储过程传递参数的例程
这是开发版中关于调用存储过程传递参数的例程,供大家参考
Public Sub TestParameter
' 这段代码演示:
' 1. 创建一个使用输入/输出参数的存储过程
' 2. 创建参数并调用存储过程
' 3. 显示结果并删除这个存储过
Dim conn As ADODB.Connection
Dim Param As ADODB.Parameter
Dim Com As ADODB.Command
Dim strConn As String
' 给连接字符串变量赋值
strConn = "PROVIDER=SQLOLEDB;SERVER=(local);User Id=sa;Password=;DATABASE=pubs"
' 建立连接对象
Set conn = New ADODB.Connection
' 给连接对象赋予连接字符串并打开连接
conn.ConnectionString = strConn
conn.Open strConn
' 建立新的命令对象
Set Com = New ADODB.Command
' 在PUBS数据库中创建一个新的存储过程
Com.CommandText = "Create Procedure sp_ReturnsOutput @authorid " & _
"varchar(11),@result Varchar(20) OUTPUT As Select @result " _
& "= (Select au_fname from authors Where Au_id = @authorId)"
Com.ActiveConnection = conn
Com.Execute
' 现在已经创建两个参数: 一为输入,一为输出
' 在ADO对象中创建输入参数
Set Param = Com.CreateParameter("AuId", adVarChar, adParamInput, 11)
Param.Value = "172-32-1176"
Com.Parameters.Append Param
' 在ADO对象中创建输出参数
Set Param = Com.CreateParameter("Return", adVarChar, adParamReturnValue, 20)
Com.Parameters.Append Param
' 注:当创建参数时,你必须包括参数的大小(长度)
' 加载命令对象的SQL字符串
Com.CommandText = "sp_ReturnsOutput"
Com.CommandType = adCmdStoredProc
' 调用
Com.Execute
' 显示结果
MsgBox "The first name of the author with an SS of " & _
Com.Parameters(0).Value & " is " & Com.Parameters(1).Value
' 删除存储过程
Com.CommandText = "Drop Procedure Sp_ReturnsOutput"
Com.CommandType = adCmdText
Com.Execute
conn.Close
End Sub
复制代码
[此贴子已经被zhuyiwen于2002-4-9 0:28:11编辑过]
作者:
tmtony
时间:
2002-4-9 09:07
很好, 注解非常详细 :)
作者:
zhuyiwen
时间:
2002-4-9 09:13
照抄的,谢谢夸奖!
作者:
zhuyiwen
时间:
2002-4-11 08:00
InputParameters 属性
可以使用 InputParameters(输入参数)属性来指定或确定向窗体或报表的 RecordSource 属性的 SQL 语句中或者向 Microsoft Access 项目 (.adp) 中作为记录源的存储过程中传递的输入参数。
设置
<name> <type> = <expression> [,<name> <type> = <expression> ] ...
InputParameters 具有以下参数:
参数 说明
name: 参数的名称,如果是存储过程参数,要求以“@”符号开头。参数名中不允许含有空格。
type: 参数的 SQL Server 数据类型。
expression: Microsoft Access 表达式,该表达式将传递到要解析的表达式服务。与其他表达式相类似,它可以引用窗体上的其他控件;可以为用户输入提供提示文本;也可以是原义文字。
如果符号“=”后没有跟随文字或直接跟随逗号,使用如同查询或在 CREATE PROC 命令中定义的默认参数值,执行过程。如果参数没有在字符串中列出,也是这样。
可以通过使用属性表或 Visual Basic 来设置此属性。
说明
当使用 RecordSource 属性时:
用于在 RecordSource 属性的 SQL 语句中使用下列语法的 InputParameter 属性字符串的示例。
state char=[Form]![状态列表], salesyear smallint=[输入年度利息]
将产生设置为“状态列表”控件当前值的状态参数,提示用户输入 salesyear 参数。如果存在不在此列表中的其他参数,这些参数可以获得默认值。
对于在 InputParameter 列表中的每个非默认参数,应该使用 ? 号执行查询。
Access 中的刷新或重新查询命令(通过菜单、键盘或浏览工具栏)将触发查询的重新执行。用户可以通过调用标准的 Recordset.Requery 方法在代码中完成此操作。如果参数的值是与窗体上的控件绑定的,在重新查询时使用控件的当前值。当控件的值更改时,不自动重新执行查询。
当使用存储过程时:
一个在存储过程中使用 InputParameter 属性字符串示例如下:
@state char=[Form]![状态列表], @salesyear smallint=[输入年度利息]
结果是将 @state 参数设置为“状态列表”控件的当前值,并且用户得到输入 @salesyear 参数的提示。如果存在未列出的存储过程的其他参数,这些参数将被赋予默认值。
存储过程应该用包含 {call } 语法的命令字符串来执行,并且在语法中,对 InputParameter 列表中的每一个非默认参数使用一个 ? 号来表示。
Access 中的刷新或再次查询命令(通过菜单,键盘,或定位栏)将触发存储过程的重新执行。用户可以在代码中通过调用标准 Recordset.Requery 方法来实现此操作。如果参数值与窗体上的控件绑定,在再次查询时使用控件的当前值。当控件的值更改时,存储过程不会自动地重执行。
如果存储过程具有参数,那么当首次选择存储过程作为窗体的记录源时,将激发此生成器对话框。在最初创建 InputParameters 字符串以后,同一对话框也将被用作更改字符串的生成器。在此情况下,不考虑参数列表是从字符串中何处取出的。
在使用 ActiveX 数据对象 (ADO) 的 Command 和 Parameter 对象的代码中也可以设置参数值。如果返回的是结果集,通过设置窗体的 Recordset 属性,可以将窗体与结果绑定。ADO 代码只是处理不返回结果集(如:操作查询);返回输出参数;返回多个结果集的存储过程的唯一方法。
作者:
HG
时间:
2002-7-17 19:17
您們測試過這個貼子嗎?它是有問題的,隨然寫的不錯。
但在VBA中輸入和輸出參數,並不是件很容易的事情。
作者:
zhuyiwen
时间:
2002-7-20 21:23
肯定是测试过的!
作者:
HG
时间:
2002-7-21 02:10
您的只是取得存儲過程的反回值,而在第一個存儲過程中都有一個返加值的,不論成功執行與否。當然用返回值也可以取得輸了參數的值,如果輸出參數多於一個,而返有一個自定的返回值存在時,又會發生什麼情況哪?我想您沒有測試過吧。
在VBA中對輸入出參數類型蝚好用adparamoutput,同理此類型也可取得返回值,不過要先刷新參數方可行。
作者:
leon0207
时间:
2002-10-10 01:23
查询设计器不支持 @XXX SQL 构造。
作者:
harsonliao
时间:
2002-10-10 02:02
提示:
作者被禁止或删除 内容自动屏蔽
作者:
jiek
时间:
2003-2-11 06:49
写成模组调用就好多了~
作者:
cg1
时间:
2003-4-13 04:34
set rs=currentProject.Connection.Execute("存储过程 参数=Variant)
为什么不行?如果没有什么输出参数,只是返回表
set rs=currentProject.Connection.Execute("存储过程 参数1,参数2)
这样也通阿?
作者:
cybdl
时间:
2004-11-25 22:43
标题:
能不能用类似方式解决我的这个问题?
call 的参数问题
我用ACCESS做的一个销售系统,想在一个模块中调用窗体“销售单明细”上的一个事件过程(按F4键的过程)。语句如下:
call form_销售单明细.Form_KeyDown(115, 0)
可每次调用的事件不同的话,就要写成:
call b
b是变量,在调用前赋值。因有多次不同的调用,所以要用变量。
可是怎么给b定义与赋值,希望能人帮我一下。
作者:
guotianxin
时间:
2005-1-16 21:06
我喜欢用简易语法,connection.exec "存储过程 '" & 参数一 & "','" & 参数一 & "'",只是返回值无法取得,有点遗憾。
作者:
chief_first
时间:
2005-6-4 05:41
先收着看看.
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3