首頁(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à)格鑒證師
人力資源 | 管理咨詢師考試 | 秘書(shū)資格 | 心理咨詢師考試 | 出版專業(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)用開(kāi)發(fā)

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

  4. 解決一般的聯(lián)接問(wèn)題

  如果用SQL Links建立與InterBase服務(wù)器的連接有問(wèn)題可采用下列步驟來(lái)分離問(wèn)題原因:

 、 通過(guò)Windows ISQL工具測(cè)試能否與InterBase服務(wù)器聯(lián)接

  如果成功,狀態(tài)信息會(huì)出現(xiàn),并繼續(xù)步驟⑵。

  如果不成功,詢問(wèn)數(shù)據(jù)庫(kù)管理員。

  ⑵ 檢驗(yàn)InterBase SQL Links 驅(qū)動(dòng)程序是否正確安裝。

  ⑶ 重新安裝SQL Links。

 、 檢查SERVICES,文件中應(yīng)有行:

  gds_db 3050/tcp

  如果不能正確安裝,就請(qǐng)?jiān)儐?wèn)數(shù)據(jù)庫(kù)管理員,否則繼續(xù)步驟⑸。

 、 測(cè)試底層協(xié)議

 、 輸入TELNET命令,確認(rèn)TCP庫(kù)是否正確安裝。

  如果TCP庫(kù)正確安裝,注冊(cè)提示符會(huì)出現(xiàn)。注冊(cè)入網(wǎng)檢查數(shù)據(jù)庫(kù)是否存在。

  如果消息是“can't resolve hostname” 出現(xiàn),檢查工作站的HOSTS文件是否有你 的主機(jī)名和IP地址的人口。如:

  128.127.50.12 mis_server

  如果用TELNET是成功的,但仍然無(wú)法正確聯(lián)接,則沒(méi)有正確安裝InterBase。請(qǐng)尋

  求數(shù)據(jù)庫(kù)管理員的幫助。

  ② PING到服務(wù)器服務(wù)器上,測(cè)試InterBase服務(wù)器是否正常運(yùn)行并且為桌面應(yīng)用可見(jiàn)

  (如果PING是成功的,消息“servername is alive”被顯示)。

  PING成功但TELNET不成功,則inet daemon可能有問(wèn)題。

  如果PING到服務(wù)器上不成功,則有網(wǎng)絡(luò)路徑問(wèn)題,將問(wèn)題報(bào)給網(wǎng)絡(luò)管理員。

  如果底層協(xié)議不正常,請(qǐng)?jiān)儐?wèn)數(shù)據(jù)庫(kù)管理員,否則繼續(xù)幫助⑹。

 、 確認(rèn)是否有InterBase服務(wù)器的訪問(wèn)權(quán),如果有請(qǐng)繼續(xù)步驟⑺。

 、 檢查BDE應(yīng)用程序的InterBase別名是否正確安裝。

  如果能夠直接從工作站上聯(lián)接,但不能從BDE應(yīng)用程序中,那么很有可能你的

  IDAPI32.CFG別名設(shè)置有問(wèn)題。運(yùn)行BDE配置工具檢查InterBase別名。

  18.3 Delphi Client/Server編程

  本節(jié)介紹如何運(yùn)用Delphi可視化開(kāi)發(fā)工具和ObjectPascal語(yǔ)言開(kāi)發(fā)Client\Server的數(shù)據(jù)庫(kù)應(yīng)用程序,采用的例子是CSDEMOS。這是Delphi2.0自帶的演示Client\Server開(kāi)發(fā)的例子,它安裝在C:\Program Files\Borland\Delphi 2.0\Demos\DB\CSDemos中(缺省安裝)。

  本節(jié)將包含以下內(nèi)容:

  ● 使用TDatabase部件連接SQL服務(wù)器

  ● 用DataSet部件(又稱數(shù)據(jù)集部件),如TTable和TQuery,聯(lián)接TDatabase部件并訪問(wèn)數(shù)據(jù)庫(kù)以及各種表之間如何切換

  ● 使用數(shù)據(jù)庫(kù)連接

  ● 觸發(fā)器的使用方法

  ● TStoredProc部件的使用方法

  ● 客戶和服務(wù)器之間的事務(wù)控制

  ● TStoredProc部件的使用方法

  18.3.1 使用TDatabase部件聯(lián)接SQL服務(wù)器

  18.3.1.1 TDatabase部件概述

  TDatabase部件處理應(yīng)用程序與單個(gè)數(shù)據(jù)庫(kù)的聯(lián)接。如果不需要控制數(shù)據(jù)庫(kù)聯(lián)接,可以不用創(chuàng)建TDatabase部件。當(dāng)應(yīng)用程序試圖打開(kāi)數(shù)據(jù)庫(kù)表(Table)時(shí),會(huì)自動(dòng)創(chuàng)建一個(gè)臨時(shí)的TDatabase部件。但如果你想控制數(shù)據(jù)庫(kù)的持續(xù)聯(lián)接、進(jìn)入數(shù)據(jù)庫(kù)服務(wù)器的注冊(cè)和數(shù)據(jù)庫(kù)別名的值或事務(wù)控制,那么你就必須為每個(gè)所需的聯(lián)接創(chuàng)建一個(gè)TDatabase部件。

  1. 創(chuàng)建TDatabase部件

  TDatabase 部件在Component Palette中的Data Access頁(yè)上,你能將其拖放在數(shù)據(jù)模塊(Data module)或窗體中。在設(shè)計(jì)時(shí)創(chuàng)建TDatabase 部件,用戶可以設(shè)置初始值和編寫(xiě)OnLogin事件處理過(guò)程(Event Handle)。OnLogin事件給用戶提供了第一次注冊(cè)數(shù)據(jù)庫(kù)服務(wù)器時(shí)定制服務(wù)器安全參數(shù),如口令,的能力。

  2. TDatabase的關(guān)鍵屬性

 、 DatabaseName屬性

  DatabaseName是所要聯(lián)接的數(shù)據(jù)庫(kù)名,并且用于DataSet軟件,它將出現(xiàn)在DataSet部件的DatabaseName屬性的下拉式列表框中。設(shè)置DataBaseName屬性是定義數(shù)據(jù)庫(kù)應(yīng)用的特定別名。DataSet部件能引用該名字以取代直接使用BDE別名。當(dāng)TDatabase部件的Connected屬性為T(mén)rue時(shí)不能修改該屬性。

 、 AliaName屬性

  AliasName是BDE配置工具定義的BDE別名的名字。TDatabase 從中獲取其缺省的設(shè)置。如果設(shè)置DriveName屬性,則該屬性將被清除,如果當(dāng)Connected為T(mén)rue 時(shí)強(qiáng)行設(shè)置DriveName屬性將引發(fā)異常。

 、 DriveName屬性

  DriveName是BDE驅(qū)動(dòng)程序,如STANDARD 、ORACLE、SYBASE、INFORMIX或INTERBASE的名字。如果設(shè)置AliasName,則該屬性值將被清除。

 、 Params屬性

  Params屬性包含了打開(kāi)SQL服務(wù)器上數(shù)據(jù)庫(kù)時(shí)所需的參數(shù)。在缺省情況下,這些參數(shù)由BDE配置工具設(shè)置;用戶也可以用數(shù)據(jù)庫(kù)參數(shù)編輯器(Database Parameters Editor)修改這些參數(shù)。對(duì)于數(shù)據(jù)庫(kù)服務(wù)器而言,Params將描述一系列的參數(shù),如服務(wù)器名、 數(shù)據(jù)庫(kù)名、用戶名和口令。

  ⑸ Connected屬性

  Connected屬性指明是否建立數(shù)據(jù)庫(kù)的聯(lián)接,當(dāng)應(yīng)用程序打開(kāi)數(shù)據(jù)庫(kù)中的一個(gè)表時(shí)Connected將被置為T(mén)rue;反之,關(guān)閉數(shù)據(jù)庫(kù)表,Connected將被置為False,除非KeepConnection為T(mén)rue。而將Connected置為T(mén)rue則可不需打開(kāi)數(shù)據(jù)庫(kù)表即可建立數(shù)據(jù)庫(kù)聯(lián)接。TDatabase的KeepConnection屬性描述當(dāng)數(shù)據(jù)庫(kù)中沒(méi)有表打開(kāi)時(shí)是否維持?jǐn)?shù)據(jù)庫(kù)聯(lián)連。

 、 KeepConnection屬性

  KeepConnection屬性描述當(dāng)數(shù)據(jù)庫(kù)中沒(méi)有打開(kāi)表時(shí)是否要保持與服務(wù)器的聯(lián)連, 如果數(shù)據(jù)庫(kù)應(yīng)用需要打開(kāi)和關(guān)閉單個(gè)數(shù)據(jù)庫(kù)中的多個(gè)表時(shí),將KeepConnection 設(shè)置為T(mén)rue是很有用的,那樣,即使沒(méi)有打開(kāi)任何表,應(yīng)用仍能保持與數(shù)據(jù)庫(kù)的聯(lián)接,它能夠重復(fù)地打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)表,而不需要重復(fù)執(zhí)行聯(lián)接過(guò)程。如果KeepConnection置為False,當(dāng)每次將Connected置為T(mén)rue,數(shù)據(jù)庫(kù)都必須執(zhí)行注冊(cè)過(guò)程。

 、 LoginPrompt屬性

  LoginPrompt屬性用于控制如何處理SQL數(shù)據(jù)庫(kù)的安全性問(wèn)題。如置為T(mén)rue,當(dāng)應(yīng)用程序試圖建立數(shù)據(jù)庫(kù)聯(lián)接時(shí)屏幕上將出現(xiàn)標(biāo)準(zhǔn)Delphi注冊(cè)對(duì)話框。用戶必須輸入正確的用戶名和口令。如果置為False,則應(yīng)用程序?qū)ふ襎Database部件的Params 屬性中的注冊(cè)參數(shù)。下面是USERNAME和PASSWORD參數(shù)的例子:

  USERNAME = SYSDBA

  PASSWORD = masterkey

 、 TransIsolation屬性

  TransIsolation屬性描述SQL服務(wù)器所有的事務(wù)控制獨(dú)立級(jí)別。 tiDirtyRead使所有修改都被返回,而不管記錄是否已被提交。tiReadCommitted將只返回提交的記錄,而提交的修改將不會(huì)在結(jié)果中反映出來(lái)。tiRepeatableRead 將只返回事務(wù)過(guò)程中最初的記錄,即使另一個(gè)應(yīng)用程序?qū)⑺鞯男薷奶峤弧?/P>

  各種數(shù)據(jù)庫(kù)服務(wù)器可能不同程度地支持這些獨(dú)立級(jí)別,或者根本不支持。 如果需要的獨(dú)立級(jí)別不被服務(wù)器支持,那么Dephi將使用下一個(gè)更高的獨(dú)立級(jí)別,如下表所示:

  表18.10 各類服務(wù)器TransIsolation設(shè)置

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

  獨(dú)立級(jí)別 Oracle Sybase和 InterBase

  Microsoft SQL

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

  Dirty Read Read Committed Read Committed Read Committed

  Read Committed Read Committed Read Committed Read Committed

  Repeatable read Repeatable read Not Supported Repeatable Read

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

  各個(gè)獨(dú)立級(jí)別的含義請(qǐng)見(jiàn)表18.12。

  3. TDatabase的關(guān)鍵方法

 、 StartTransaction方法

  StartTransartion方法在由TaransIsolation屬性指定的獨(dú)立級(jí)別下開(kāi)始事務(wù)控制。如果在一個(gè)事務(wù)已被激活的情況下調(diào)用該方法,Delphi將引發(fā)異常。

  調(diào)用了該方法后,對(duì)數(shù)據(jù)庫(kù)所做的修改一直由數(shù)據(jù)庫(kù)服務(wù)器維持到調(diào)用Commmit方法提交數(shù)據(jù)或調(diào)用Rollback方法取消修改為止。只有當(dāng)聯(lián)接數(shù)據(jù)庫(kù)服務(wù)器時(shí),才能調(diào)用該方法。

  ⑵ Rollback方法

  Rollback方法返轉(zhuǎn)當(dāng)前事務(wù)控制,并且取消自最近一次調(diào)用StartTransaction以來(lái)對(duì)數(shù)據(jù)庫(kù)所做的所有修改。

  ⑶ Commit方法

  Commit方法提交當(dāng)前事務(wù)控制,并且將自最近一次調(diào)用StartTransaction以來(lái)所有數(shù)據(jù)修改存入數(shù)據(jù)庫(kù)。

  4. TDatabase的OnLogin事件的處理

  OnLogin事件的觸發(fā)條件是當(dāng)聯(lián)接SQL數(shù)據(jù)庫(kù)的TDatabase部件被打開(kāi)并且LoginPrompt屬性為T(mén)rue。使用OnLogin事件處理過(guò)程可以在運(yùn)行時(shí)設(shè)置注冊(cè)參數(shù)。OnLogin 事件處理過(guò)程得到TDatabase的注冊(cè)參數(shù)數(shù)組Params,并且使用Values屬性改變這些參數(shù)。

  例如:

  LoginParams.Vaiues['SERVER NAME'] := 'MYSERVERNAME';

  LoginParams.Values['USER NAME'] := 'MYUSERNAME';

  LoginParams.Values[PASSWORD'] := 'MYAPSSWORD';

  當(dāng)控制從OnLogin事件處理過(guò)程中返回時(shí),應(yīng)用程序用這些參數(shù)來(lái)建立聯(lián)接。

  OnLogin事件處理過(guò)程的聲明是這樣的:

  TLoginEvent = procedure(Database: TDatabase; LoginParam: TStrings) of Object;

  property OnLogin: TLoginEvent;

  TLoginEvent類型是處理OnLogin事件的方法頭。Database參數(shù)是要聯(lián)接的數(shù)據(jù)庫(kù)。LoginParams是TStrings類型的對(duì)象,包含用戶名和口令,以及打開(kāi)數(shù)據(jù)庫(kù)時(shí)所用的其它參數(shù)。用戶名是形如USER NAME = John.Doe的字符串,口令是形如PASSWORD = is_Password的字符串。當(dāng)OnLogin事件處理過(guò)程被調(diào)用時(shí)應(yīng)當(dāng)在LoginParams中加入用戶名和口令。

  18.3.1.2 定制數(shù)據(jù)庫(kù)服務(wù)器的注冊(cè)參數(shù)

  大多數(shù)數(shù)據(jù)庫(kù)服務(wù)器都包含限制數(shù)據(jù)庫(kù)訪問(wèn)的安全特征。通常,在用戶能訪問(wèn)數(shù)據(jù)庫(kù)之前,服務(wù)器都要求注冊(cè)的用戶名和口令。

  如果服務(wù)器需要注冊(cè),在設(shè)計(jì)階段,Delphi 會(huì)在你試圖聯(lián)接時(shí)提示你,諸如在會(huì)TTable部件描述數(shù)據(jù)庫(kù)表名時(shí)。

  在缺省情況下,Delphi應(yīng)用在打開(kāi)數(shù)據(jù)庫(kù)服務(wù)器的聯(lián)接時(shí),顯示標(biāo)準(zhǔn)注冊(cè)對(duì)話框。如果聯(lián)接已建立,則注冊(cè)對(duì)話框不會(huì)出現(xiàn)。

  可以用下列方法處理服務(wù)器注冊(cè):

  1. 將TDatabase部件的LoginPrompt屬性置為T(mén)rue。這樣,當(dāng)應(yīng)用程序試圖建立數(shù)據(jù)庫(kù)聯(lián)接時(shí),標(biāo)準(zhǔn)注冊(cè)對(duì)話框會(huì)打開(kāi)。

  2. 將LoginPrompt屬性置為False,在TDatabase部件的Params屬性中包含用戶名和口令參數(shù)。例如:

  USERNAME = SYSDBA

  PASSWORD = mosterkey

  但不推薦使用該方法,因?yàn)檫@會(huì)危害數(shù)據(jù)庫(kù)安全

  3. 使用TDatabase部件的OnLogin事件設(shè)置注冊(cè)參數(shù)。OnLogin事件得到TDatabase 注冊(cè)參數(shù)數(shù)組的拷貝,并利用Values屬性改變這些參數(shù)。如:

  LoginParams.Values['SERVER NAME'] := 'MYSERVERNAME';

  LoginParams.Values['USER NAME'] := 'MYUERNAME';

  LoginParams.Values['PASSWORD'] := 'MYPASSWORD';

  當(dāng)控制從數(shù)據(jù)庫(kù)注冊(cè)事件處理過(guò)程中返回時(shí),這些參數(shù)被用來(lái)建立聯(lián)接。

  18.3.1.3 建立應(yīng)用程序特定的別名

  TDatabase的Aliases描述了數(shù)據(jù)庫(kù)表的位置和數(shù)據(jù)庫(kù)服務(wù)器的聯(lián)接參數(shù)。通常都是在Delphi之外,運(yùn)用BDE配置工具(BDECFG32.EXE)創(chuàng)建別名,并且別名被存在BDE 配置文件IDAPI32.CFG中。

  用戶也可以用TDatabase創(chuàng)建只在應(yīng)用程序中可用的別名,用TDatabase 創(chuàng)建的別名不會(huì)加進(jìn)BDE配置文件中。任何DataSet部件可通過(guò)描述DatabaseName 屬性來(lái)使用這些別名。為了定制這些局部別名的參數(shù),用鼠標(biāo)左鍵雙擊TDatabase部件或從TDatabase部件中選擇Database Editor,Delphi就會(huì)打開(kāi)數(shù)據(jù)庫(kù)屬性編輯器(Database Properties Editor)。

  18.3.1.4 控制數(shù)據(jù)庫(kù)的聯(lián)接

  TDatabase部件的Connected屬性,指示TDatabase部件是否建立與數(shù)據(jù)庫(kù)服務(wù)器的聯(lián)接。當(dāng)應(yīng)用程序打開(kāi)數(shù)據(jù)庫(kù)中的表時(shí),Connected被設(shè)置為T(mén)rue。將Connected 設(shè)為T(mén)rue就建立了數(shù)據(jù)庫(kù)的聯(lián)接。

  1. 保持?jǐn)?shù)據(jù)庫(kù)聯(lián)接

  TDatabase的KeepConnection屬性描述當(dāng)沒(méi)有數(shù)據(jù)庫(kù)表打開(kāi)時(shí)是否要與保持?jǐn)?shù)據(jù)庫(kù)的聯(lián)接。

  如果應(yīng)用程序需要在單個(gè)數(shù)據(jù)庫(kù)中多次打開(kāi)關(guān)閉多個(gè)表時(shí),將KeepConnection 置為T(mén)rue能使應(yīng)用程序具備更好的性能。

  當(dāng)KeepConnection為T(mén)rue時(shí),即使沒(méi)有表打開(kāi),應(yīng)用程序也能保持?jǐn)?shù)據(jù)庫(kù)的聯(lián)接。那么就能重復(fù)打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)表而不需每次進(jìn)行聯(lián)接注冊(cè)。

  2. 使用TSesstion控制聯(lián)接

  TSesstion部件有一個(gè)面向整個(gè)應(yīng)用程序的KeepConnections屬性。如果Session.KeepConnections為T(mén)rue,那么用于所有TDatabase部件的數(shù)據(jù)庫(kù)聯(lián)接都是持久的。

  TSession為應(yīng)用程序提供數(shù)據(jù)庫(kù)聯(lián)接的全局控制。TSession中的Databases 屬性是Session中所有活躍數(shù)據(jù)庫(kù)組成的數(shù)組,DatabasesCount屬性描述活躍數(shù)據(jù)庫(kù)的數(shù)目。

  3. 描述Net和Private目錄

  TSession的NetFileDir屬性描述BDE網(wǎng)絡(luò)控制目錄的路徑。TSession的PrivateDir屬性描述存儲(chǔ)諸述處理局部SQL表達(dá)式的臨時(shí)文件的目錄的路徑。

  18.3.1.5 獲取數(shù)據(jù)庫(kù)信息

  TSession擁有許多讓用戶獲取數(shù)據(jù)庫(kù)有關(guān)的信息,每個(gè)方法都以TStringList 部件作為傳入?yún)?shù),并將信息返回TStringList中。

  1. GetAliasNames方法

  聲明:procedure GetAliasNames(List: TStringList);

  GetAliasNames方法消除List中的參數(shù),并將所有已定義的BDE別名的名字寫(xiě)入List。應(yīng)用程序生成的別名不包括在內(nèi)。

  2. GetAliasParams方法

  聲明:procedure GetAliasParams(const AliasName: String; List: TStringList);

  GetAliasParams方法清除List的內(nèi)容,并將BDE別名為AliaName的參數(shù)寫(xiě)入List。

  3. GetDatabaseNames方法

  聲明:procedure GetDatabaseNames(List: TStrings);

  GetDatabaseNames方法清除List的內(nèi)容并將所有BDE別名和應(yīng)用程序定義的別名的名字寫(xiě)入List。

  4. GetDriverNames方法

  聲明:procedure GetDriverNames(List: TStrings);

  GetDriverNames方法清除List中的內(nèi)容,并將BDE當(dāng)前安裝的驅(qū)動(dòng)程序名寫(xiě)入List。

  5. GetDriverParams方法

  聲明:procedure GetDriverParams(const DriverName: String; List: TStrings);

  GetDriverParams方法消除List中的內(nèi)容,并將名為DriveName驅(qū)動(dòng)程序缺省參數(shù)寫(xiě)入List。

  6. GetTableNames方法

  聲明:procedure GetTableNames(const DatabaseName, Pattern: Strings;

  Extensions, SystemTable: Boolean; List: TStrings);

  GetTableNames方法消除List中的內(nèi)容,并將名為DatabaseName的數(shù)據(jù)庫(kù)中的所有表的名字寫(xiě)入List。Pattern參數(shù)將限制表名。對(duì)于SQL服務(wù)器,將SystemeTables設(shè)為T(mén)rue將獲取系統(tǒng)表和用戶表。對(duì)非SQL數(shù)據(jù)庫(kù),將Extensions設(shè)為T(mén)rue將在表名中包含擴(kuò)展名。

  18.3.2 處理Client/Server事務(wù)控制

  使用隱式控制和顯示控制的數(shù)據(jù)庫(kù)應(yīng)用中有兩種方法管理事務(wù)控制:

  ● 運(yùn)用TDatabase部件的屬性和方法進(jìn)行顯式控制

  ● 運(yùn)用TQuery部件的傳遞式SQL控制事務(wù)

  Delphi還支持Paradox和dBASE表的局部事務(wù)處理

  18.3.2.1 事務(wù)控制概述

  當(dāng)用Delphi創(chuàng)建數(shù)據(jù)庫(kù)應(yīng)用時(shí),Delphi提供了用為所有數(shù)據(jù)庫(kù)訪問(wèn)的事務(wù)控制。

  事務(wù)是這樣一組操作,在被提交前,它們對(duì)一個(gè)或多個(gè)數(shù)據(jù)庫(kù)的操作,必須全部執(zhí)行成功。如果其中一個(gè)操作失敗,則所有操作失敗,即事務(wù)具有原子性。

  即使發(fā)生硬件失敗,事務(wù)也要保證數(shù)據(jù)庫(kù)一致性。當(dāng)允許多用戶并發(fā)訪問(wèn)時(shí),事務(wù)還要維持?jǐn)?shù)據(jù)完整性。

  例如:一個(gè)應(yīng)用程序可能更新ORDERS表以指明接受購(gòu)買(mǎi)某一項(xiàng)目的定單,那么也要更新INNENTORY表以反映庫(kù)存的減少。如果在第一個(gè)更新之后,第二個(gè)更新之前發(fā)生硬件錯(cuò)誤,數(shù)據(jù)庫(kù)就會(huì)處于不一致?tīng)顟B(tài),因?yàn)閹?kù)存情況沒(méi)有反映定單情況。在事務(wù)控制下,兩個(gè)表達(dá)式將在同一時(shí)間提交,如果其中一個(gè)表達(dá)式失敗,則被返轉(zhuǎn)(Rolled Back)。

  18.3.2.2 使用隱式控制

  在缺省情況下,Delphi通過(guò)BDE為應(yīng)用程序提供隱式事務(wù)控制。當(dāng)應(yīng)用程序處于隱式事務(wù)控制時(shí)Delphi為DataSet中的寫(xiě)每個(gè)記錄進(jìn)行隱式事務(wù)控制。它提交每一個(gè)獨(dú)立的寫(xiě)操作,如Post和Append Record。

  使用隱式事務(wù)控制是容易的,它保證最小的記錄更新沖突和數(shù)據(jù)庫(kù)的一致性視圖。另一方面,因?yàn)閷?xiě)入數(shù)據(jù)庫(kù)的數(shù)據(jù)的每一行都要進(jìn)行事務(wù)控制, 所以隱式事務(wù)控制將導(dǎo)致網(wǎng)絡(luò)過(guò)忙和應(yīng)用程序性能下降。

  如果采用顯式事務(wù)控制,就能選擇最有效的時(shí)機(jī)來(lái)開(kāi)始、提交和終止事務(wù),特別是在開(kāi)發(fā)多用戶環(huán)境下的客戶應(yīng)用程序運(yùn)行訪問(wèn)遠(yuǎn)程SQL服務(wù)器,就更應(yīng)該采用顯式控制。

  18.3.2.3 使用顯式事務(wù)控制

  有兩種協(xié)作又獨(dú)立的方式可運(yùn)用于Delphi數(shù)據(jù)庫(kù)應(yīng)用的事務(wù)控制:

  ● 使用TDatabase部件的方法和屬性

  ● 使用TQuery部件中的傳遞式SQL。這種方式只有在Delphi Client/Server Suite版中才有效,SQL Links將SQL表達(dá)式直接傳給過(guò)程SQL或ODBC服務(wù)器

  使用TDatabase部件的方法和屬性的好處是提供了清晰的、輕便的、與特定數(shù)據(jù)庫(kù)或服務(wù)器無(wú)關(guān)的應(yīng)用能力。

  使用傳遞式SQL的主要好處在于可以運(yùn)用特定服務(wù)器的先進(jìn)事務(wù)管理能力。

上一頁(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)提醒開(kā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)注明出處。