2011-04-15 24 views

回答

2

對於Access 2003,答案是否定的。

Access 2010確實有表觸發器和存儲過程。這些是作爲行更新結果運行的真正的引擎級例程。因此,導致行修改的表單或VBA記錄集代碼或sql更新將導致存儲過程和表級代碼運行。事實上,即使通過ODBC從VB.net,甚至VB6的外部連接將導致這些存儲過程運行。

但是在Access 2010之前,如果您使用默認數據庫引擎,則沒有存儲過程。但是,您可以選擇不同的數據引擎,然後選擇JET作爲您的Access應用程序,當您這樣做時,您可以擁有存儲過程,但必須使用您選擇使用Access的任何數據庫引擎隨附的工具。所以,請記住,就像當你建立一個網站時一樣,你可以出去選擇你使用的數據庫引擎。 ms-access也是一樣,你可以自由選擇一個數據庫引擎,並有存儲過程用於Access。

如上所述,此例外是Access 2010現在確實具有表級觸發器和存儲過程。

+0

Albert,它取決於「存儲過程」的定義。 Access中的DML查詢,特別是參數化的,實際上很像服務器數據庫中的存儲過程,沒有過程代碼。事實上,它們是用「procedure」關鍵字在DDL中創建的(或者它已經被報告給我 - 我從來沒有使用過它)。正如你所看到的,這裏的下一個答案將參數化作爲存儲過程的關鍵特性(儘管不清楚該參數化的SELECT語句是否會被計數)。 – 2011-04-18 05:33:36

2

不是「存儲過程」本身。您可以創建已保存的查詢,並使用與Sql Server中存儲的特效相同的方式調用Access中的那些查詢。保存的查詢具有的限制是您無法使用流程代碼的控制(例如If Else或Case When),並且一次只能保存一條命令。

創建保存查詢的最簡單方法是打開Access,轉到查詢選項卡,然後在設計視圖中創建一個新查詢。關閉Show Tables對話框並切換到SQL View。使用上面的示例,鍵入SQL子句的第一部分:

INSERT INTO Addresses (Organisationname, AddressLine1, AddressLine2, 
    AddressLine3, City, StateCounty, CountryID, PostCodeZip, SwitchboardNo, 
    FaxNo, Email, Website, RecordStatus, LastUpdated, LastUpdateBy) 
    Values 

現在打開括號並創建參數佔位符。這些總是在方括號([])中,它告訴Access期望值作爲參數。你可以把任何你喜歡的東西放在方括號內。 [P1],[P2],[P3]等是我的選擇,所以最終的查詢將是這樣的:

INSERT INTO Addresses (Organisationname, AddressLine1, AddressLine2, 
    AddressLine3, City, StateCounty,CountryID, PostCodeZip, SwitchboardNo, FaxNo, 
    Email, Website, RecordStatus, LastUpdated, LastUpdateBy) Values ([p1],[p2],[p3], 
    [p4],[p5],[p6],[p7],[p8],[p9],[p10],[p11],[p12], [p13],[p14],[p15]); 

如果您運行的查詢,Access將提示您爲每個字段輸入。針對每個字段輸入數據以測試查詢是否有效。至於調試,你剛剛做到了。將查詢保存爲有意義的內容。這個保存爲qUpdateAddresses。在保存它時,您可能會注意到Access會自動檢測到這是一個追加查詢。一旦你確認了它的工作,關閉數據庫。

從ASP.NET運行它,看一下這篇文章,注意接近尾聲位認爲的當家「保存查詢」: http://www.mikesdotnetting.com/Article.aspx?ArticleID=26

+0

[quote]你一次只能保存一條命令。 [/ quote]這是否意味着我們只能使用每個保存的查詢的插入/更新? – soclose 2011-04-15 08:21:38

+0

研究鏈接在回答中提及 – gbbosmiya 2011-04-15 09:14:11

+0

Jet/ACE數據庫引擎一次只支持一條SQL語句 - 無批處理語句。這是因爲它不是具有中央服務器進程的服務器數據庫引擎,該進程負責管理與數據庫的交互並決定交叉來自多個客戶端的請求。服務器可以接受100個SQL語句的SQL批處理,並將個別語句與其他用戶的請求進行交錯。但是Jet/ACE沒有這樣做的中央權限,因此在db再次可用之前,批處理必須作爲一個整體來執行 - 因此缺少對它的支持。 – 2011-04-18 05:37:12