設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開始

access調(diào)用存儲(chǔ)過程傳遞參數(shù)的例程

2015-4-17 16:18| 發(fā)布者: admin| 查看: 2570| 評(píng)論: 13|原作者: zhuyiwen|來自: m.mzhfr.cn

摘要: 這是開發(fā)版中關(guān)于調(diào)用存儲(chǔ)過程傳遞參數(shù)的例程,供大家參考 Public Sub TestParameter ' 這段代碼演示: ' 1. 創(chuàng)建一個(gè)使用輸入/輸出參數(shù)的存儲(chǔ)過程 ' 2. 創(chuàng)建參數(shù)并調(diào)用存儲(chǔ)過程 ' 3. 顯示結(jié)果并刪除這個(gè)存儲(chǔ) ...
這是開發(fā)版中關(guān)于調(diào)用存儲(chǔ)過程傳遞參數(shù)的例程,供大家參考

  1. Public Sub TestParameter
  2.   ' 這段代碼演示:
  3.   ' 1. 創(chuàng)建一個(gè)使用輸入/輸出參數(shù)的存儲(chǔ)過程
  4.   ' 2. 創(chuàng)建參數(shù)并調(diào)用存儲(chǔ)過程
  5.   ' 3. 顯示結(jié)果并刪除這個(gè)存儲(chǔ)過
  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.   ' 建立連接對(duì)象
  13.   Set conn = New ADODB.Connection
  14.   ' 給連接對(duì)象賦予連接字符串并打開連接
  15.   conn.ConnectionString = strConn
  16.   conn.Open strConn
  17.   ' 建立新的命令對(duì)象
  18.   Set Com = New ADODB.Command
  19.   ' 在PUBS數(shù)據(jù)庫中創(chuàng)建一個(gè)新的存儲(chǔ)過程
  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.   ' 現(xiàn)在已經(jīng)創(chuàng)建兩個(gè)參數(shù): 一為輸入,一為輸出
  26.   ' 在ADO對(duì)象中創(chuàng)建輸入?yún)?shù)
  27.   Set Param = Com.CreateParameter("AuId", adVarChar, adParamInput, 11)
  28.   Param.Value = "172-32-1176"
  29.   Com.Parameters.Append Param
  30.   ' 在ADO對(duì)象中創(chuàng)建輸出參數(shù)
  31.   Set Param = Com.CreateParameter("Return", adVarChar, adParamReturnValue, 20)
  32.   Com.Parameters.Append Param
  33.   ' 注:當(dāng)創(chuàng)建參數(shù)時(shí),你必須包括參數(shù)的大小(長度)
  34.   ' 加載命令對(duì)象的SQL字符串
  35.   Com.CommandText = "sp_ReturnsOutput"
  36.   Com.CommandType = adCmdStoredProc
  37.   ' 調(diào)用
  38.   Com.Execute
  39.   ' 顯示結(jié)果
  40.   MsgBox "The first name of the author with an SS of " & _
  41.   Com.Parameters(0).Value & " is " & Com.Parameters(1).Value
  42.   ' 刪除存儲(chǔ)過程
  43.   Com.CommandText = "Drop Procedure Sp_ReturnsOutput"
  44.   Com.CommandType = adCmdText
  45.   Com.Execute
  46.   conn.Close
  47. End Sub

發(fā)表評(píng)論

最新評(píng)論

引用 tmtony 2002-4-9 09:07
很好, 注解非常詳細(xì) :)
引用 zhuyiwen 2002-4-9 09:13
照抄的,謝謝夸獎(jiǎng)!
引用 zhuyiwen 2002-4-11 08:00
InputParameters 屬性
               

可以使用 InputParameters(輸入?yún)?shù))屬性來指定或確定向窗體或報(bào)表的 RecordSource 屬性的 SQL 語句中或者向 Microsoft Access 項(xiàng)目 (.adp) 中作為記錄源的存儲(chǔ)過程中傳遞的輸入?yún)?shù)。

設(shè)置

<name> <type> = <expression> [,<name> <type> = <expression> ] ...

InputParameters 具有以下參數(shù):

參數(shù) 說明
name: 參數(shù)的名稱,如果是存儲(chǔ)過程參數(shù),要求以“@”符號(hào)開頭。參數(shù)名中不允許含有空格。
type: 參數(shù)的 SQL Server 數(shù)據(jù)類型。
expression: Microsoft Access 表達(dá)式,該表達(dá)式將傳遞到要解析的表達(dá)式服務(wù)。與其他表達(dá)式相類似,它可以引用窗體上的其他控件;可以為用戶輸入提供提示文本;也可以是原義文字。
  如果符號(hào)“=”后沒有跟隨文字或直接跟隨逗號(hào),使用如同查詢或在 CREATE PROC 命令中定義的默認(rèn)參數(shù)值,執(zhí)行過程。如果參數(shù)沒有在字符串中列出,也是這樣。


可以通過使用屬性表或 Visual Basic 來設(shè)置此屬性。

說明

當(dāng)使用 RecordSource 屬性時(shí):

用于在 RecordSource 屬性的 SQL 語句中使用下列語法的 InputParameter 屬性字符串的示例。

state char=[Form]![狀態(tài)列表], salesyear smallint=[輸入年度利息]

將產(chǎn)生設(shè)置為“狀態(tài)列表”控件當(dāng)前值的狀態(tài)參數(shù),提示用戶輸入 salesyear 參數(shù)。如果存在不在此列表中的其他參數(shù),這些參數(shù)可以獲得默認(rèn)值。

對(duì)于在 InputParameter 列表中的每個(gè)非默認(rèn)參數(shù),應(yīng)該使用 ? 號(hào)執(zhí)行查詢。

Access 中的刷新或重新查詢命令(通過菜單、鍵盤或?yàn)g覽工具欄)將觸發(fā)查詢的重新執(zhí)行。用戶可以通過調(diào)用標(biāo)準(zhǔn)的 Recordset.Requery 方法在代碼中完成此操作。如果參數(shù)的值是與窗體上的控件綁定的,在重新查詢時(shí)使用控件的當(dāng)前值。當(dāng)控件的值更改時(shí),不自動(dòng)重新執(zhí)行查詢。

當(dāng)使用存儲(chǔ)過程時(shí):

一個(gè)在存儲(chǔ)過程中使用 InputParameter 屬性字符串示例如下:

@state char=[Form]![狀態(tài)列表], @salesyear smallint=[輸入年度利息]

結(jié)果是將 @state 參數(shù)設(shè)置為“狀態(tài)列表”控件的當(dāng)前值,并且用戶得到輸入 @salesyear 參數(shù)的提示。如果存在未列出的存儲(chǔ)過程的其他參數(shù),這些參數(shù)將被賦予默認(rèn)值。

存儲(chǔ)過程應(yīng)該用包含 {call } 語法的命令字符串來執(zhí)行,并且在語法中,對(duì) InputParameter 列表中的每一個(gè)非默認(rèn)參數(shù)使用一個(gè) ? 號(hào)來表示。

Access 中的刷新或再次查詢命令(通過菜單,鍵盤,或定位欄)將觸發(fā)存儲(chǔ)過程的重新執(zhí)行。用戶可以在代碼中通過調(diào)用標(biāo)準(zhǔn) Recordset.Requery 方法來實(shí)現(xiàn)此操作。如果參數(shù)值與窗體上的控件綁定,在再次查詢時(shí)使用控件的當(dāng)前值。當(dāng)控件的值更改時(shí),存儲(chǔ)過程不會(huì)自動(dòng)地重執(zhí)行。

如果存儲(chǔ)過程具有參數(shù),那么當(dāng)首次選擇存儲(chǔ)過程作為窗體的記錄源時(shí),將激發(fā)此生成器對(duì)話框。在最初創(chuàng)建 InputParameters 字符串以后,同一對(duì)話框也將被用作更改字符串的生成器。在此情況下,不考慮參數(shù)列表是從字符串中何處取出的。

在使用 ActiveX 數(shù)據(jù)對(duì)象 (ADO) 的 Command 和 Parameter 對(duì)象的代碼中也可以設(shè)置參數(shù)值。如果返回的是結(jié)果集,通過設(shè)置窗體的 Recordset 屬性,可以將窗體與結(jié)果綁定。ADO 代碼只是處理不返回結(jié)果集(如:操作查詢);返回輸出參數(shù);返回多個(gè)結(jié)果集的存儲(chǔ)過程的唯一方法。
引用 HG 2002-7-17 19:17
您們測試過這個(gè)貼子嗎?它是有問題的,隨然寫的不錯(cuò)。
但在VBA中輸入和輸出參數(shù),並不是件很容易的事情。
引用 zhuyiwen 2002-7-20 21:23
肯定是測試過的!
引用 HG 2002-7-21 02:10
您的只是取得存儲(chǔ)過程的反回值,而在第一個(gè)存儲(chǔ)過程中都有一個(gè)返加值的,不論成功執(zhí)行與否。當(dāng)然用返回值也可以取得輸了參數(shù)的值,如果輸出參數(shù)多於一個(gè),而返有一個(gè)自定的返回值存在時(shí),又會(huì)發(fā)生什麼情況哪?我想您沒有測試過吧。
在VBA中對(duì)輸入出參數(shù)類型蝚好用adparamoutput,同理此類型也可取得返回值,不過要先刷新參數(shù)方可行。
引用 leon0207 2002-10-10 01:23
查詢?cè)O(shè)計(jì)器不支持 @XXX SQL 構(gòu)造。
引用 harsonliao 2002-10-10 02:02
調(diào)用一個(gè)存儲(chǔ)過程要寫一堆代碼,寫得有點(diǎn)煩

不知有沒有直接運(yùn)行的方法,類似

set rs=currentProject.Connection.Execute("存儲(chǔ)過程 參數(shù)=Variant)

可以這樣執(zhí)行就真的方便
引用 jiek 2003-2-11 06:49
寫成模組調(diào)用就好多了~
引用 cg1 2003-4-13 04:34
set rs=currentProject.Connection.Execute("存儲(chǔ)過程 參數(shù)=Variant)

為什么不行?如果沒有什么輸出參數(shù),只是返回表

set rs=currentProject.Connection.Execute("存儲(chǔ)過程  參數(shù)1,參數(shù)2)

這樣也通阿?
引用 cybdl 2004-11-25 22:43






























call 的參數(shù)問題




我用ACCESS做的一個(gè)銷售系統(tǒng),想在一個(gè)模塊中調(diào)用窗體“銷售單明細(xì)”上的一個(gè)事件過程(按F4鍵的過程)。語句如下:




call form_銷售單明細(xì).Form_KeyDown(115, 0)




可每次調(diào)用的事件不同的話,就要寫成:




call b




b是變量,在調(diào)用前賦值。因有多次不同的調(diào)用,所以要用變量。




可是怎么給b定義與賦值,希望能人幫我一下。
引用 guotianxin 2005-1-16 21:06
我喜歡用簡易語法,connection.exec "存儲(chǔ)過程 '" & 參數(shù)一 & "','" & 參數(shù)一 & "'",只是返回值無法取得,有點(diǎn)遺憾。
引用 chief_first 2005-6-4 05:41
先收著看看.

查看全部評(píng)論(13)

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 08:37 , Processed in 0.096280 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部