熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:簡單數據庫應用的創建及MASTAPP介紹(一)[2]

2013-11-23 17:50:17  來源: Delphi編程 

   利用TDBNavigator部件創建存取程序

  我們可以改進一下Cust程序以便它一次只在對話框中顯示一個客戶的記錄信息並用一個TDBNavigator部件控制對記錄存取──允許我們選擇一個記錄來顯示或編輯以及增加和刪除記錄完成的應用窗體

  增強的Cust程序

   創建應用程序窗體

  我們可以非常迅速地創建起來因為到目前為止我們對創建窗體的方法已經比較熟悉我們首先把所有的部件都放到窗體中然後再設置它們的屬性

  開始一個新工程設置窗體Form的Name 屬性為 Customerform Caption 屬性為         CustomerForm然後從部件選擇板上的Data Access頁上選取一個Datasource部件和一個Table部件放在窗體的右上角再從Data Controls頁上選取DBNatvigator部件放在窗體的左上角

  窗體中其余的部件如圖所示它們是TDBEdit和TLabel部件按圖 所示創建並布置部件分別命名DBEdit部件為EditCustno Editcompany EditAddr EditAddrEditCityEditStateEditZipEditCountryEditPhone EditFAXEditTaxRateEditContact

  現在我們來連接TTable部件和 TDataSource 部件 然後連接所有的數據浏覽部件和DataSource部件設置TBNavigator部件和TDBEdit部件的屬性它們的DataSource屬性都設置為DataSouce我們最後要做的事是連接窗體中各個TDBEdit 部件和它們在數據庫表中對應的字段名通過設置TDBEdit 部件的 DataField 屬性來完成 例如要連接命名為EditCustNo的TDBEdit部件和數據庫表中的CustNo字段具體步驟如下

  ①選中窗體中的EditCustNo部件

  ②在Object Inspector窗體中單擊DataField屬性右邊的箭頭

  ③從下拉列表中選中CustNo字段名

  對窗體中的其他TDBEdit部件執行以上操作連接到其對應的字段然後保存文件命名代碼單元名為Custpas命名工程名為CusprjDPR

   使用TDBNavigator部件移動記錄指針

  上述程序運行之後在數據浏覽部件中會顯示數據庫表中的第一條記錄利用Tab 鍵可以在字段之間移動但是不能編輯字段因為我們為了防止意外修改設置了Table的AutoEdit屬性值為False如果想對數據庫表中的記錄進行編輯插入和刪除操作或者想顯示數據庫表中另一條記錄 需要按 TDBNvigator 部件上這些功能所對應的功能按鈕TDBNavigator部件上的按鈕和它們的功能如圖所示

  TDBNavigator中的按鈕

  TDBNavigator部件的絕大多數功能都可以根據其按鈕的圖標能夠很容易地識別出來而且TDBNavigator部件本身能感知到很多事情如當前指針是否在數據庫表的開頭或尾部如果用戶正在查看數據庫表中的最後一個記錄Next和Last按鈕將會變灰成為非活動狀態同樣如果用戶當前正在浏覽數據庫表中的第一條記錄 TDBNavigator 上的 First 和Previous按鈕會變灰而成為非活動狀態有關各個按鈕的作用的更詳細說明請查看聯機幫助

  如果用戶想修改當前的記錄單擊TDBNavigator部件的Edit按鈕然後完成需要做的修改在做完修改之後單擊Post按鈕以便將作的修改寫入實際的數據庫表中(更新實際的數據庫表中的記錄在數據庫術語中叫作投寄記錄即PostT)如果想取消所做的修改單擊Cancel按鈕Cancel按鈕只取消自從上一次往數據庫表中投寄記錄以來對記錄所做的修改例如如果用戶曾修改了CustNo字段並單擊了Post按鈕投寄了修改然後再修改Company字段並按Cancel那麼只有對Company所做的修改將會被取消也就是說一旦修改被寫入了數據庫表中再按Cancle按鈕是無法取消對記錄的修改的要想恢復到以前的狀態用戶必須要重新編輯修改記錄值得注意的是當用戶修改了當前的記錄並移動到其他記錄時TDBNavigaator部件會自動地投寄用戶對記錄的修改例如如果我們修改了記錄的Company字段並沒有按Post按鈕以更新表中的記錄而是移動到下一條記錄這時用戶對記錄的修改也會自動地被寫入數據庫表中

   定制TDBNavigator部件

  TDBNavigator部件中的按鈕對我們開發人員來說是很方便的但對於程序的最終用戶來說不一定那麼一目了然為了幫助最終用戶或初級用戶更方便有效地使用TDBNavigator部件我們可以設置TDBNavigator部件的ShowHint屬性為True這樣當鼠標光標停留在TDBNavigator部件上的某一個按鈕上超過大約秒鐘在屏幕上便會出現該按鈕的提示信息如果我們不想使用TDBNavigator部件本身嵌入的提示信息我們還可以設置TDBNavigtor部件的Hints屬性為每個按鈕指定特定的提示信息以幫助用戶使用TDBNavigator部件

  TDBNavigator部件中有多個功能按鈕但並不是所有的按鈕對每一個數據庫應用程序都是需要的特別是那些不允許修改表中的數據或修改只是在很嚴格的控制下進行的數據庫應用程序我們可以通過設置TDBNavigator部件的 VisibleButtons 屬性來確定要在TDBNavigator中顯示哪些按鈕步顯示哪些按鈕例如如果我們不允許用戶修改表中的記錄我們就不需要AddDeletePostCancel 或 Refresh 按鈕 我們設置這些按鈕的VisibleButtons屬性為False這樣在TDBNavigator部件中將不會出現這些按鈕

  TDBNavigator部件的ConfirmDelete屬性和Delete 按鈕配合使用對用戶刪除數據庫表中的記錄是非常有用的當ConfirmDelete屬性設置為 True (缺省設置) 當用戶單擊Delete按鈕試圖刪除當前記錄時Delphi會彈出一個確認框要用戶確認是否真的想刪除當前記錄這樣在用戶進行刪除記錄的操作時會更安全一些如果用戶不希望在按下Delete按鈕時出現確認框只要把ConfirmDelete設置為False就可以了

  還有一些屬性可以用來定制TDBNavigator部件的外觀和性能有關這方面的詳細信息請參看聯機幫助

   創建主要──明細數據庫應用

  我們前面在介紹的基於單個數據庫表的數據庫應用程序只能對數據庫表進行簡單的管理大多數只用來浏覽單個數據庫表中的記錄信息如果我們想浏覽多個相關的數據庫表中的記錄信息就必須要創建主要──明細型數據庫應用程序

  在主要──明細型數據庫應用程序中一個數據庫表作為主要表其中存放著綜合信息其他的數據庫表和主要數據庫表相關聯它們當中存放著更詳細的信息例如當數據庫表CustomerDB作為主表它包含著客戶的綜合信息如編號姓名所在公司的名稱等等而數據庫表OrdersDB中包含著每個客戶的訂貨單的詳細信息如訂單號發貨日期起運日期發貨目的地等信息這樣當在CustomerDB表中查看某一位客戶時利用其中的字段CustNo與OrdersDB表發生聯系自動地從OrdersDB表中檢索出這位客戶曾經發來的所有訂貨單的詳細信息主要──明細型數據庫體現了關系數據庫的特點即獨立的數據庫表之間基於它們共同的字段而發生聯系在這裡CustomerDB和OrdersDB擁有一個共同的字段CustNo

   一對多關系的主要──明細型數據庫應用程序

  主要和明細數據庫表之間存在一對多的關系意思是說對於主表中的一條記錄在明細表中有多條記錄與之對應例如創建一個主要──明細型數據庫應用程序其包括兩個表CustomerDB和OrdersDB它們分別作為主表和明細表創建好的應用如圖所示窗體中各部件的屬性設置

  表 主要──明細型數據庫應用中各部件的屬性

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

  部 件 屬 性 屬 性 值 注 釋

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

  Table Active True

  (主表) DatabaseName DBDEMOS

  TableName CUSTOMERDB

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

  DataSource DataSet Table

  AutoEdit False

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

  Table Active True

  (明細表) DatabaseName DBDEMOS

  TableName ORDERSDB

  IndexFieldNames CUSTNO 指定字段CUSTNO作為Table中的索引字段

  MasterField CUSTNO 指定與主表發生聯系的字段

  MasterSource DataSource 說明與主表相連接的數據源即DataSource

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

  DataSource DataSet Table

  AutoEdit False

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

  DBGrid DataSource DataSource

  (對應主表)

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

  DBGrid DataSource DataSource

  (對應明細表)

  TableName ORDERSDB

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

  DBNavigator DataSource DataSource

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

  一對多關系是非常普遍的關系即便是簡單的名字/ 地址數據庫都有一對多的關系因為一個人可能不止一個地址家庭地址工作地址還可能有別墅地址在本例中公司的一個客戶常常有多個訂貨單當我們單擊DBNavigator中的向前向後按鈕時會移動DBGrid中的記錄指針而在DBGrid中會自動顯示與DBGridl 中當前記錄相關的多條記錄即顯示一個客戶的信息時同時會顯示該客戶的所有訂貨單的詳細信息

   一對多──多關系的數據庫應用

  前面我們介紹了基於兩個表的一對多關系的應用下面我們介紹怎樣創建一個從三個表中浏覽數據記錄的一對多關系的應用

  例如一個客戶也許有多張訂貨單而每一張訂貨單中有多個訂貨項目這樣我們在CustomerDB表和OrdersDB表之間建立一個主要──明細型關系同時在ordersDB 表和ItemsDB表之間建立一個主要──明細型關系

  窗體中各部件的屬性如表所示

  表 一對多──多關系的應用中各部件的屬性

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

  部 件 屬 性 屬 性 值 注 釋

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

  Active True

  Table DatabaseName DBDEMOS

  TableName CUSTOMERDB

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

  DataSource DataSet Table

  AutoEdit False

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

  Active True

  DatabaseName DBDEMOS

  Table TableName ORDERSDB

  IndexFieldNames CUSTNO

  MasterField CUSTNO

  MasterSource DataSource

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

[]  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25174.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.