數(shù)據(jù)庫高級應用技術_第1頁
已閱讀1頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第10章 數(shù)據(jù)庫高級應用技術,本章主要內(nèi)容: 事務的概念 Delphi中的事務控制 Delphi中使用存儲過程 主從結(jié)構(gòu)的數(shù)據(jù)庫應用程序,10.1 事務處理,10.1.1 事務的概念   當用Delphi創(chuàng)建數(shù)據(jù)庫應用時,Delphi提供了用于所有數(shù)據(jù)庫訪問的事務控制。  一個事務(transaction)是指在一個數(shù)據(jù)庫中的一張或多張表上執(zhí)行的一組相關動作,在這一組動作被永久提交前,必須成功完成所有動作,如果該組動作中

2、有一個動作操作失敗,那么所有動作就會被取消。 10.1.2 事務的特性  事務具有不可分性、一致性、隔離性和持續(xù)性。 1. 不可分性  事務是一個工作單元,是在應用程序的 BEGIN TRANSACTION 和 END TRANSACTION 語句之間發(fā)生一系列操作。事務只執(zhí)行一次,且是不可分的,即完成全部工作或者不做任何工作。,10.1 事務處理,2. 一致性  事務是一個完整的單元,因為它保持數(shù)據(jù)的一致性,將數(shù)據(jù)從一種數(shù)

3、據(jù)一致狀態(tài)轉(zhuǎn)換到另一種數(shù)據(jù)一致狀態(tài)。3. 隔離性  事務是一個隔離單元,允許可并行執(zhí)行的事務表現(xiàn)得像是在系統(tǒng)中運行的唯一事務。隔離性要求即使同時可能有其他事務正在運行,每個事務也像是操作數(shù)據(jù)存儲區(qū)的唯一事務一樣。事務應從不查看其他事務的中間階段。4. 持續(xù)性  事務也是一個恢復單元。如果事務成功,則即使在提交后計算機立即崩潰,系統(tǒng)仍將保證更新該事務。專用記錄允許系統(tǒng)的重新啟動過程完成未完成的操作,以使事務可持續(xù)。,10.1 事

4、務處理,10.1.3 Delphi中事務控制的方式1. Delphi中事務控制的方式  Delphi中事務控制的方式有兩種:一種是隱式事務控制,一種是顯式事務控制?! ≡谀J情況下,Delphi通過ADO為應用程序提供隱式事務控制。當應用程序處于隱式事務控制時,Delphi為數(shù)據(jù)集中的每個記錄的寫操作進行隱式事務控制。它提交每一個獨立的寫操作,如Post和AppendRecord?! ∮袃煞N顯式控制事務方式:  一種是使用De

5、lphi組件(如TADOConnection)所提供的方法和屬性進行事務控制?! ×硪环N是直接發(fā)送SQL命令到支持事務的數(shù)據(jù)庫服務器進行事務控制。許多數(shù)據(jù)庫都提供自己的事務處理方式。,10.1 事務處理,2. 使用TADOConnection控制事務 ?。?) 事務處理過程  通常事務處理有以下這樣一個過程:BeginTrans; //開始一個新事務處理 try //捕捉異常 . 數(shù)據(jù)庫更新操作(如de

6、lete、insert、update等) . . CommitTrans;//操作成功,提交事務 except //異常處理 RollBackTrans;//操作失敗,回退事務end;,10.1 事務處理,(2) 開始一個事務  開始一個事務使用BeginTrans方法。當開始一個事務時,后來的所有讀寫數(shù)據(jù)庫的操作都發(fā)生在那次事務的環(huán)境中,直到事務被明確地終止或提交了新事務。 使用例句:Lev

7、el := ADOConnection1.BeginTrans;BeginTrans方法返回該事務的嵌套級別。  ?。?) 提交一個事務  為了做永久性修改,事務完成后必須使用CommitTrans方法提交。 例如,下列語句將終止在上例中開始的事務:ADOConnection1.CommitTrans  (4) 回退一個事務  為了取消對數(shù)據(jù)庫的修改,必須用RollbackTrans方法回退一個事務。,10.1 事務處理

8、,例如:下列語句將回退一個事務:  ADOConnection1.RollbackTrans; ?。?) 判斷是否正在處理事務  判斷是否正在處理事務,可以通過InTransaction屬性。例:IF ADOConnection1.InTransaction THENADOConnection1.RollbackTrans;  (6) 使用IsolationLevel屬性  IsolationLevel屬性描述TADO

9、Connection組件事務的獨立級別,事務的獨立級別決定了事務與其它作用于相同表的事務是如何相互作用的。,10.1 事務處理,10.1.4 事務處理的實例  下面以一個簡單的例子說明事務的處理過程?!纠?0-1】  Delphi對TDBGrid組件使用的是默認的隱含事務控制,在表格修改一條記錄后,當記錄指針移動以后,數(shù)據(jù)就被寫入到數(shù)據(jù)庫中了。若表格很大、修改項目又很多時,如果中途想要放棄所作的修改,很難使表格恢復原樣。這時就可

10、以使用事務處理來解決這樣的問題。編程實現(xiàn)對數(shù)據(jù)庫dbdemos.mdb的表employee的事務操作。【實現(xiàn)步驟】1. 首先建立應用程序。2. 定制窗體,10.1 事務處理,圖10-1 程序設計界面,10.1 事務處理,表10-2 各組件屬性設置,10.1 事務處理,3. 編寫代碼4. 程序執(zhí)行分析  啟動程序后,點擊【開始事務】按鈕,在表格中修改幾條記錄,然后點擊【提交事務】按鈕,關閉程序后重新進入,會發(fā)現(xiàn)修改內(nèi)容已寫

11、入數(shù)據(jù)庫中。點擊【開始事務】按鈕,在表格中修改幾條記錄,然后點擊【回退事務】按鈕,關閉程序后重新進入,再次查看表格內(nèi)容,會發(fā)現(xiàn)數(shù)據(jù)庫沒有被修改。,10.2 使用存儲過程,10.2.1 存儲過程概述  存儲過程(stored procedure)是一組預先編譯好的SQL代碼。存儲過程作為一個獨立的數(shù)據(jù)庫對象,可以作為一個單元被用戶的應用程序調(diào)用,它在服務器上執(zhí)行一系列重復性的與數(shù)據(jù)庫相關的任務,并將結(jié)果傳給客戶應用程序。由于存儲過程

12、是已經(jīng)編譯好的代碼,所以執(zhí)行的時候不必再次進行編譯,從而提高了程序的運行效率。10.2.2 直接執(zhí)行SQL命令來使用和管理存儲過程1. 使用和管理存儲過程的應用程序【例10-2】  建立一個使用和管理存儲過程的應用程序。使用MS SQL Server的示例數(shù)據(jù)庫PUBS。,10.2 使用存儲過程,【實現(xiàn)步驟】(1) 首先建立應用程序。(2) 定制窗體,圖10-2 程序設計界面,10.2 使用存儲過程,表10-3 各組件屬

13、性設置,10.2 使用存儲過程,表10-3 各組件屬性設置,10.2 使用存儲過程,2. 使用和管理存儲過程的SQL命令(1) 創(chuàng)建存儲過程創(chuàng)建存儲過程的簡單語法如下:CREATE PROC[EDURE] procedure_name [;number] [{@parameter data_type} [VARYING] [=default] [OUTPUT] ][,...n] [WITH  

14、0; {RECOMPILE | ENCRYPTION | RECOMPILE,ENCRYPTION} ] [FOR REPLICATION] AS sql_statement [ ...n ],10.2 使用存儲過程,(2) 執(zhí)行存儲過程  直接執(zhí)行存儲過程可以使用EXECUTE命令來執(zhí)行。在Memo1的編輯框中輸入:EXEC oakland_authors 或EXECUTE oakland_authors 

15、 點擊按鈕“執(zhí)行存儲過程”以執(zhí)行存儲過程oakland_authors,結(jié)果將顯示在DBGrid1表格中。(3) 修改存儲過程存儲過程可以根據(jù)用戶的要求或者基表定義的改變而改變。使用ALTER PROCEDURE語句可以更改先前通過執(zhí)行 CREATE PROCEDURE 語句創(chuàng)建的過程,但不會更改權限,也不影響相關的存儲過程或觸發(fā)器。,10.2 使用存儲過程,其語法形式如下:ALTERPROC[EDURE]procedure_n

16、ame[;number] [{@parameterdata_type} [VARYING][=default][OUTPUT]][,...n] [ WITH    {RECOMPILE | ENCRYPTION | ECOMPILE,ENCRYPTION} ][FOR REPLICATION] AS    sql_statement [ ...n

17、 ] 下面對存儲過程oakland_authors進行修改,使其能夠顯示出所有居住在加里福尼亞的作者,而不考慮其它地區(qū)居住的作者 。,10.2 使用存儲過程,修改存儲過程的代碼如下:alter procedure oakland_authorswith encryptionasselect au_fname, au_lname, address, city, zipfrom authorswhere state =

18、'ca'order by au_lname, au_fname ?。?) 刪除存儲過程  刪除存儲過程可以使用DROP命令,DROP命令可以將一個或者多個存儲過程或者存儲過程組從當前數(shù)據(jù)庫中刪除,其語法形式如下:drop procedure {procedure} [,…n],10.2 使用存儲過程,如將存儲過程oakland_authors從數(shù)據(jù)庫中刪除,則在Memo1的編輯框中輸入以下代碼:  dr

19、op procedure oakland_authors ?。?) 帶參數(shù)的存儲過程  存儲過程使用兩種類型的參數(shù),一種是輸入?yún)?shù),另一種是輸出參數(shù)。不使用OUTPUT保留字的參數(shù)是輸入?yún)?shù),使用OUTPUT保留字的參數(shù)是輸出參數(shù)。輸入?yún)?shù)是單向的,而輸出參數(shù)是雙向的,可以向調(diào)用者返回值。本例的存儲過程中使用了輸入?yún)?shù)。create procedure author_infor @lastname varchar (

20、40) , @firstname varchar (20)asselect au_lname,au_fname,phonefrom authorswhere au_fname=@firstname and au_lname=@lastname,10.2 使用存儲過程,10.2.3 用ADO組件操作存儲過程1. TADOStoredProc組件簡介  TADOStoredProc組件主要用于操作遠程服務器上的數(shù)據(jù)庫中的存儲過

21、程。ADOStoredProc是一個數(shù)據(jù)集組件,ADO數(shù)據(jù)集組件所具有的公共屬性、方法和事件,在ADOStoredProc都具有?! 。?) TADOSoredProc的關鍵屬性  Active屬性 Connection屬性 ConnectionString屬性 Filter屬性 Filtered屬性 Parameters屬性 ProcedureName屬性,10.2 使用存儲過程,(2) 關鍵方法 Open屬性 

22、Close屬性 Refresh屬性 NextRecordset屬性2. TADOStoredProc組件的使用【例10-3】  建立一個使用和管理存儲過程的應用程序。使用MS SQL Server的示例數(shù)據(jù)庫PUBS。 【實現(xiàn)步驟】(1) 首先建立應用程序。(2) 定制窗體,10.2 使用存儲過程,圖10-5 程序設計界面,10.2 使用存儲過程,表10-4 各組件屬性設置,10.2 使用存儲過程,(3) 編寫代碼

23、(4)運行程序,圖10-6 執(zhí)行結(jié)果,10.3 主從結(jié)構(gòu)的數(shù)據(jù)庫應用程序,有時我們需要將數(shù)據(jù)表格聯(lián)系起來,這些表格具一種一對多的關系。比如客戶表和訂單表,一個客戶可能會有許多訂單。當我們?yōu)g覽客戶訂貨信息時,希望在客戶表選擇一個客戶后,能夠顯示該客戶的所有訂單。利用Delphi可以方便地設計出主從表結(jié)構(gòu)的應用程序?!纠?0-4】  使用Delphi自帶的Access數(shù)據(jù)庫dbdemos.mdb中的表customer和表Order

24、s建立一個程序,實現(xiàn)主/從表。customer為主表,Orders為從表,兩表之間通過字段CustNo鏈接。 【實現(xiàn)步驟】(1) 首先建立應用程序。(2) 創(chuàng)建數(shù)據(jù)模塊,10.3 主從結(jié)構(gòu)的數(shù)據(jù)庫應用程序,圖10-7 數(shù)據(jù)模塊設計界面,10.3 主從結(jié)構(gòu)的數(shù)據(jù)庫應用程序,表10-5 數(shù)據(jù)模塊各組件屬性設置,10.3 主從結(jié)構(gòu)的數(shù)據(jù)庫應用程序,圖10-8 鏈接字段設計器,10.3 主從結(jié)構(gòu)的數(shù)據(jù)庫應用程序,圖10-9

25、引用單元對話框,10.3 主從結(jié)構(gòu)的數(shù)據(jù)庫應用程序,(4)定制窗體,程序設計界面,10.3 主從結(jié)構(gòu)的數(shù)據(jù)庫應用程序,表10-6 窗體中各組件屬性設,10.3 主從結(jié)構(gòu)的數(shù)據(jù)庫應用程序,圖10-10 主/從表關系的應用程序運行界面,(5)保存所有文件,然后運行程序,本章實訓指導,1. 掌握事務處理的應用程序的編寫。2. 掌握直接用SQL命令管理和執(zhí)行存儲過程。3. 掌握使用TADOStoredProc組件執(zhí)行存儲過程。4.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論