?? 033.htm
字號:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>—DELPHI基礎教程—第十四章 簡單數據庫應用的創建及MASTAPP介紹(一)</TITLE><META NAME="keywords" CONTENT=" DELPHI基礎教程 第十四章 簡單數據庫應用的創建及MASTAPP介紹(一)"><META NAME="description" CONTENT=" - DELPHI基礎教程 - 第十四章 簡單數據庫應用的創建及MASTAPP介紹(一)"><style><!--#page {position:absolute; z-index:0; left:0px; top:0px}.tt3 {font: 9pt/12pt "宋體"}.tt2 {font: 12pt/15pt "宋體"}a {text-decoration:none}a:hover {color: blue;text-decoration:underline}--></style></HEAD><body text="#000000" bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3"><TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0><TR><TD CLASS="tt3" VALIGN="top" width="8%" ><strong><A HREF="034.htm"><FONT style="FONT-SIZE: 9pt">后一頁</font></A><BR><A HREF="032.htm"><FONT style="FONT-SIZE: 9pt">前一頁</font></A><BR><A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目錄</font></A><BR></strong></TD><TD class="tt2" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="隸書">第十四章 簡單數據庫應用的創建及MASTAPP介紹(一)</FONT></B></center><hr width="94%"><p> Delphi中嵌入的數據庫應用開發工具如DatabaseForm Expert具有很強大的功能,我們不需要編寫任何程序代碼便可以快速地創建一個簡單的數據庫應用程序,甚至還能創建基于多個數據庫表的主要──明細型數據庫應用程序。</p><p> 本章主要介紹用Delphi開發簡單的數據庫應用程序的一般方法和步驟,首先讓讀者對Delphi強勁的數據庫應用開發工具有一個直觀的印象,然后在此基礎上進行復雜的數據庫應用程序的設計,本章主要包括以下內容:</p><p>● 創建數據庫應用窗體</p><p> 包括用Database Form Expert或手工方式創建簡單的無需編寫程序代碼的應用程序或者利用多個部件并編寫功能復雜的程序代碼創建主要──明細型數據庫應用程序。</p><p>● 在應用程序中控制字段有關的屬性</p><p> 描述怎樣讀寫數據庫表中字段的值和控制字段的顯示格式等。</p><p> </p><p> 本章所介紹的例子中用到的窗體、數據庫表以及相關的文件都是在安裝Delphi時缺省安裝在C:\DELPHI\DEMOS\DB\MASTAPP目錄中,并且用別名DBDEMOS表示這一子目錄。在本章例子中,除特殊聲明外,所有的TTable和 TQuery 部件的 DatabaseName屬性都設置為DBDEMOS。</p><p align="center">14.1 簡單的基于單表的據庫應用 </p><p> 用Decphi創建顯示一個數據庫表中的內容的應用非常簡單和方便,只需要三個部件,只要將這三個部件通過相關的屬性相互聯系起來,不需要編寫任何程序代碼便可以實現。例如,用戶想查看數據庫表Customer.DB中的內容時,可以按下面步驟來實現: </p><p>14.1.1 選擇相關的部件: </p><p> 選擇菜單Project/New開始一個新工程,并修改Form1的Caption屬性為CustomerFrom1并把Name屬性設置為CustomerForm1,然后從部件選擇板上的DataAccess 頁上選取一個Datasounce部件和一個Table部件放到窗體的左上角,它們是非可見的部件,在窗體中我們看到的只是部件的圖標;從Data Control頁上選取DBGrid部件放到窗體中前兩個部件的下面。完成這些工作之后,窗體如圖14.1所示?! ?lt;/p><p>圖在CustomerFrom1窗體中放置三個部件 </p><p>14.1.2 設置部件的屬性 </p><p>為了使TDBGrid部件能夠顯示數據庫表Customer.DB中的客戶信息,我們必須修改窗體三個部件相關的屬性,這些屬性的設置如表14.1所示?!?lt;/p><p>表14.1 CustomerFrom1窗體中三個部件的屬性設置</p><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p>屬 性 屬 性 值</p><p>──────────────────────────────</p><p>DataSource1.AutoEdit False</p><p>DataSource1.DataSet Table1</p><p>Table1.DatabaseName DBDEMOS</p><p>Table1.TableName CUSTOMER.DB</p><p>Table1.Active True</p><p>DBGrid1.DataSource DataSource1</p><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p><p> 這里要注意的是:DBDEMOS是Delphi缺省安裝時C:\Delphi\DEMO\DB\MASTAPP目錄的別名,而且數據庫表Customer.DB存在該目錄下,用戶在使用這一例子時,請注意這兩項設置都是正確的。另外 Datasource1.Dataset,Table1.TableName和DBGrid1.Datasource屬性都有下拉式列表框允許用戶從可能的值列表中選擇它們的值,這樣能方便我們進行屬性的設置,而且不容易出錯。</p><p> Datasouuce1.AutoEdit屬性設置為False是為了防止用戶修改數據庫表中的數據,在下面的討論中我們將詳細地進行說明。</p><p> Table1.Active設置為True時,Delphi會打開Table1.TableName所指定的數據庫表。如果這個數據庫表不存在(或表中什么也沒有,即空表), Delphi 會彈出出錯信息并且Table1.Active變成False。當Table1.Active被設置成True之后,Table1部件的一些屬性就不能再修改了,如Table1.DatabaseName和Table1.Tablename屬性。若要修改它們,必須首先要將Table1.Active屬性設置為False,然后再進行修改,否則,Delphi會彈出錯誤信息“Cannotperform this operation on an open database”。當看到這個錯誤信息時,只需把Table1.Active置成False,完成相關的修改后,再把Table1. Active 屬性設置為True。</p><p> 當我們把DBGrid1.DataSource的值設置成DataSource1時,Delphi會把Customer.DB中的數據填充到DBGrid1部件中,并且可以用DBGrid1中的滾動條來瀏覽數據庫表中的所有記錄?!?lt;/p><p>14.1.3 運行程序 </p><p> 保存文件,命名代碼單元為Cust.pas,命名工程名為CustPRJ.DPR,然后按F9編譯并運行程序。程序執行之后,我們可以使用滾動條或鍵盤移動鍵在字段和記錄間移動。但不能修改表中的數據,因為Datasouc1.AutoEdit1屬性已被設置為False。</p><p> Cust程序中的三個部件都有各自的特殊用途,三個部件的相關屬性在內部相互聯系生成最終的應用程序。TTable部件連接磁盤上的實際數據庫表和應用程序中其他部件的通道。TTable部件具有打開和關閉、讀取、更新以及其他處理磁盤數據庫文件的方法。</p><p> TDatasource部件是連接TTable部件和數據瀏覽部件如TDBGrid部件的橋梁。TDBGrid部件用于顯示數據庫表中的數據信息,它為應用程序提供一個直觀的界面。圖14.2闡述了這三個部件之間的關系。 </p><p> Cust程序中三個部件之間的內部關系 </p><p> TDBGrid部件的奇妙之處在于它知道如何去獲取數據庫表中的下一條或前一條記錄,我們使用滾動條或箭頭鍵便可以完成這項任務。TDBGrid部件不知道如何增加、刪除和修改記錄。如果想讓 Cust 程序能夠修改數據庫表中的記錄,只要把 Datasource1 部件的AutoEdit屬性設置成True ,并重新編譯和運行程序就可以達到目的。 使用箭頭鍵, 把DBGrid的高亮度條定位到某一個字段上,然后鍵入新值,該字段中的值將被鍵入的新值所取代,并且當移動到另一條記錄時,健入的信息會自動寫入數據庫表中。如果想放棄所做的改動,只需在離開該字段前按一下Escape鍵。</p><p> 如果想在表中增加新記錄,可以把高亮度條移到網格底端的空白記錄上并輸入新記錄的有關字段值。也可以在用戶指定的某一條記錄的后面插入一條新記錄,只要把高亮度條定位到指定的記錄上,按Ins鍵,使可以在該記錄的后面插入新記錄。</p><p> 刪除某一條記錄時,把高亮度條定位在想刪除的記錄的任何字段上,按Ctrl+del鍵,這時會出現保護信息,我們可以確認是否真的想刪除該項記錄。</p><p> TDBGrid為用戶提供了較完備的功能,用于控制是否編輯、增加或刪除記錄。若想禁止對數據庫表作任何修改,設置TDBGrid部件的Readonly屬性為 True, 并設置 Option.dgEDiting為False(這將為我們提供一個只讀的數據庫表瀏覽器而不是數據庫編輯器,但它隱含著增加、編輯和刪除記錄的能力)。TDBGrid部件的這些屬性和Option屬性其它選項的各種不同組合可以讓我們很方便地對數據庫表進行有效的瀏覽、編輯等操作。</p><p> 如果我們經常使用像電子表格那樣的界面來顯示和編輯數據記錄,TDBGrid部件便是一個很方便的工具,但那并不是最友好的用戶界面,如果想擁有更優美更直觀的界面,我們還可以使用單獨的數據瀏覽部件來顯示數據庫表中各個字段的值,并利用TDBNavigator部件控制對數據庫表的存取。 </p><p align="center">14.2 利用TDBNavigator部件創建存取程序 </p><p> 我們可以改進一下Cust程序以便它一次只在對話框中顯示一個客戶的記錄信息,并用一個TDBNavigator部件控制對記錄存取──允許我們選擇一個記錄來顯示或編輯以及增加和刪除記錄。完成的應用窗體。</p><p> 增強的Cust程序</p><p>14.2.1 創建應用程序窗體 </p><p> 我們可以非常迅速地創建起來,因為到目前為止我們對創建窗體的方法已經比較熟悉,我們首先把所有的部件都放到窗體中,然后再設置它們的屬性。</p><p> 開始一個新工程,設置窗體Form1的Name屬性為 Customerform2 , Caption 屬性為 CustomerForm2。然后從部件選擇板上的DataAccess頁上選取一個Datasource部件和一個Table部件放在窗體的右上角。再從DataControls頁上選取DBNatvigator部件放在窗體的左上角。</p><p> 窗體中其余的部件如圖14.3所示。它們是TDBEdit和TLabel部件,按圖14.3所示創建并布置部件,分別命名DBEdit部件為EditCustno、 Editcompany 、EditAddr1 、EditAddr2、EditCity、EditState、EditZip、EditCountry、EditPhone 、EditFAX、EditTaxRate、EditContact。</p><p> 現在我們來連接TTable部件和TDataSource 部件, 然后連接所有的數據瀏覽部件和DataSource部件。設置TBNavigator部件和TDBEdit部件的屬性,它們的DataSource屬性都設置為DataSouce1。我們最后要做的事是連接窗體中各個TDBEdit部件和它們在數據庫表中對應的字段名,通過設置TDBEdit 部件的DataField 屬性來完成。 例如要連接命名為EditCustNo的TDBEdit部件和數據庫表中的CustNo字段,具體步驟如下:</p><p>①選中窗體中的EditCustNo部件。</p><p>②在Object Inspector窗體中,單擊DataField屬性右邊的箭頭。</p><p>③從下拉列表中選中CustNo字段名。</p><p> 對窗體中的其他TDBEdit部件執行以上操作連接到其對應的字段,然后保存文件。命名代碼單元名為Cust2.pas,命名工程名為Cusprj2.DPR?!?lt;/p><p>14.2.2 使用TDBNavigator部件移動記錄指針 </p><p> 上述程序運行之后,在數據瀏覽部件中會顯示數據庫表中的第一條記錄。利用Tab鍵可以在字段之間移動,但是不能編輯字段。因為我們為了防止意外修改,設置了Table1的AutoEdit屬性值為False。如果想對數據庫表中的記錄進行編輯、插入和刪除操作或者想顯示數據庫表中另一條記錄, 需要按TDBNvigator 部件上這些功能所對應的功能按鈕。TDBNavigator部件上的按鈕和它們的功能如圖14.4所示。</p><p> TDBNavigator中的按鈕 </p><p> TDBNavigator部件的絕大多數功能都可以根據其按鈕的圖標能夠很容易地識別出來,而且TDBNavigator部件本身能感知到很多事情,如當前指針是否在數據庫表的開頭或尾部。如果用戶正在查看數據庫表中的最后一個記錄,Next和Last按鈕將會變灰成為非活動狀態。同樣,如果用戶當前正在瀏覽數據庫表中的第一條記錄, TDBNavigator 上的First 和Previous按鈕會變灰而成為非活動狀態。有關各個按鈕的作用的更詳細說明請查看聯機幫助。</p><p> 如果用戶想修改當前的記錄,單擊TDBNavigator部件的Edit按鈕,然后完成需要做的修改,在做完修改之后,單擊Post按鈕以便將作的修改寫入實際的數據庫表中(更新實際的數據庫表中的記錄在數據庫術語中叫作“投寄”記錄即PostT)。如果想取消所做的修改,單擊Cancel按鈕。Cancel按鈕只取消自從上一次往數據庫表中投寄記錄以來對記錄所做的修改。例如,如果用戶曾修改了CustNo字段并單擊了Post按鈕投寄了修改,然后再修改Company字段并按Cancel,那么只有對Company所做的修改將會被取消。也就是說,一旦修改被寫入了數據庫表中,再按Cancle按鈕是無法取消對記錄的修改的,要想恢復到以前的狀態,用戶必須要重新編輯修改記錄。值得注意的是,當用戶修改了當前的記錄,并移動到其他記錄時,TDBNavigaator部件會自動地投寄用戶對記錄的修改。例如:如果我們修改了記錄的Company字段,并沒有按Post按鈕以更新表中的記錄,而是移動到下一條記錄,這時用戶對記錄的修改也會自動地被寫入數據庫表中?!?lt;/p><p>14.2.3 定制TDBNavigator部件 </p><p> TDBNavigator部件中的按鈕對我們開發人員來說是很方便的,但對于程序的最終用戶來說不一定那么一目了然。為了幫助最終用戶或初級用戶更方便有效地使用TDBNavigator部件,我們可以設置TDBNavigator部件的ShowHint屬性為True,這樣當鼠標光標停留在TDBNavigator部件上的某一個按鈕上超過大約1秒鐘,在屏幕上便會出現該按鈕的提示信息。如果我們不想使用TDBNavigator部件本身嵌入的提示信息,我們還可以設置TDBNavigtor部件的Hints屬性,為每個按鈕指定特定的提示信息,以幫助用戶使用TDBNavigator部件。</p><p> TDBNavigator部件中有多個功能按鈕,但并不是所有的按鈕對每一個數據庫應用程序都是需要的,特別是那些不允許修改表中的數據,或修改只是在很嚴格的控制下進行的數據庫應用程序。我們可以通過設置TDBNavigator部件的VisibleButtons 屬性來確定要在TDBNavigator中顯示哪些按鈕步顯示哪些按鈕。例如,如果我們不允許用戶修改表中的記錄,我們就不需要Add、Delete、Post、Cancel或 Refresh 按鈕, 我們設置這些按鈕的VisibleButtons屬性為False,這樣在TDBNavigator部件中將不會出現這些按鈕。</p><p> TDBNavigator部件的ConfirmDelete屬性和Delete按鈕配合使用對用戶刪除數據庫表中的記錄是非常有用的,當ConfirmDelete屬性設置為True (缺省設置), 當用戶單擊Delete按鈕試圖刪除當前記錄時,Delphi會彈出一個確認框,要用戶確認是否真的想刪除當前記錄。這樣,在用戶進行刪除記錄的操作時,會更安全一些。如果用戶不希望在按下Delete按鈕時出現確認框,只要把ConfirmDelete設置為False就可以了。</p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -