设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 9077|回复: 13
打印 上一主题 下一主题

[帮助] 调用存储过程传递参数的例程

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2002-4-9 08:28:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是开发版中关于调用存储过程传递参数的例程,供大家参考

  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
复制代码

[此贴子已经被zhuyiwen于2002-4-9 0:28:11编辑过]

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅

点击这里给我发消息

2#
发表于 2002-4-9 09:07:00 | 只看该作者
很好, 注解非常详细 :)

点击这里给我发消息

3#
 楼主| 发表于 2002-4-9 09:13:00 | 只看该作者
照抄的,谢谢夸奖!

点击这里给我发消息

4#
 楼主| 发表于 2002-4-11 08:00: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 代码只是处理不返回结果集(如:操作查询);返回输出参数;返回多个结果集的存储过程的唯一方法。
5#
发表于 2002-7-17 19:17:00 | 只看该作者
您們測試過這個貼子嗎?它是有問題的,隨然寫的不錯。
但在VBA中輸入和輸出參數,並不是件很容易的事情。

点击这里给我发消息

6#
 楼主| 发表于 2002-7-20 21:23:00 | 只看该作者
肯定是测试过的!
7#
发表于 2002-7-21 02:10:00 | 只看该作者
您的只是取得存儲過程的反回值,而在第一個存儲過程中都有一個返加值的,不論成功執行與否。當然用返回值也可以取得輸了參數的值,如果輸出參數多於一個,而返有一個自定的返回值存在時,又會發生什麼情況哪?我想您沒有測試過吧。
在VBA中對輸入出參數類型蝚好用adparamoutput,同理此類型也可取得返回值,不過要先刷新參數方可行。
8#
发表于 2002-10-10 01:23:00 | 只看该作者
查询设计器不支持 @XXX SQL 构造。
9#
发表于 2002-10-10 02:02:00 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
10#
发表于 2003-2-11 06:49:00 | 只看该作者
写成模组调用就好多了~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-29 05:35 , Processed in 0.106287 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表