设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

access调用存储过程传递参数的例程

2015-4-17 16:18| 发布者: admin| 查看: 2323| 评论: 13|原作者: zhuyiwen|来自: www.office-cn.net

摘要: 这是开发版中关于调用存储过程传递参数的例程,供大家参考 Public Sub TestParameter ' 这段代码演示: ' 1. 创建一个使用输入/输出参数的存储过程 ' 2. 创建参数并调用存储过程 ' 3. 显示结果并删除这个存储 ...
这是开发版中关于调用存储过程传递参数的例程,供大家参考

  1. Public Sub TestParameter
  2.   ' 这段代码演示:
  3.   ' 1. 创建一个使用输入/输出参数的存储过程
  4.   ' 2. 创建参数并调用存储过程
  5.   ' 3. 显示结果并删除这个存储过
  6.   Dim conn As ADODB.Connection
  7.   Dim Param As ADODB.Parameter
  8.   Dim Com As ADODB.Command
  9.   Dim strConn As String
  10.   ' 给连接字符串变量赋值
  11.   strConn = "PROVIDER=SQLOLEDB;SERVER=(local);User Id=sa;Password=;DATABASE=pubs"

  12.   ' 建立连接对象
  13.   Set conn = New ADODB.Connection
  14.   ' 给连接对象赋予连接字符串并打开连接
  15.   conn.ConnectionString = strConn
  16.   conn.Open strConn
  17.   ' 建立新的命令对象
  18.   Set Com = New ADODB.Command
  19.   ' 在PUBS数据库中创建一个新的存储过程
  20.   Com.CommandText = "Create Procedure sp_ReturnsOutput @authorid " & _
  21.   "varchar(11),@result Varchar(20) OUTPUT As Select @result " _
  22.   & "= (Select au_fname from authors Where Au_id = @authorId)"
  23.   Com.ActiveConnection = conn
  24.   Com.Execute
  25.   ' 现在已经创建两个参数: 一为输入,一为输出
  26.   ' 在ADO对象中创建输入参数
  27.   Set Param = Com.CreateParameter("AuId", adVarChar, adParamInput, 11)
  28.   Param.Value = "172-32-1176"
  29.   Com.Parameters.Append Param
  30.   ' 在ADO对象中创建输出参数
  31.   Set Param = Com.CreateParameter("Return", adVarChar, adParamReturnValue, 20)
  32.   Com.Parameters.Append Param
  33.   ' 注:当创建参数时,你必须包括参数的大小(长度)
  34.   ' 加载命令对象的SQL字符串
  35.   Com.CommandText = "sp_ReturnsOutput"
  36.   Com.CommandType = adCmdStoredProc
  37.   ' 调用
  38.   Com.Execute
  39.   ' 显示结果
  40.   MsgBox "The first name of the author with an SS of " & _
  41.   Com.Parameters(0).Value & " is " & Com.Parameters(1).Value
  42.   ' 删除存储过程
  43.   Com.CommandText = "Drop Procedure Sp_ReturnsOutput"
  44.   Com.CommandType = adCmdText
  45.   Com.Execute
  46.   conn.Close
  47. End Sub

发表评论

最新评论

引用 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
调用一个存储过程要写一堆代码,写得有点烦

不知有没有直接运行的方法,类似

set rs=currentProject.Connection.Execute("存储过程 参数=Variant)

可以这样执行就真的方便
引用 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
先收着看看.

查看全部评论(13)

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-3-29 22:36 , Processed in 0.080398 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部