首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級 | 職稱英語 | 商務(wù)英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學(xué)習(xí) | 法語 | 德語 | 韓語
計算機(jī)等級考試 | 軟件水平考試 | 職稱計算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導(dǎo)游資格
報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會計從業(yè)資格考試會計證) | 經(jīng)濟(jì)師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務(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í) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲

2011計算機(jī)等考Delphi:數(shù)據(jù)庫創(chuàng)建及MASTAPP介紹

本章主要介紹用Delphi開發(fā)簡單的數(shù)據(jù)庫應(yīng)用程序的一般方法和步驟,首先讓讀者對Delphi強(qiáng)勁的數(shù)據(jù)庫應(yīng)用開發(fā)工具有一個直觀的印象,然后在此基礎(chǔ)上進(jìn)行復(fù)雜的數(shù)據(jù)庫應(yīng)用程序的設(shè)計。

  14.6.2 實現(xiàn)異常保護(hù)的TRY...FINALLY語句

  上面的程序存在著潛在的危險,在實際應(yīng)用過程中,可能因為某些原因使得對數(shù)據(jù)庫表的更新不能進(jìn)行下去。如當(dāng)程序試圖執(zhí)行Post方法將修改后的記錄寫回磁盤時,而又因為某種原因磁盤沒有準(zhǔn)備好,這時便出現(xiàn)了異常。當(dāng)出現(xiàn)異常時,應(yīng)用程序會暫停下來并且會彈出一對話框顯示有關(guān)的錯誤信息,在用戶單擊錯誤信息對話框之后,程序?qū)⒗^續(xù)執(zhí)行到某一個地方去,而這個地方常常不是用戶所能預(yù)料到的。在我們的程序中, 在執(zhí)行Post方法之前,窗體中所有的部件與TTable部件都已失去聯(lián)系。因此,這種異常將導(dǎo)致窗體中顯示的數(shù)據(jù)和數(shù)據(jù)庫無關(guān)。

  Object Pascal中的Try...Finally語句為我們解決上述異常問題提供了一個解決方法。在Delphi中仍然采用了這一語句用來處理異常問題。實際上,Try...Finally 語句是把兩組語句組合在一起。語句的Try部分包含了可能產(chǎn)生異常的程序代碼,F(xiàn)inally部分包含了即使發(fā)生了異常也必須執(zhí)行的一條或多條語句。在本例中, Finally 部分只包含了EnableControls方法調(diào)用這一條語句,我們將前面的代碼改寫并組合進(jìn)Try...Finally 語句:

  with Table Do

  begin

  DisableControls;{在修改記錄的過程中,使其它部件無效}

  Try;

  First; {將記錄指針指向第一條記錄}

  while not EOF do

  begin

  <讀取記錄的一個字段值到一個變量中>

  <做適當(dāng)?shù)男薷?gt;

  Edit; {將TTable部件置成編輯狀態(tài)}

  <將修改后的字段值寫回到其對應(yīng)的字段>

  post; {將修改后的記錄寫回數(shù)據(jù)庫}

  next; {修改下一條記錄}

  end;

  enablecontrols;

  Finally;{出現(xiàn)異常時,執(zhí)行下面的程序}

  enablecontrols; {恢復(fù)其它部件的功能}

  end; {結(jié)束Try...Finally語句}

  end;

  在保留字Try和Finally之間的代碼跟前面的代碼是一樣的,它們用于在記錄之間移動記錄指針并處理對記錄的修改,這一段代碼可能會出現(xiàn)異常,當(dāng)異常發(fā)生時,我們想保證執(zhí)行EnableControls,以便窗體中各控件恢復(fù)與 TTable 部件的聯(lián)系, 因此我們必須將EnableControls語句放在Finally和結(jié)束語句End之間。

  在這里要特別注意,請讀者們不要混淆了Try...Finally語句和Try...Except 語句。如果真正想在發(fā)生異常時采取相應(yīng)的處理,就要使用Try...Except語句。Try... Finally語句只是用來處理當(dāng)異常出現(xiàn)時,使應(yīng)用程序執(zhí)行Finally部分的語句,使程序繼續(xù)執(zhí)行下去。Try...Except語句是實現(xiàn)異常處理,Try...Finally語句是實現(xiàn)異常保護(hù)。

  有了上述這些概念,我們便可以提供這個例子的一些程序代碼,它涉及了所有這些內(nèi)容。

  程序清單:修改數(shù)據(jù)庫中的記錄

  unit Unit26;

  interface

  uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, Grids, DBGrids, ExtCtrls, DB, DBTables, Buttons;

  type

  TForm1 = class(TForm)

  DataSource1: TDataSource;

  customerTable: TTable;

  Panel1: TPanel;

  DBGrid1: TDBGrid;

  Panel2: TPanel;

  UpperCaseFirstAddBtn: TButton;

  UpperCaseSecondAddBtn: TButton;

  MixedCaseFirstAddBtn: TButton;

  MixedCaseSecondAddBtn: TButton;

  BitBtn1: TBitBtn;

  procedure ForceCase(TargetField:String;ToUpper:Boolean);

  procedure UpperCaseFirstAddBtnClick(Sender: TObject);

  procedure MixedCaseFirstAddBtnClick(Sender: TObject);

  procedure UpperCaseSecondAddBtnClick(Sender: TObject);

  procedure MixedCaseSecondAddBtnClick(Sender: TObject);

  procedure FormCreate(Sender: TObject);

  private

  { Private declarations }

  public

  { Public declarations }

  end;

  var

  Form1: TForm1;

  implementation

  const

  upper=true;

  Mixed=False;

  {$R *.DFM}

  Function IsUpper(ch:char):Boolean;

  begin

  If (ch>='A')and(ch<='Z')then

  IsUpper:=true

  else

  IsUpper:=False;

  end;

  procedure TForm1.ForceCase(TargetField:String;ToUpper:Boolean);

  var

  WorkBuffer:string;

  i:Integer;

  begin

  with customerTable do

  begin

  DisableControls;

  TRY

  First; {將記錄指針移到第一條記錄處 }

  While not EOF do

  begin

  WorkBuffer:=FieldByName(TargetField).AsString;

  If ToUpper then

  for i:=1 to Length(WorkBuffer)do

  WorkBuffer[i]:=UpCase(WorkBuffer[i])

  else

  begin

  for i:=1 to Length(WorkBuffer) do

  If IsUpper(WorkBuffer[i]) then

  WorkBuffer[i]:=chr(ord(WorkBuffer[i])+32);

  WorkBuffer[1]:=UpCase(WorkBuffer[1])

  end;

  Edit;

  FieldByName(TargetField).AsString:=WorkBuffer;

  post;

  Next;

  end;

  Finally

  enableControls;

  end;

  end;

  end;

  procedure TForm1.UpperCaseFirstAddBtnClick(Sender: TObject);

  begin

  ForceCase('Addr1',Upper);

  end;

  procedure TForm1.MixedCaseFirstAddBtnClick(Sender: TObject);

  begin

  ForceCase('Addr1',Mixed);

  end;

  procedure TForm1.UpperCaseSecondAddBtnClick(Sender: TObject);

  begin

  ForceCase('Addr2',Upper);

  end;

  procedure TForm1.MixedCaseSecondAddBtnClick(Sender: TObject);

  begin

  ForceCase('Addr2',Mixed);

  end;

  procedure TForm1.FormCreate(Sender: TObject);

  begin

  customerTable.open;

  end;

  end.

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