一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

ACCESS中的存儲(chǔ)過程——參數(shù)查詢

 戰(zhàn)神之家 2014-03-18

Access 的 MDB / MDE 中存在類似存儲(chǔ)過程得概念(建立時(shí)也可以使用 DDL 語(yǔ)句的 create procedure 語(yǔ)句建立),但是叫參數(shù)查詢,并且一個(gè)參數(shù)查詢只支持一條 JET SQL 語(yǔ)句,因而 JET SQL 不存在程序流控制語(yǔ)句,所有的程序流控制都交由 VBA 控制。也就是說 T-SQL 中的 IF 以及 CASE 語(yǔ)句在 JET SQL 中不存在,但是部分功能可以用 IIF 函數(shù)以及 SWITCH 函數(shù)代替,具體內(nèi)容請(qǐng)參考 ACCESS 幫助。JET SQL中也可以定義“變量”,但是這個(gè)變量和 T-SQL 中的變量是不同的概念,因此在 JET SQL 中被稱為“參數(shù)”。

事實(shí)上,Access(2000 及以上版本)中所謂“存儲(chǔ)過程”,和 SQL Server 中的 Stored Procedure 是不能比的。它只能算是“Stored Procedure Lite”,不支持多條 SQL 語(yǔ)句,不支持邏輯語(yǔ)句(呵呵,畢竟不是 T-SQL)等等,我也還不清楚它是不是預(yù)編譯了。不過,正如同 VBScript 實(shí)現(xiàn)的所謂“類”僅僅具有封裝性,對(duì)于代碼結(jié)構(gòu)的“美化”和程序重用性具有很大促進(jìn)一樣,Access 的“輕量存儲(chǔ)過程”,對(duì)于規(guī)范,小出錯(cuò)幾率的數(shù)據(jù)庫(kù)操作應(yīng)該也有幫助,并且性能可能會(huì)有提高。

 

一、在ACCESS中構(gòu)建參數(shù)查詢

關(guān)鍵字 PARAMETERS 可構(gòu)建參數(shù)  

PARAMETERS aa Short, bb Short;
SELECT 表1.ID
FROM 表1
WHERE (((表1.ID)>[aa] And (表1.ID)<=[bb]));

上述參數(shù)查詢?cè)诖蜷_時(shí)會(huì)提示用戶輸入 [aa] [bb] 這兩個(gè)參數(shù)。ACCESS 中還有一種參數(shù)查詢是直接用窗體的某個(gè)控件來傳遞參數(shù)給查詢,代碼如下

SELECT 表1.ID
FROM 表1
WHERE (((表1.ID)>FORMS!窗體A!控件A And (表1.ID)<=FORMS!窗體A!控件B));

當(dāng)“窗體A”打開時(shí),雙擊這個(gè)查詢時(shí)無需輸入?yún)?shù),查詢會(huì)自動(dòng)調(diào)用窗體上控件A控件B這兩個(gè)控件的值來作為參數(shù)。

 

二、在VBA中生成和調(diào)用參數(shù)查詢

參數(shù)查詢代碼如下:

PARAMETERS strA Text;
INSERT INTO 表1 ( hh )
values ([stra])

VBA 或者 VB 調(diào)用參數(shù)查詢?nèi)缦拢?br>

Public Function AppendX()
    Dim cmdByRoyalty As ADODB.Command
    Dim prmByRoyalty As ADODB.Parameter
    Dim rstByRoyalty As ADODB.Recordset
    Dim intRoyalty As String
    Set cmdByRoyalty = New ADODB.Command
    cmdByRoyalty.CommandText = "查詢1"
    cmdByRoyalty.CommandType = adCmdStoredProc
    intRoyalty = Trim(InputBox("輸入?yún)?shù):"))
    Set prmByRoyalty = cmdByRoyalty.CreateParameter("strA", adChar, adParamInput, 255)
    cmdByRoyalty.Parameters.Append prmByRoyalty
    prmByRoyalty.Value = intRoyalty
    Set cmdByRoyalty.ActiveConnection = CurrentProject.Connection
    Set rstByRoyalty = cmdByRoyalty.Execute
End Function

 

三、何時(shí)使用參數(shù)查詢

我們使用 Access 存儲(chǔ)過程的主要目的,就是使用參數(shù)額外提供的查詢,使用存儲(chǔ)過程,我們不必再面對(duì)將參數(shù)值拼接到 SQL 語(yǔ)句字符串中時(shí)遇到的各種麻煩,比如:

Dim sql
sql = "SELECT * FROM Users WHERE UserName = '" & userName & "'"
以上代碼中,如果字符串變量 userName 中含有“'”單引號(hào),則會(huì)報(bào)錯(cuò)。我們必須手工轉(zhuǎn)化:
Dim sql
sql = "SELECT * FROM Users WHERE UserName = '" & Replace(userName, "'", "''") & "'"
轉(zhuǎn)化為連續(xù)兩個(gè)單引號(hào)。而使用帶參數(shù)查詢,我們的 SQL 語(yǔ)句可以寫為
Dim sql
sql = "SELECT * FROM Users WHERE UserName = @userName"
然后把參數(shù) @userName 的值以 Command 對(duì)象的 Parameter 屬性來傳入即可,很方便直觀。
With cmd
    '創(chuàng)建參數(shù)對(duì)象
    .Parameters.Append .CreateParameter("@userName")

    '給各參數(shù)指定值
    .Parameters("@userName") = userName
End With

 

四、Access 存儲(chǔ)過程中參數(shù)的使用。

和 SQL Server 的存儲(chǔ)過程中用 @ 變量指定參數(shù),然后同名傳入?yún)?shù)對(duì)象不同,Access 中的參數(shù),是以“順序”而非“名字”來識(shí)別的。傳入的參數(shù)無需指定名字,隨便起,SQL 中的參數(shù)名字也可以隨便起,只要傳入?yún)?shù)值時(shí),按照 SQL 語(yǔ)句中的參數(shù)出現(xiàn)順序指定就行了。通常,我們使用 Command 對(duì)象的 Execute 方法,直接傳入?yún)?shù)值數(shù)組來執(zhí)行~

cmd.Execute , Array(userName)

再比如,你的一個(gè) Access 存儲(chǔ)過程這么寫:

select * from Users where UserName = p_UserName and BookTitle = p_bookTitle

你可以就這么執(zhí)行,通過傳入?yún)?shù)值數(shù)組,但是順序要對(duì)應(yīng):

cmd.Execute , Array(userName, bookTitle)

 

五、參考鏈接:

(1)http:///fixhtm/79FAB21E12DC.htm?tt=

(2)http:///fixhtm/72FAB21E15DC.htm?tt=

(3)http:///fixhtm/71FAB51E12DC.htm?tt=

(4)http://www./view.php?tid=18&id=278

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲av一区二区三区精品| 国产精品午夜福利免费阅读| 亚洲夫妻性生活免费视频| 亚洲第一香蕉视频在线| 五月婷日韩中文字幕四虎| 久久国产人妻一区二区免费| 欧美一级黄片免费视频| 99久久国产综合精品二区| 亚洲最大福利在线观看| 亚洲天堂精品在线视频| 亚洲最大的中文字幕在线视频| 国产精品伦一区二区三区四季| 欧美不卡午夜中文字幕| 99日韩在线视频精品免费| 亚洲精品欧美精品日韩精品| 久久99精品国产麻豆婷婷洗澡 | 国产99久久精品果冻传媒| 欧美日韩乱码一区二区三区| 又大又长又粗又黄国产| 亚洲综合精品天堂夜夜| 亚洲一区二区亚洲日本| 丝袜av一区二区三区四区五区| 国产亚洲欧美日韩国亚语| 香蕉久久夜色精品国产尤物| 麻豆看片麻豆免费视频| 欧美精品在线播放一区二区| 免费啪视频免费欧美亚洲| 欧美日韩一区二区三区色拉拉| 国产内射一级二级三级| 久草视频在线视频在线观看| 精品视频一区二区不卡| 妻子的新妈妈中文字幕| 91香蕉国产观看免费人人| 99久热只有精品视频最新| 欧美精品专区一区二区| 丰满人妻一二区二区三区av | 欧美日韩少妇精品专区性色| 少妇高潮呻吟浪语91| 日韩一区二区免费在线观看| 一区二区欧美另类稀缺| 一区二区三区日本高清|