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

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

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

  5. 訪問輸出參數(shù)和結(jié)果集

  存儲過程在輸出參數(shù)數(shù)組中返回值。如果服務(wù)器支持返回值可以是單個結(jié)果或者結(jié)果集。

  在運行時訪問存儲過程的輸出參數(shù),可以索引Params屬性或者用ParamByName方法訪問這些值。下列表達式都用輸出參數(shù)設(shè)置了編輯框的值:

  Edit1.Text := StoredProc1.Params[6].AsString;

  Edit1.Text := StoredProc1.ParamsByName('Contact').AsString;

  如果存儲過程返回結(jié)果集,則用標(biāo)準(zhǔn)數(shù)據(jù)相關(guān)控制訪問和顯示值會更有用。

  在某些服務(wù)器上如Sybase,存儲過程能象查詢語句那樣返回結(jié)果集,應(yīng)用程序可以使用數(shù)據(jù)相關(guān)控制一顯示這些存儲過程的輸出。

  用數(shù)據(jù)相關(guān)控制顯示存儲過程返回結(jié)果的方法如下:

 、 將DataSource部件放在數(shù)據(jù)模塊上。

 、 將DataSource部件的DataSet屬性設(shè)置為接收數(shù)據(jù)的TStoredProc部件的名字。

 、 將數(shù)據(jù)相關(guān)控制的DataSource屬性設(shè)為DataSource部件的名字。

  這樣,當(dāng)用于TStoredProc部件和Active屬性為True時,數(shù)據(jù)相關(guān)控制就能顯示從存儲過程返回的結(jié)果。

  18.3.4 從開發(fā)平臺到服務(wù)器的向上適化

  18.3.4.1 適化概述

  所謂適化就是將桌面應(yīng)用轉(zhuǎn)化為Client/Server應(yīng)用。

  適化是一個很復(fù)雜的主題,這里不詳細講述。本節(jié)將介紹適化Delphi 應(yīng)用程序中最重要的方面。

  適化的主要方面有:

  ● 將數(shù)據(jù)庫從桌面平臺到服務(wù)器的適化

  ● 將應(yīng)用程序轉(zhuǎn)化為Client/Server的適化

  適化還需要實現(xiàn)從桌面環(huán)境到Client/Server環(huán)境的轉(zhuǎn)化。

  桌面數(shù)據(jù)庫和SQL服務(wù)器數(shù)據(jù)庫在許多方面有不同之處。例如:

  ● 桌面數(shù)據(jù)庫用于同一時刻單用戶的訪問,而服務(wù)器用于多用戶訪問

  ● 桌面數(shù)據(jù)庫是面向記錄的,而服務(wù)器是面向集合的

  ● 桌面數(shù)據(jù)庫將每個表存儲在獨立的文件中, 而服務(wù)器將所有的表存儲在數(shù)據(jù)庫中Client/Server應(yīng)用必須解決更新的問題,最復(fù)雜的是聯(lián)接、網(wǎng)絡(luò)和事務(wù)控制

  18.3.4.2 適化數(shù)據(jù)庫

  適化數(shù)據(jù)庫包含下列步驟:

  ● 在桌面數(shù)據(jù)庫結(jié)構(gòu)的基礎(chǔ)上,定義服務(wù)器上的元數(shù)據(jù)

  ● 將數(shù)據(jù)從桌面轉(zhuǎn)化到服務(wù)器中

  ● 解決下列問題:

  ● 數(shù)據(jù)類型差異

  ● 數(shù)據(jù)安全性和完整性

  ● 事務(wù)控制

  ● 數(shù)據(jù)訪問權(quán)

  ● 數(shù)據(jù)合法性

  ● 鎖定

  Delphi提供了兩種方法適化一個數(shù)據(jù)庫。

  ● 使用Database Desktop工具,選擇菜單Tools/Utilities/Copy to命令將數(shù)據(jù)庫表從桌面方式拷貝到SQL格式

  ● 建立應(yīng)用TBatchMove部件的應(yīng)用程序

  這兩種方法都可以將表結(jié)構(gòu)和數(shù)據(jù)從桌面數(shù)據(jù)源轉(zhuǎn)化到服務(wù)器上。依靠這些數(shù)據(jù)庫,可能需要改變結(jié)果表。例如,可能想進行不同數(shù)據(jù)類型的映射。

  也可以將下列特征加入數(shù)據(jù)庫:

  ● 完整性約束

  ● 索引

  ● 檢測約束

  ● 存儲過程和觸發(fā)器

  ● 其它服務(wù)器特征

  如果用SQL腳本和服務(wù)器數(shù)據(jù)定義工具定義元數(shù)據(jù)會更有效。然后用前面介紹的兩種方法轉(zhuǎn)移數(shù)據(jù)。因為如果是手工定義數(shù)據(jù)庫表,Database Desktop和TBatchMove 部件將只拷貝數(shù)據(jù)。

  18.3.4.3 適化應(yīng)用程序

  在理論上,設(shè)計用來訪問局部數(shù)據(jù)的Delphi應(yīng)用程序做很少的修改就可以訪問遠程服務(wù)器上的數(shù)據(jù)。如果在服務(wù)器上定義適合的數(shù)據(jù)源,你就能將應(yīng)用程序指向訪問它,這只需簡單地改變應(yīng)用程序中TTable或TQuery部件的DatabaseName屬性。

  實際上,在訪問局部和過程數(shù)據(jù)源之間有許多重要的不同之處。Client/Server應(yīng)用程序必須解決大量的在桌面應(yīng)用中所沒有的問題。

  任何Delphi應(yīng)用程序都能用TTable或TQuery部件訪問數(shù)據(jù)。桌面應(yīng)用程序通常都是使用TTable部件。當(dāng)適化到SQL服務(wù)器上時,用TQuery會更有效,如果應(yīng)用程序要檢索大量記錄,則TQuery部件要略勝一籌。

  如果應(yīng)用程序使用統(tǒng)計或數(shù)學(xué)函數(shù),那么在服務(wù)器上通過存儲過程執(zhí)行這些函數(shù)會更有效。因為存儲過程執(zhí)行更快,使用存儲過程還可以減少網(wǎng)絡(luò)負載,特別是大量行數(shù)據(jù)的函數(shù)。

  例如,計算大量記錄的標(biāo)準(zhǔn)差:

  ● 如果該函數(shù)在客戶端執(zhí)行,所有的值從服務(wù)器上檢索出來并送到客戶端,導(dǎo)致網(wǎng)絡(luò)擁塞

  ● 如果該函數(shù)在服務(wù)器端執(zhí)行,則應(yīng)用程序只需要服務(wù)器上的答案

  18.4 Delphi客戶/服務(wù)器應(yīng)用實例分析

  本節(jié)中采用的實例是Delphi2.0數(shù)據(jù)庫的例子CSDEMO。CSDEMO是Delphi客戶/服務(wù)器編程的示例程序,它采用的數(shù)據(jù)庫服務(wù)器是Local InterBase Server。

  CSDEMO較好地示范了BDE環(huán)境的配置,InterBASE Server高級功能應(yīng)用,SQL服務(wù)器聯(lián)接,觸發(fā)器應(yīng)用、存儲過程編程和事務(wù)控制技術(shù)等,具有較高的參考價值。本節(jié)講述下列內(nèi)容:

  ● 數(shù)據(jù)庫環(huán)境介紹

  ● TDatabase的應(yīng)用

  ● 不同數(shù)據(jù)庫表的切換

  ● 觸發(fā)器編程

  ● 存儲過程編程

  ● 事務(wù)控制應(yīng)用

  18.4.1 數(shù)據(jù)庫環(huán)境介紹

  本例中采用的數(shù)據(jù)庫服務(wù)器是Local InterBase Server。Local InterBase是InterBase Server的單用戶版32位、兼容ANSI SQL。Local InterBase支持客戶/服務(wù)器應(yīng)用在單機上的開發(fā)和測試,并且可以很容易地適化到InterBase Server上。因此,開發(fā)客戶/服務(wù)器應(yīng)用采用Local InterBase作為原型開發(fā)環(huán)境是很方便的。

  18.4.1.1 IBLOCAL的BDE參數(shù)

  本例中的SQL數(shù)據(jù)庫是IBLOCAL。它是由BDE配置工具(BDECFG32.EXE)設(shè)置參數(shù)值。它的各項參數(shù)值列于下表:

  表18.13 IBLOCAL的各項參數(shù)值

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

  參 數(shù) 名 參 數(shù) 值

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

  TYPE INTRBASE

  PATH

  SERVER NAME C:\INTRBASE\EXAMPLES\EMPLOYEE.GDB

  USER NAME SYSDBA

  OPEN MODE READ/WRITE

  SCHEMA CACHE SIZE 8

  LANGDRIVER

  SQLQRYMODE

  SQLPASSTHRU MODE SHARED AUTOCOMMIT

  SCHEMA CHCHE TIME -1

  MAX ROWS -1

  BATCH COUNT 200

  ENABLE SCHEMA CACHE FALSE

  SCHEMA CACHE DIR

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

  18.4.1.2 數(shù)據(jù)庫結(jié)構(gòu)介紹

  IBLOCAL數(shù)據(jù)庫的結(jié)構(gòu)都是由InterBase服務(wù)器工具交互式SQL工具(ISQL)定義的。

  用ISQL定義數(shù)據(jù)庫,首先要用Create Database命令建立數(shù)據(jù)庫,建立的新數(shù)據(jù)庫一般是以GDB為擴展名。建立好后,就可以用SQL語言定義數(shù)據(jù)庫表,例如建立EMPLOYEE表的SQL語句如下:

  定義域名數(shù)據(jù)類型:

  CREATE DOMAIN FIRSTNAME AS VARCHAR(15);

  CREATE DOMAIN LASTNAME AS VARCHAR(20);

  CREATE DOMAIN COUNTRYNAME AS VARCHAR(15);

  CREATE DOMAIN EMPNO AS SMALLINT;

  CREATE DOMAIN DEPTNO AS CHAR(3)

  CHECK (VALUE = '000' OR (VALUE > '0' AND VALUE <= '999') OR VALUE IS NULL);

  CREATE DOMAIN JOBCODE AS VARCHAR(5)

  CHECK (VALUE > '99999');

  CREATE DOMAIN JOBGRADE AS SMALLINT

  CHECK (VALUE BETWEEN 0 AND 6);

  CREATE DOMAIN SALARY AS NUMERIC(15, 2)

  DEFAULT 0

  CHECK (VALUE > 0);

  建立EMPLOYEE表:

  CREATE TABLE EMPLOYEE (EMP_NO EMPNO NOT NULL,

  FIRST_NAME FIRSTNAME NOT NULL,

  LAST_NAME LASTNAME NOT NULL,

  PHONE_EXT VARCHAR(4),

  HIRE_DATE DATE DEFAULT 'NOW' NOT NULL,

  DEPT_NO DEPTNO NOT NULL,

  JOB_CODE JOBCODE NOT NULL,

  JOB_GRADE JOBGRADE NOT NULL,

  JOB_COUNTRY COUNTRYNAME NOT NULL,

  SALARY SALARY NOT NULL,

  FULL_NAME COMPUTED BY (last_name || ', ' || first_name),

  PRIMARY KEY (EMP_NO));

  CHECK語句是給數(shù)據(jù)庫字段取值范圍加約束條件。PRIMARY_KEY語句是給表建立關(guān)鍵字索引。

  如法炮制,就可以定義IBLOCAL中的所有表。

  IBLOCAL中的表包括:

  EMPLOYEE CUSTOMER DEPARTMENT EMPLOYEE_PROJECT

  PROJECT SALES SALARY_HISCORY

  各數(shù)據(jù)庫表中的內(nèi)容如下:

  表18.14 EmployeeDemoDB中各數(shù)據(jù)庫表的內(nèi)容

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

  數(shù)據(jù)庫表名 表中內(nèi)容

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

  EMPLOYEE 雇員信息

  CUSTOMER 客戶信息

  DEPARTMENT 部門信息

  EMPLOYEE_PROJECT 雇員負責(zé)的工程

  PROJECT 工程信息

  SALES 銷售信息

  SALARY_HISTORY 雇員薪水調(diào)整的歷史信息

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

  每個數(shù)據(jù)庫表中都定義了關(guān)鍵字段。關(guān)于數(shù)據(jù)庫表中的字段名、類型、大小,這里不再贅述。

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