首頁(yè) 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級(jí) | 職稱英語(yǔ) | 商務(wù)英語(yǔ) | 公共英語(yǔ) | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語(yǔ) | 成人英語(yǔ)三級(jí) | 申碩英語(yǔ) | 攻碩英語(yǔ) | 職稱日語(yǔ) | 日語(yǔ)學(xué)習(xí) | 法語(yǔ) | 德語(yǔ) | 韓語(yǔ)
計(jì)算機(jī)等級(jí)考試 | 軟件水平考試 | 職稱計(jì)算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問(wèn) | 導(dǎo)游資格
報(bào)檢員 | 教師資格 | 社會(huì)工作者 | 外銷員 | 國(guó)際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價(jià)格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格考試會(huì)計(jì)證) | 經(jīng)濟(jì)師 | 會(huì)計(jì)職稱 | 注冊(cè)會(huì)計(jì)師 | 審計(jì)師 | 注冊(cè)稅務(wù)師
注冊(cè)資產(chǎn)評(píng)估師 | 高級(jí)會(huì)計(jì)師 | ACCA | 統(tǒng)計(jì)師 | 精算師 | 理財(cái)規(guī)劃師 | 國(guó)際內(nèi)審師
一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)工程師 | 造價(jià)員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項(xiàng)目管理師 | 土地登記代理人 | 環(huán)境影響評(píng)價(jià)師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價(jià)師 | 安全評(píng)價(jià)師 | 電氣工程師 | 注冊(cè)測(cè)繪師 | 注冊(cè)計(jì)量師
繽紛校園 | 實(shí)用文檔 | 英語(yǔ)學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲

2011計(jì)算機(jī)等考Delphi:Delphi客戶服務(wù)器應(yīng)用開發(fā)

本章中我們將闡述客戶服務(wù)器體系結(jié)構(gòu)原理、如何用Delphi構(gòu)建客戶/服務(wù)器的環(huán)境和Delphi存取遠(yuǎn)程SQL服務(wù)器的編程和注意事項(xiàng)。

 

  1. 使用TDatabase的方法和屬性

  下表中列出了TDatabase部件中用于事務(wù)管理的方法和屬性以及它們的使用方法:

  表18.11 TDatabase用于事務(wù)顯式控制的方法表

  ━━━━━━━━━━━━━━━━━━━━━━━━

  方法或?qū)傩浴∽?用

  ────────────────────────

  Commit 提交數(shù)據(jù)的修改并終止事務(wù)

  Rollback 取消數(shù)據(jù)的修改并終止事務(wù)

  StartTransaction 開始一個(gè)事務(wù)

  TransIsolation 表述事務(wù)的獨(dú)立性級(jí)別

  ━━━━━━━━━━━━━━━━━━━━━━━━

  StartTransaction,Commit和Rollback是供應(yīng)用程序在運(yùn)行時(shí)調(diào)用開始事務(wù),控制事務(wù)并且保存或放棄所做數(shù)據(jù)修改的方法。

  TransIsolation是TDatabase部件的用于控制作用于相同表的不同事務(wù)之間如何交互的屬性。

  ⑴ 開始一個(gè)事務(wù)

  當(dāng)你開始一個(gè)事務(wù)時(shí),后來(lái)的所有讀寫數(shù)據(jù)庫(kù)的表達(dá)式都發(fā)生在那次事務(wù)的環(huán)境中。每個(gè)表達(dá)式都是其中一部分。任何表達(dá)式所做的修改,要么成功地提交給數(shù)據(jù)庫(kù),要么每一個(gè)修改都被取消。考慮一個(gè)在ATM上的銀行傳輸問(wèn)題。當(dāng)顧客決定將錢從存款帳戶轉(zhuǎn)到支付帳戶時(shí),在銀行數(shù)據(jù)庫(kù)記錄上必須發(fā)生兩個(gè)修改:

  ● 存款帳戶必須記入借方

  ● 支付帳戶必須記入貸方

  如果出于某種原因,其中的一個(gè)操作不能被完成,那么任何一個(gè)操作都不應(yīng)該發(fā)生。因?yàn)檫@些操作是相關(guān)的,它們應(yīng)該發(fā)生在同一個(gè)事務(wù)中。

  為了開始Delphi應(yīng)用程序中的一個(gè)事務(wù),需要調(diào)用TDatabase部件中的StartTransaction方法:

  DatabaseInterBase.StartTransaction;

  此后的所有數(shù)據(jù)操作都發(fā)生在最近一個(gè)事務(wù)的環(huán)境中,直到該次事務(wù)通過(guò)調(diào)用Commit或Rollback顯式地終止為止。

  那么,應(yīng)當(dāng)將事務(wù)保持多久呢?理想狀態(tài)下,只要需要,多久都行。事務(wù)的活躍狀態(tài)越長(zhǎng),同時(shí)訪問(wèn)數(shù)據(jù)庫(kù)的用戶越多,在你的事務(wù)的生命其中,更多的并發(fā)、同時(shí)的事務(wù)開始和終止,于是當(dāng)試圖提交修改時(shí),與其它事務(wù)沖突的可能性更大。

 、 提交一個(gè)事務(wù)

  為了做永久性修改,事務(wù)必須使用TDatabase部件的Commit方法提交。執(zhí)行提交表達(dá)式將保存數(shù)據(jù)庫(kù)的修改并終止事務(wù)。例如,下列表達(dá)式將終止在上例中開始的事務(wù):

  DatabaseInterBase.Commit

  Commit的調(diào)用應(yīng)當(dāng)置于try…except表達(dá)式中。如果一個(gè)事務(wù)不能成功提交,你就能處理錯(cuò)誤,并重試操作。

 、 返轉(zhuǎn)一個(gè)事務(wù)

  為了取消數(shù)據(jù)庫(kù)修改,必須用Rollback方法返轉(zhuǎn)一個(gè)事務(wù)。Rollback 復(fù)原一個(gè)事務(wù)的修改,并終止事務(wù),例如:下列表達(dá)式將返轉(zhuǎn)一個(gè)事務(wù):

  DatabaseInterBase.Rollback;

  Rollback通常發(fā)生在:

  ● 異常處理代碼

  ● 按鈕或菜單事件代碼,如用戶點(diǎn)按了Cancel按鈕

 、 使用TransIsolation屬性

  TransIsolation屬性描述TDatabase部件事務(wù)的獨(dú)立級(jí)別,事務(wù)的獨(dú)立級(jí)別決定了事務(wù)與其它作用于相同表的事務(wù)是如何相互作用的。在改變或設(shè)置TransIsolation 的值之前,應(yīng)當(dāng)相當(dāng)熟悉Delphi中的事務(wù)和事務(wù)管理。

  TransIsolation的缺省值是tiReadCommitted。下表中總結(jié)了TransIsolation的可能值并描述了它們的含義:

  表18.12 TransIsolation屬性值的含義

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  獨(dú)立級(jí)別 含 義

  ──────────────────────────────────────

  tiDirtyRead 允許讀由其它同時(shí)事務(wù)寫入數(shù)據(jù)庫(kù)的未提交的修改。未提交的

  修改不是永久性的,可能在任何時(shí)候被復(fù)原。 在這個(gè)級(jí)別你

  的事務(wù)與其它事務(wù)所做的修改具有最低獨(dú)立度。

  tiReadCommitted 只允許讀由其它同時(shí)事務(wù)提交的數(shù)據(jù)庫(kù)修改。這是缺省的獨(dú)

  立級(jí)別。

  tiRepeatableRead 允許單個(gè)的數(shù)據(jù)庫(kù)讀事務(wù)無(wú)法看見其它同時(shí)事務(wù)對(duì)相同數(shù)據(jù)做

  的修改。這個(gè)獨(dú)立級(jí)別保證了你的事務(wù)一次讀一個(gè)記錄,記錄

  的視圖不會(huì)改變, 在這個(gè)級(jí)別你的事務(wù)與其它事務(wù)做的修改完

  全獨(dú)立。

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  各種數(shù)據(jù)庫(kù)服務(wù)器不同程度地支持這些獨(dú)立級(jí)別,有的根本不支持。 如果請(qǐng)求的隔離級(jí)別不被服務(wù)器支持,Delphi將采用更高的獨(dú)立級(jí)別。各種服務(wù)器支持的獨(dú)立級(jí)別請(qǐng)參見表18.10。

  如果應(yīng)用程序使用ODBC與服務(wù)器交互,ODBC驅(qū)動(dòng)程序必須支持獨(dú)立級(jí)別。

  2. 使用傳遞式SQL

  為了能使用傳遞式SQL控制事物,必須:

  ● 使用Delphi Client/Server Suite

  ● 安裝正確的SQL Links驅(qū)動(dòng)程序

  ● 正確配置網(wǎng)絡(luò)協(xié)議

  ● 訪問(wèn)遠(yuǎn)程服務(wù)器上數(shù)據(jù)庫(kù)的能力

  ● 用BDE配置工具將SQLPASSTHROUGH MODE設(shè)置為NOT SHARED

  通過(guò)傳遞式SQL,你可以使用TQuery、TStoredProc、或TUpdateSQL部件直接發(fā)送一個(gè)SQL事務(wù)控制表達(dá)式給遠(yuǎn)程數(shù)據(jù)庫(kù)服務(wù)器;BDE本身并不處理SQL表達(dá)式,采用傳遞式SQL可使用戶直接獲得SQL服務(wù)器提供了事務(wù)控制優(yōu)點(diǎn),尤其是當(dāng)那些控制是非標(biāo)準(zhǔn)的時(shí)。

  SQL PASS THROUGHMODE 描述BDE和傳遞式SQL是否共享相同的數(shù)據(jù)庫(kù)聯(lián)接。在大多數(shù)情況下,SQLPASSTHROUGHMODE被設(shè)置SHARED AUTOCOMMIT。然而,如果你想將SQL事務(wù)控制傳遞給服務(wù)器,你就必須用BDE配置工具,將BDE的SQLPASSTHROUGHMODE 設(shè)置為NOT SHARED。此外,還必須為傳遞SQL事務(wù)控制表達(dá)式的TQuery部件建立獨(dú)立的TDatabase 部件。

  3. 使用本地事務(wù)

  BDE還支持Paradox和dBASE上的本地事務(wù)。從代碼角度而言,在本地事務(wù)和遠(yuǎn)程數(shù)據(jù)庫(kù)服務(wù)器的事務(wù)之間沒有什么差別。

  當(dāng)作用于本地?cái)?shù)據(jù)庫(kù)表的事務(wù)開始時(shí),更新操作被記錄在日志中,每個(gè)日志記錄包含舊的記錄緩沖區(qū)。當(dāng)事務(wù)處于活躍狀態(tài),更新的記錄被鎖定,直到事務(wù)被提交或返轉(zhuǎn),在返轉(zhuǎn)過(guò)程中,舊的記錄被應(yīng)用于將更新的記錄恢復(fù)到原先的狀態(tài)。

  18.3.3 使用存儲(chǔ)過(guò)程

  18.3.3.1 TStoredProc部件概述

  存儲(chǔ)過(guò)程是以數(shù)據(jù)庫(kù)服務(wù)器為基礎(chǔ)的接受輸入?yún)?shù),并將結(jié)果返回給應(yīng)用程序的一段程序。TStoredProc部件操作遠(yuǎn)程服務(wù)器上的數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程。存儲(chǔ)過(guò)程是一連串表達(dá)式的集合,作為服務(wù)器的一部分存儲(chǔ)。存儲(chǔ)過(guò)程在服務(wù)器上執(zhí)行一系列重復(fù)性的與數(shù)據(jù)庫(kù)相關(guān)的任務(wù),并將結(jié)果傳給客戶應(yīng)用程序,如Delphi數(shù)據(jù)庫(kù)應(yīng)用程序。

  TStaredProc部件使Delphi數(shù)據(jù)庫(kù)應(yīng)用程序能執(zhí)行服務(wù)器上的存儲(chǔ)過(guò)程。

  通常,作用于數(shù)據(jù)庫(kù)表中大量記錄并且使用統(tǒng)計(jì)或數(shù)學(xué)函數(shù)的操作都是存儲(chǔ)過(guò)程的首選對(duì)象。通過(guò)將這些重復(fù)計(jì)算任務(wù)轉(zhuǎn)移到服務(wù)器,可以提高數(shù)據(jù)庫(kù)應(yīng)用程序的性能。

  ● 充分利用服務(wù)器的處理能力和速度

  ● 減少網(wǎng)絡(luò)傳輸?shù)臄?shù)量

  例如,考慮一個(gè)需要計(jì)算單個(gè)值的應(yīng)用程序,在大批記錄中的標(biāo)準(zhǔn)差值。如果在Delphi應(yīng)用程序中執(zhí)行這項(xiàng)功能就必須從服務(wù)器中得到所有在計(jì)算中用到的記錄,這必將導(dǎo)致網(wǎng)絡(luò)擁塞。因?yàn)閼?yīng)用程序所需的只是代表標(biāo)準(zhǔn)差的最終返回值。因此,由服務(wù)器上的存儲(chǔ)過(guò)程來(lái)讀數(shù)據(jù),執(zhí)行計(jì)算和將值傳給應(yīng)用程序?qū)⒏行А?/P>

  1. TSoredProc的關(guān)鍵屬性

 、 DatabaseName屬性

  DatabaseName屬性描述要訪問(wèn)的數(shù)據(jù)庫(kù)的名字。該屬性可以為:

  ● 已定義的BDE別名

  ● 本地型數(shù)據(jù)庫(kù)的目錄

  ● Local InterBase服務(wù)器的目錄路徑和文件名

  ● TDatabase定義的應(yīng)用程序別名

  在改變DatabaseName之前要使用Close方法將Dataset部件置為非活躍狀態(tài)。

 、 StoredProcName屬性

  StoredProcName屬性表示服務(wù)器上的存儲(chǔ)過(guò)程名。Oracle服務(wù)器允許多個(gè)具有相同名字的存儲(chǔ)過(guò)程。因此要設(shè)置Overload屬性來(lái)描述執(zhí)行在Oracle服務(wù)器上的存儲(chǔ)過(guò)程名。

  ⑶ Overload屬性

  Oracle服務(wù)器允許Oracle軟件包中存儲(chǔ)過(guò)程的重載。就是說(shuō)具有相同名字的不同過(guò)程,設(shè)置Overload屬性用來(lái)描述執(zhí)行在Oracle服務(wù)器上的存儲(chǔ)過(guò)程。如果Overload值為零,則假定沒有重載,如果Overload為1,則Delphi執(zhí)行具有同名的第一個(gè)存儲(chǔ)過(guò)程;如果值為2,則執(zhí)行第二個(gè)存儲(chǔ)過(guò)程。

 、 Params屬性

  Params屬性包含傳給存儲(chǔ)過(guò)程的參數(shù)。

  2. 關(guān)鍵方法

  ⑴ ParamByName方法

  聲明:function ParamByName(const Value: String): TParam;

  ParamByName方法返回Params屬性中具有名為Value的元素值。一般用該方法在動(dòng)態(tài)查詢中給參數(shù)賦值。

 、 Prepare方法

  PrePare方法準(zhǔn)備要執(zhí)行的存儲(chǔ)過(guò)程,這允許服務(wù)器載入存儲(chǔ)過(guò)程,否則準(zhǔn)備處理異常。

 、 ExecProc方法

  ExecProc方法執(zhí)行服務(wù)器上的存儲(chǔ)過(guò)程。

 、 Open方法

  Open方法打開DataSet部件,并將其置于瀏覽狀態(tài)。這相當(dāng)于將Active屬性置為True。對(duì)于TStoredProc如果存儲(chǔ)過(guò)程返回一個(gè)結(jié)果集,則使用Open執(zhí)行存儲(chǔ)過(guò)程。如果存儲(chǔ)過(guò)程返回單行,早使用ExecProc執(zhí)行存儲(chǔ)過(guò)程。

  18.3.3.2 TStoreProc使用方法

  1. 建立一個(gè)StoredProc部件

  為數(shù)據(jù)庫(kù)服務(wù)器上的存儲(chǔ)過(guò)程建立一個(gè)TStoredProc部件的步驟如下:

 、 從Component Palette的Data Access頁(yè)選擇TStoredProc部件放在數(shù)據(jù)模塊上。

 、 將TStoredProc部件的DatabaseName屬性設(shè)置為存儲(chǔ)過(guò)程所在的數(shù)據(jù)庫(kù)名。

  DatabaseName必須是BDE別名。

  ⑶ 將TStoredProc部件的StoredProcName屬性設(shè)為所用的存儲(chǔ)過(guò)程名,或者從下拉式

  列表框中選擇。

 、 在TStoredProc部件的Params屬性中描述輸入?yún)?shù)?梢允褂脜(shù)編輯器來(lái)設(shè)置輸

  入?yún)?shù)。參數(shù)編輯器也可讓用戶察看存儲(chǔ)過(guò)程返回給應(yīng)用程序的值。

  2. 設(shè)置存儲(chǔ)過(guò)程的輸入?yún)?shù),察看輸出結(jié)果參數(shù)

  許多存儲(chǔ)過(guò)程需要給它們傳入一系列的輸入?yún)?shù),以確定處理什么和怎樣處理,在Params屬性中描述這些參數(shù)。所描述的輸入?yún)?shù)的順序是很重要的,它由服務(wù)器上的存儲(chǔ)過(guò)程來(lái)確定。在設(shè)計(jì)時(shí),最容易和最安全的方法是激活TStoredProc參數(shù)編輯器,編輯輸入?yún)?shù)。參數(shù)編輯器以正確的次序列出輸入?yún)?shù),讓你給它們賦值。

  要激活TStoredProc的參數(shù)編輯器:

 、 選擇TStoredProc部件。

 、 按鼠標(biāo)右鍵激活加速菜單(Speed Menu)。

 、 選擇Define Parameters。

  參數(shù)名列表框顯示過(guò)程的所有輸入,輸出和結(jié)果參數(shù)。有關(guān)輸入、輸出參數(shù)的信息從服務(wù)器中獲得。對(duì)于某些服務(wù)器而方,參數(shù)信息是不可訪問(wèn)的,如Sybase,在這種情況下,列表框是空的,因此必須自己按過(guò)程要求的順序增加輸入輸出參數(shù)。

  參數(shù)類型復(fù)選框中描述所選的參數(shù)是輸入、輸出,還是結(jié)果參數(shù)。如果服務(wù)器支持參數(shù)可以既是輸入又是輸出。如果在列表框中增添參數(shù),就必須設(shè)置參數(shù)類型。

  數(shù)據(jù)類型復(fù)選框,列出列表框中所選參數(shù)的數(shù)據(jù)類型。如果給列表框真善美參數(shù),必須設(shè)置數(shù)據(jù)類型。

  在值編輯框中給輸入?yún)?shù)賦值。

  如果服務(wù)器不傳遞存儲(chǔ)過(guò)程信息給Delphi,則可以用Add按鈕給存儲(chǔ)過(guò)程增添參數(shù)。Delete按鈕則是將增添的參數(shù)刪除,Clear按鈕將清除列表框中所有參數(shù)。

  設(shè)置完參數(shù)后,選擇OK按鈕。

  3. 在運(yùn)行時(shí)建立參數(shù)和參數(shù)值

  在運(yùn)行時(shí)建立參數(shù),可直接訪問(wèn)Params屬性。Params屬性是參數(shù)字符串的數(shù)組。例如,下列代碼將編輯框的文本賦給數(shù)組的第一個(gè)字串:

  StaredProc1.Params[0].Asstring := Edit1.Text

  也能夠用ParamsByName方法通過(guò)名字訪問(wèn)參數(shù):

  StoredProc1.ParamsByName('Company') Asstring := Edit1.Text;

  4. 準(zhǔn)備和執(zhí)行存儲(chǔ)過(guò)程

  要使用存儲(chǔ)過(guò)程還必須準(zhǔn)備并執(zhí)行它?梢杂袃煞N方式準(zhǔn)備一個(gè)存儲(chǔ)過(guò)程:

  ● 在設(shè)計(jì)時(shí),通過(guò)選擇參數(shù)編輯器的OK按鈕

  ● 在運(yùn)行時(shí),通過(guò)調(diào)用TStoredProc的Prepare方法

  例如,下面的代碼準(zhǔn)備存儲(chǔ)過(guò)程的執(zhí)行:

  StoredProc1.Prepare;

  要執(zhí)行準(zhǔn)備好的存儲(chǔ)過(guò)程,調(diào)用TStroedProc部件的ExecProc方法。下列代碼演示了準(zhǔn)備和執(zhí)行存儲(chǔ)過(guò)程:

  StoredProc1.Params[0] Asstring := Edit1.Text;

  StoredProc1.prepare;

  StoredProc1.ExecProc;

  當(dāng)你執(zhí)行一個(gè)存儲(chǔ)過(guò)程,它返回輸出參數(shù)或結(jié)果集,有兩種可能的返回類型:?jiǎn)蝹(gè)返回,如單值或值集,和一群結(jié)果集,返回很多值。

上一頁(yè)  1 2 3 4 5 6 7 8 9 下一頁(yè)
  相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試試題及答案解析專題
       預(yù)告:名師解析2010年9月計(jì)算機(jī)等級(jí)考試試題答案
       2010年9月計(jì)算機(jī)等級(jí)考試成績(jī)查詢時(shí)間及入口
       2010年9月計(jì)算機(jī)等考成績(jī)查詢短信免費(fèi)提醒開通
文章搜索
版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。