![Delphi7數(shù)據(jù)庫(kù)編程學(xué)習(xí)捷徑_第1頁(yè)](http://file4.renrendoc.com/view3/M03/03/3D/wKhkFmaGroWAXRSdAACm62mLaak341.jpg)
![Delphi7數(shù)據(jù)庫(kù)編程學(xué)習(xí)捷徑_第2頁(yè)](http://file4.renrendoc.com/view3/M03/03/3D/wKhkFmaGroWAXRSdAACm62mLaak3412.jpg)
![Delphi7數(shù)據(jù)庫(kù)編程學(xué)習(xí)捷徑_第3頁(yè)](http://file4.renrendoc.com/view3/M03/03/3D/wKhkFmaGroWAXRSdAACm62mLaak3413.jpg)
![Delphi7數(shù)據(jù)庫(kù)編程學(xué)習(xí)捷徑_第4頁(yè)](http://file4.renrendoc.com/view3/M03/03/3D/wKhkFmaGroWAXRSdAACm62mLaak3414.jpg)
![Delphi7數(shù)據(jù)庫(kù)編程學(xué)習(xí)捷徑_第5頁(yè)](http://file4.renrendoc.com/view3/M03/03/3D/wKhkFmaGroWAXRSdAACm62mLaak3415.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄第1章Delphi7集成開(kāi)發(fā)環(huán)境(IDE)介紹第2章Delphi7數(shù)據(jù)庫(kù)系統(tǒng)概述第3章Delphi7和數(shù)據(jù)庫(kù)第4章創(chuàng)建數(shù)據(jù)庫(kù)第5章讀寫(xiě)字段值第6章計(jì)算字段第7章鏈接表第8章查找和確認(rèn)數(shù)據(jù)第9章制作數(shù)據(jù)輸入窗體第10章列表和查找表第11章查詢和設(shè)定范圍第12章多窗體和打印窗體第13章制作報(bào)表第14章開(kāi)發(fā)圖表第15章將圖或文件存入數(shù)據(jù)庫(kù)第16章編寫(xiě)多媒體數(shù)據(jù)庫(kù)應(yīng)用程序第17章數(shù)據(jù)庫(kù)開(kāi)發(fā)實(shí)例——學(xué)生管理系統(tǒng)第1章Delphi7集成開(kāi)發(fā)環(huán)境(IDE)介紹1.Delphi7IDE運(yùn)行界面通常,啟動(dòng)Delphi7的方法是:?jiǎn)螕簟伴_(kāi)始”按鈕,然后依次從級(jí)聯(lián)菜單中選擇“程序”\BorlandDelphi7\Delphi7選項(xiàng),就進(jìn)入了Delphi7IDE運(yùn)行界面,如圖1.1所示。其各組成部分的功能見(jiàn)教材1.3~1.7節(jié)。
圖1.1Delphi7IDE運(yùn)行界面的組成12453①主窗口②窗體窗口③代碼編輯窗口④對(duì)象查看器⑤對(duì)象樹(shù)形結(jié)構(gòu)瀏覽窗口1232.Delphi7主窗口主窗口是Delphi7IDE的核心,開(kāi)發(fā)人員通過(guò)主窗口進(jìn)行創(chuàng)建工程、編寫(xiě)程序、調(diào)試程序、運(yùn)行和維護(hù)應(yīng)用程序等一系列管理工作。
Delphi7主窗口由3個(gè)部分組成(其功能見(jiàn)教材1.3節(jié)),如下圖所示。②組件模板(ComponentPalette)①主菜單(Menu)③快捷工具條(SpeedBar)3.組件模板及組件設(shè)置
放置組件、設(shè)置屬性和為“終止”事件編寫(xiě)代碼的步驟:②單擊窗體空閑部分,放置一個(gè)按鈕。③設(shè)置按鈕標(biāo)題為“終止”。④在事件標(biāo)簽頁(yè)上雙擊OnClick右邊單元格。⑤在代碼編輯窗口中編寫(xiě)終止程序的代碼。①在組件模板上選擇組件,例如Ok按鈕。
①②③④⑤第2章Delphi7數(shù)據(jù)庫(kù)系統(tǒng)概述1.Delphi7數(shù)據(jù)庫(kù)特性
數(shù)據(jù)訪問(wèn)組件(DataAccessComponents):主要用于說(shuō)明數(shù)據(jù)庫(kù)的有關(guān)信息,如應(yīng)用程序要訪問(wèn)(連接)的數(shù)據(jù)庫(kù)和要訪問(wèn)數(shù)據(jù)庫(kù)中的具體的數(shù)據(jù)庫(kù)表,以及要訪問(wèn)表中的哪些字段等。常用的數(shù)據(jù)訪問(wèn)組件有TTable、TQuery、TDataSource等。數(shù)據(jù)控制組件(DataControlComponents):主要用于顯示瀏覽數(shù)據(jù)庫(kù)中的數(shù)據(jù)信息,為用戶提供可視化的界面,可以讓用戶對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)信息,進(jìn)行瀏覽、編輯、插入、刪除等操作。因而,數(shù)據(jù)控制組件也被稱之為數(shù)據(jù)瀏覽組件。數(shù)據(jù)控制組件既能夠把數(shù)據(jù)庫(kù)中的數(shù)據(jù)顯示到窗體中,又能將其自身的經(jīng)過(guò)修改的數(shù)據(jù)寫(xiě)回到數(shù)據(jù)庫(kù)中。常用的數(shù)據(jù)控制組件有TDBGrid、TDBEdit、TDBCheckBox等。BDEDataAccessComponents
數(shù)據(jù)訪問(wèn)組件TTableTDataSourceTQueryTDataSourceDataControlComponents
數(shù)據(jù)控制組件TDBGridTDBEditTDBCheckBoxTDBGridTDBEditTDBCheckBox(用戶接口)數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)引擎:BDE數(shù)據(jù)訪問(wèn)組件數(shù)據(jù)控制組件DBD窗口工具條DBD窗口菜單2.數(shù)據(jù)庫(kù)桌面(DBD:DatabaseDesktop)
數(shù)據(jù)庫(kù)桌面DBD是數(shù)據(jù)庫(kù)維護(hù)和數(shù)據(jù)定義的工具,利用它可以完成查詢、連接、建立、重建結(jié)構(gòu)(簡(jiǎn)稱重構(gòu))、索引、修改和復(fù)制數(shù)據(jù)庫(kù)表,而且在操作時(shí),用戶不必?fù)碛蠵aradox或dBASE數(shù)據(jù)庫(kù)管理系統(tǒng)。使用數(shù)據(jù)庫(kù)桌面DBD還可以把一種格式的數(shù)據(jù)和數(shù)據(jù)字典拷貝為另一種格式,例如,將一個(gè)dBASE的表拷貝到遠(yuǎn)程的SQL服務(wù)器上的一個(gè)數(shù)據(jù)庫(kù)中去。另外,數(shù)據(jù)庫(kù)桌面DBD程序可以建立數(shù)據(jù)庫(kù)并執(zhí)行與數(shù)據(jù)庫(kù)有關(guān)的其他操作。例如,設(shè)置工作目錄、設(shè)置工作目錄別名、創(chuàng)建數(shù)據(jù)庫(kù)表、在數(shù)據(jù)庫(kù)表中輸入數(shù)據(jù)、對(duì)表中記錄排序、移動(dòng)記錄、用不同字體或其他形式顯示表中的數(shù)據(jù),以及用表來(lái)檢查和測(cè)試Delphi7程序等。3.部分?jǐn)?shù)據(jù)訪問(wèn)組件的主要用途
部分?jǐn)?shù)據(jù)訪問(wèn)組件的主要用途組件名稱主要用途TDataSource是數(shù)據(jù)集組件與數(shù)據(jù)控制組件之間傳送數(shù)據(jù)的通道TTable是存取數(shù)據(jù)庫(kù)表的媒介,通過(guò)BDE存取數(shù)據(jù)庫(kù)表中的數(shù)據(jù),再與TDataSource進(jìn)行對(duì)話,使得數(shù)據(jù)控制組件能在TTable中訪問(wèn)數(shù)據(jù),以及顯示、編輯數(shù)據(jù)TQuery利用SQL語(yǔ)言訪問(wèn)數(shù)據(jù)庫(kù)表中的數(shù)據(jù),并與TDataSource進(jìn)行對(duì)話以實(shí)現(xiàn)數(shù)據(jù)控制組件訪問(wèn)數(shù)據(jù)庫(kù)TStoredProc在應(yīng)用程序中用于訪問(wèn)遠(yuǎn)程服務(wù)器中的存儲(chǔ)過(guò)程(它封裝了數(shù)據(jù)庫(kù)服務(wù)器上的存儲(chǔ)過(guò)程)TQuickRep在應(yīng)用程序中用于創(chuàng)建數(shù)據(jù)庫(kù)的輸出報(bào)表TSession這是一個(gè)全局的組件,用戶可以在程序中使用它的屬性和方法TDatabase它可以連接到單一數(shù)據(jù)庫(kù)上,例如,當(dāng)需要與數(shù)據(jù)庫(kù)持續(xù)連接、使用了定制的數(shù)據(jù)庫(kù)服務(wù)、使用事物處理組件或程序中確定了BDE別名時(shí),就可以使用TDatabase組件。但最主要的用途是在SQL數(shù)據(jù)庫(kù)的應(yīng)用中4.部分?jǐn)?shù)據(jù)控
制組件的主要用途
部分?jǐn)?shù)據(jù)控制組件的主要用途組件名稱主要用途TDBText是一個(gè)只讀的數(shù)據(jù)顯示組件,它顯示的是表中的當(dāng)前記錄值,因此它的顯示是動(dòng)態(tài)變化的TDBEdit專門(mén)用來(lái)顯示和編輯數(shù)據(jù)庫(kù)表中的單個(gè)字段。通過(guò)它的DataSource屬性和DataField屬性來(lái)指定對(duì)應(yīng)的表和字段TDBGrid以網(wǎng)格方式顯示數(shù)據(jù)庫(kù)中的數(shù)據(jù)并可以進(jìn)行編輯。利用字段編輯器(FieldEditor)可以對(duì)數(shù)據(jù)庫(kù)中字段的顯示格式、順序或者是否顯示進(jìn)行控制TDBCheckBox瀏覽數(shù)據(jù)庫(kù)中數(shù)據(jù)的復(fù)選框,用于顯示和編輯數(shù)據(jù)庫(kù)中布爾型字段的字段值TDBNavigator稱為導(dǎo)航控件,可用來(lái)前后移動(dòng)記錄指針,對(duì)單個(gè)記錄進(jìn)行編輯(包括插入、刪除、刷新顯示和取消等操作)TDBImage用于顯示、復(fù)制、粘貼數(shù)據(jù)庫(kù)表中的圖像類型的字段第3章
Delphi7和數(shù)據(jù)庫(kù)3.1創(chuàng)建一個(gè)Delphi7工程(Project)的步驟3.2定制窗體(1)啟動(dòng)Delphi7,從File菜單中選擇File\New\Applicatin
命令,創(chuàng)建一個(gè)新工程。(2)保存新的工程。從File菜單中選擇File\SaveAs命令,
保存單元文件CHello.pas和工程文件Hello.dpr。(3)執(zhí)行程序便生成一個(gè)可執(zhí)行的EXE文件Hello.EXE。①第3章第1節(jié)完成的定制窗體CdmHello清除歡迎終止②執(zhí)行程序后單擊“歡迎”按鈕的程序窗口
歡迎清除終止3.3編寫(xiě)代碼為“終止”按鈕編寫(xiě)代碼的目的是,當(dāng)用戶單擊“終止”按鈕時(shí),可以終止CHello.EXE程序的運(yùn)行。那么,應(yīng)該為cmdExitClick過(guò)程輸入下列代碼:Application.Terminate;。這樣,當(dāng)用戶單擊“終止”按鈕時(shí),程序執(zhí)行“Application.Terminate;”語(yǔ)句,即終止CHello.EXE程序。3.4Methods(方法)現(xiàn)在,我們來(lái)介紹有關(guān)Methods(方法)的主題。在Pascal語(yǔ)言中,在對(duì)象中說(shuō)明的過(guò)程或函數(shù)稱為方法。它的語(yǔ)法是:
例如,Application.Terminate;,這個(gè)程序語(yǔ)句說(shuō)明Terminate(終止)方法被調(diào)用,或者說(shuō),Application對(duì)象調(diào)用了Terminate方法。當(dāng)程序執(zhí)行這個(gè)語(yǔ)句時(shí),就實(shí)現(xiàn)這個(gè)Terminate方法,即終止程序運(yùn)行。又例如程序語(yǔ)句Memo1.CutToClipboard;,表明調(diào)用一個(gè)名為Memo1的Memo組件的CutToClipboard(剪貼)方法。其中,Memo1是一個(gè)對(duì)象的名稱,當(dāng)程序執(zhí)行這個(gè)語(yǔ)句時(shí),就實(shí)現(xiàn)這個(gè)CutToClipboard方法,即把Memo1中的文本剪貼到剪貼板上去。舉例:作為一個(gè)例子,打開(kāi)一個(gè)空窗體,加入一個(gè)Memo組件和一個(gè)按鈕,設(shè)置按鈕的Name屬性為Cut,再將按鈕的Caption屬性設(shè)置為&Cut。以及雙擊按鈕的OnClick事件右邊單元格,彈出代碼編輯窗口,輸入語(yǔ)句Memo1.CutToClipboard;。這樣就為Cut按鈕建立了CutClick事件處理過(guò)程:
方法CutToClipboard實(shí)現(xiàn)剪貼:
ProcedureTform1.CutClick(Sender:TObject);BeginMemo1.CutToClipboard;End;
方法CopyToClipboard實(shí)現(xiàn)拷貝:
ProcedureTform1.CopyClick(Sender:TObject);BeginMemo1.CopyToClipboard;End;再看一個(gè)例子3.5數(shù)據(jù)庫(kù)設(shè)計(jì)
Delphi開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的一般步驟
1.系統(tǒng)設(shè)計(jì)步驟1:工作活動(dòng)性質(zhì)鑒別對(duì)設(shè)計(jì)者來(lái)說(shuō),當(dāng)他承擔(dān)了某個(gè)部門(mén)建立數(shù)據(jù)庫(kù)的任務(wù)時(shí),首先應(yīng)當(dāng)鑒別該部門(mén)的需要和用戶的需求。并做出下列決策:(1)
決定該部門(mén)數(shù)據(jù)處理的一般策略。(2)
估算現(xiàn)有數(shù)據(jù)處理能力及其性能。(3)
進(jìn)行可行性研究,規(guī)劃各種方案。(4)
選擇某種方案。(5)
搜集有關(guān)信息類型、確定有什么樣的信息流入和流出,以及信息流入流出的頻度等。步驟2:定義此步驟是建立該部門(mén)的模型。主要工作是:(1)
在書(shū)面上記載可能出現(xiàn)的數(shù)據(jù)類型。(2)
建立原始概念:實(shí)體集合、實(shí)體屬性、屬性值、實(shí)體聯(lián)系集合(簡(jiǎn)稱關(guān)聯(lián)集合)。步驟3:用數(shù)據(jù)表示實(shí)體集合和關(guān)聯(lián)集合(1)
確定每一個(gè)實(shí)體類型,并為其分配一個(gè)惟一的名字。(2)
確定每一個(gè)定義域,并為其分配一個(gè)惟一的名字。(3)
為每個(gè)實(shí)體類型確定主鍵。(4)
用主鍵定義域代替每一個(gè)實(shí)體。求出與實(shí)體屬性對(duì)應(yīng)的各個(gè)關(guān)系,并給每個(gè)關(guān)系確定一個(gè)名字。(5)
求出全部的關(guān)聯(lián)類型,并為其確定一個(gè)名字。(6)
用相應(yīng)的主鍵來(lái)代替關(guān)聯(lián)類型。步驟4:建立E-R模型以下的步驟是對(duì)關(guān)系型數(shù)據(jù)庫(kù)來(lái)說(shuō)的。步驟5:將實(shí)體和關(guān)聯(lián)轉(zhuǎn)化為關(guān)系步驟6:分解關(guān)系。對(duì)每個(gè)關(guān)系確定其不可分解單元,可以得到一個(gè)基本關(guān)系集合。步驟7:根據(jù)傳遞定律確定所得到的基本關(guān)系集合的傳遞閉包。步驟8:由得到的傳遞閉包推導(dǎo)最小覆蓋,得到若干個(gè)最小覆蓋,選擇其一作為數(shù)據(jù)庫(kù)總體邏輯模型。2.系統(tǒng)實(shí)現(xiàn)在系統(tǒng)實(shí)現(xiàn)階段,使用Delphi可以建立和測(cè)試系統(tǒng)設(shè)計(jì)階段所構(gòu)想的應(yīng)用程序。在此階段,最好使用數(shù)據(jù)庫(kù)的一個(gè)備份,以防止應(yīng)用程序可能破壞Delphi數(shù)據(jù)庫(kù)后無(wú)法恢復(fù)。如果應(yīng)用程序最終要配置到使用遠(yuǎn)程終端的數(shù)據(jù)源的話,可以有兩種選擇:
l.在本地服務(wù)器上,使用備份的數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行開(kāi)發(fā)和調(diào)試。
2.在遠(yuǎn)程服務(wù)器上,使用備份的數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行開(kāi)發(fā)和調(diào)試。其中,對(duì)前者來(lái)說(shuō),它獨(dú)立于服務(wù)器,因此不會(huì)影響服務(wù)器的其他特性。而后者就有一定的危險(xiǎn)性,因?yàn)?,程序的可能錯(cuò)誤而導(dǎo)致服務(wù)器的癱瘓。值得說(shuō)明的是,系統(tǒng)設(shè)計(jì)獨(dú)立于特定計(jì)算機(jī)系統(tǒng);而系統(tǒng)實(shí)現(xiàn)必須考慮實(shí)際的計(jì)算機(jī)系統(tǒng),以及該系統(tǒng)所支持的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)。系統(tǒng)實(shí)現(xiàn)階段的主要工作:(1)實(shí)現(xiàn)物理設(shè)計(jì)。通過(guò)使用物理設(shè)計(jì)技術(shù)以選擇最適合于數(shù)據(jù)模型結(jié)構(gòu)的物理結(jié)構(gòu),這些技術(shù)隨采用的物理設(shè)備及存取方法而異。量化數(shù)據(jù)是物理設(shè)計(jì)中的一個(gè)重要因素。所選數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的定義由數(shù)據(jù)庫(kù)定義語(yǔ)言完成。(2)選擇存取數(shù)據(jù)庫(kù)的方法。在選擇物理結(jié)構(gòu)時(shí),存取方法是特別重要的,存取方法決定了設(shè)計(jì)完成后數(shù)據(jù)庫(kù)的性能,而用戶界面軟件決定了數(shù)據(jù)庫(kù)是否便于用戶使用。一般系統(tǒng)中對(duì)數(shù)據(jù)庫(kù)的存取是由數(shù)據(jù)庫(kù)聯(lián)機(jī)查詢語(yǔ)言或嵌入在程序設(shè)計(jì)語(yǔ)言中的輸入/輸出命令完成的。(3)確定存儲(chǔ)需求說(shuō)明:存儲(chǔ)需求定義用戶關(guān)于數(shù)據(jù)的使用方法。其中的存取路徑,用以說(shuō)明存儲(chǔ)需求所涉及的實(shí)體集、關(guān)聯(lián)集、邏輯記錄,同時(shí)還要說(shuō)明這些結(jié)構(gòu)的使用順序,以及對(duì)每個(gè)結(jié)構(gòu)所完成的操作,這些操作可以是檢索、存儲(chǔ)和插入。(4)確定量化數(shù)據(jù)說(shuō)明:一般方法是用數(shù)據(jù)字典作為數(shù)據(jù)項(xiàng)和記錄型的描述文本。數(shù)據(jù)字典中可以包括:組織模型中各組成部分的數(shù)據(jù)項(xiàng)名、類型、取值范圍、長(zhǎng)度和數(shù)據(jù)量、各實(shí)體間聯(lián)系的頻度、存取需求執(zhí)行頻度等。(5)選擇開(kāi)發(fā)軟件的技術(shù)手段(例如,使用Delphi7)進(jìn)行軟件開(kāi)發(fā)。
3.系統(tǒng)運(yùn)行和維護(hù)系統(tǒng)運(yùn)行是為了考核系統(tǒng)及其設(shè)備、軟件系統(tǒng)和數(shù)據(jù)庫(kù)應(yīng)用程序等是否能達(dá)到預(yù)期的目標(biāo)。而對(duì)應(yīng)用程序來(lái)說(shuō),更多的是調(diào)試。所謂維護(hù)是指在運(yùn)行中排除應(yīng)用程序的錯(cuò)誤及不合理的內(nèi)容,以及在系統(tǒng)運(yùn)行中還要根據(jù)用戶提出的一些新的要求和建議,對(duì)應(yīng)用程序做一定的修改,使其進(jìn)一步得到完善和提高。在每個(gè)實(shí)施步驟中都有數(shù)據(jù)庫(kù)的開(kāi)發(fā)和應(yīng)用程序界面的開(kāi)發(fā)任務(wù)。數(shù)據(jù)庫(kù)和應(yīng)用程序開(kāi)發(fā)任務(wù)的執(zhí)行,則會(huì)根據(jù)開(kāi)發(fā)項(xiàng)目的大小和范圍而定,可能會(huì)由不同的人來(lái)完成和執(zhí)行。3.6例子:設(shè)計(jì)一個(gè)商品銷售數(shù)據(jù)庫(kù)(簡(jiǎn)稱PSDB)
顧客(Customer)到商店購(gòu)買(mǎi)商品(Parts),交款后,商店要給顧客開(kāi)出發(fā)票。發(fā)票上標(biāo)出的內(nèi)容有:顧客姓名、單位、地址、商品名、單價(jià)、總價(jià)以及購(gòu)買(mǎi)日期等。以往這項(xiàng)工作是手工在發(fā)票單上填寫(xiě),現(xiàn)在要用計(jì)算機(jī)來(lái)完成,那么該如何做呢?對(duì)商店或者計(jì)算機(jī)來(lái)說(shuō),要求有一份顧客名單,我們稱之為Customer表。還要有一份商品清單,我們稱之為Parts表。將這兩張表聯(lián)系在一起,就構(gòu)成了PSDB數(shù)據(jù)庫(kù)?,F(xiàn)在給數(shù)據(jù)庫(kù)下個(gè)定義:按照一定結(jié)構(gòu)組織的相關(guān)的數(shù)據(jù)集合稱做數(shù)據(jù)庫(kù)。在數(shù)據(jù)庫(kù)術(shù)語(yǔ)中,把顧客、商品稱做實(shí)體,實(shí)體之間的聯(lián)系稱做關(guān)聯(lián)。由此可見(jiàn),實(shí)體及其關(guān)聯(lián)才構(gòu)成數(shù)據(jù)庫(kù)。在關(guān)系模型中,“關(guān)聯(lián)”是不可缺少的,因此,關(guān)聯(lián)也就轉(zhuǎn)化為實(shí)體,也可以稱之為關(guān)聯(lián)實(shí)體。因此,在以后的討論中,凡是說(shuō)到實(shí)體均包括關(guān)聯(lián)實(shí)體?,F(xiàn)在,在我們的PSDB數(shù)據(jù)庫(kù)中,把實(shí)體Customer和Parts聯(lián)系起來(lái)的是關(guān)聯(lián)實(shí)體,為其命名為Items(項(xiàng)目)。這樣,PSDB數(shù)據(jù)庫(kù)是由實(shí)體Customer、Parts和Items構(gòu)成。以下就來(lái)介紹數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)的基本內(nèi)容和方法。
ItemsCustomer
Parts
PSDB數(shù)據(jù)庫(kù)的E-R圖關(guān)聯(lián)實(shí)體實(shí)體實(shí)體CustNumLastNameFirstNameCustomer
標(biāo)明Customer的屬性實(shí)體屬性
在數(shù)據(jù)庫(kù)通用設(shè)計(jì)方法中,通常采用一種“實(shí)體-聯(lián)系”方法,簡(jiǎn)稱E-R方法。這樣,就可以將PSDB數(shù)據(jù)庫(kù)用E-R圖表示。3.7
E-R方法
在完成實(shí)體設(shè)計(jì)后,例如完成E-R圖設(shè)計(jì)后,就要為每個(gè)實(shí)體標(biāo)明屬性。首先,數(shù)據(jù)庫(kù)中的每個(gè)實(shí)體都要有個(gè)標(biāo)識(shí)符,而且是惟一的,稱其為主標(biāo)識(shí)符(也稱為主關(guān)鍵字或主屬性)。1.標(biāo)明Customer屬性
例如,在PSDB數(shù)據(jù)庫(kù)中的Customer實(shí)體應(yīng)有一個(gè)主關(guān)鍵字,顯然,顧客的姓名不成,因?yàn)橛兄孛匦?,所以只好給顧客Customer再加一個(gè)顧客編號(hào)CustNum。同樣理由,要給商品Parts加一個(gè)編號(hào)PartNum,以及給關(guān)聯(lián)實(shí)體Items加一個(gè)編號(hào)ItemNum。注意,為了簡(jiǎn)化數(shù)據(jù)庫(kù)設(shè)計(jì)的說(shuō)明,對(duì)于現(xiàn)在討論的課題,我們只列出主要的屬性,而不追求對(duì)它的客觀需求。設(shè)Customer屬性有CustNum(顧客編號(hào))、LastName(顧客的姓)和FirstName(顧客名字)。
設(shè)Parts屬性有PartNum(商品編號(hào))、Description(有關(guān)商品的說(shuō)明)、QtyInStock(商品的庫(kù)存量)和SellingPrice(銷售價(jià))。標(biāo)明Parts屬性實(shí)體屬性PartNumDescriptionQtyInStock
Parts
標(biāo)明Parts的屬性SellingPrice
設(shè)Items屬性有ItemNum(Items記錄編號(hào))、CustNum
(顧客編號(hào))PartNum(商品編號(hào))和QtySlod(商品銷售量)。標(biāo)明Items屬性
現(xiàn)在來(lái)說(shuō)明為什么給Items標(biāo)明這些屬性。首先,為什么要建立ItemNum屬性呢?因?yàn)镮tems需要有一個(gè)惟一的主標(biāo)識(shí)符(也稱為主屬性),也就是需要有一個(gè)惟一的主關(guān)鍵字。另外,Items是把Customer表和Parts表聯(lián)系起來(lái)的關(guān)聯(lián)實(shí)體,那么最簡(jiǎn)明的聯(lián)系,就是在Items中放置Customer的主關(guān)鍵字CustNum和Parts的主關(guān)鍵字PartNum。事實(shí)上,根據(jù)Customer的主關(guān)鍵字CustNum就可以通過(guò)Items中的Parts的主關(guān)鍵字PartNum查到Parts表中的一切信息,例如,某商品的銷售價(jià)是由Parts表中屬性SellingPrice標(biāo)識(shí)的。又例如有關(guān)每種商品的說(shuō)明是由屬性Descrption標(biāo)識(shí)的。同時(shí),依據(jù)PartNum還可以在Items表中直接查到購(gòu)買(mǎi)了多少該種商品,即銷售量是由Items表中的屬性QtySold標(biāo)識(shí)的。ItemNumCustNumPartNum
Items圖3.2.3標(biāo)明Items的屬性(關(guān)聯(lián))實(shí)體屬性QtySlod
在關(guān)系型數(shù)據(jù)庫(kù)中,把實(shí)體視為一種關(guān)系。關(guān)系的一般表示方法如下:
關(guān)系名(屬性1,屬性2,……,屬性n)
在一個(gè)關(guān)系表達(dá)式中,也需要確定一個(gè)惟一的標(biāo)識(shí)符(也稱之為主屬性,或主鍵,或主關(guān)鍵字),用以標(biāo)識(shí)這個(gè)關(guān)系。如果在關(guān)系表達(dá)式中,我們假設(shè)指定“屬性k”為主屬性(關(guān)鍵字),那么在關(guān)系表達(dá)式中就把屬性k放在最前面并用下劃線“_”表示它是主屬性(主鍵字)。于是,關(guān)系表達(dá)式’就變成:關(guān)系名(屬性k,屬性1,屬性2,……,屬性n)這樣,根據(jù)給Customer、Parts和Items標(biāo)明的屬性,就可以把它們用關(guān)系表達(dá)式表示如下:
這三個(gè)關(guān)系就是PSDB的關(guān)系數(shù)據(jù)庫(kù)模型。
Customer(CustNum
,LastName,F(xiàn)iestName)
Parts(PartNum
,Description,QtyInStock,SellingPrice)
Items(ItemNum
,CustNum,PartNum,QtySlod)3.8關(guān)系型數(shù)據(jù)庫(kù)1.關(guān)系模型2.二維表
在關(guān)系模型中,一個(gè)關(guān)系可以用一個(gè)二維表來(lái)表示。二維表的行稱為記錄,列稱為字段(記錄項(xiàng))。把這樣的表統(tǒng)稱為數(shù)據(jù)庫(kù)表。一個(gè)數(shù)據(jù)庫(kù)表的一般化表示。⑴關(guān)系Customer(CustNum
,LastName,F(xiàn)irstName)的二維表表示。其表結(jié)構(gòu):⑵關(guān)系Parts(PartNum
,Description,tyInStock,SellingPrice)的二維表表示。其表結(jié)構(gòu):
PartNumDescription
tyInStockSellingPrice
ItemNumCustNumPartNumQtySlod
⑶關(guān)系Items(ItemNum
,CustNum,PartNum,QtySlod)二維表表示。其表結(jié)構(gòu):
CustNumLastNameFiestName
字段名稱
記錄
字段
用二維表表示關(guān)系3.數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì)
所謂表結(jié)構(gòu)設(shè)計(jì)就是對(duì)表中的每個(gè)字段(Field)、字段類型(Type)、字段大?。⊿ize)以及該字段是否為主關(guān)鍵字段(Key)等進(jìn)行規(guī)定,以便將來(lái)能夠?qū)Ρ磉M(jìn)行數(shù)據(jù)操作(包括對(duì)數(shù)據(jù)的存取、增刪、查詢、修改等)。
⑴設(shè)計(jì)Customer表結(jié)構(gòu)⑵設(shè)計(jì)Parts表結(jié)構(gòu)Field(字段)Type(類型)Size(大?。㎏ey(主關(guān)鍵字)ItemNumAutoincriment(+)n/aYesCustNumNumericn/aYesPartNumNumericn/aYesQtySlodNumericn/aNo⑶設(shè)計(jì)Items表結(jié)構(gòu)Field(字段)Type(類型)Size(大小)Key(主關(guān)鍵字)CustNumNumeric(N)n/aYes(是)LastNameAlpha(A)30No(不是)FiestNameAlpha(A)25No(不是)Field(字段)Type(類型)Size(大?。㎏ey(主關(guān)鍵字)PartNumNumericn/aYesDescriptionAlpha40NotyInStockNumericn/aNoSellingPriceNumericn/aNo4.設(shè)計(jì)數(shù)據(jù)庫(kù)表的數(shù)據(jù)
現(xiàn)在給出PSDB數(shù)據(jù)庫(kù)中三個(gè)表的實(shí)際使用的數(shù)據(jù)。設(shè)計(jì)好的這些數(shù)據(jù),我們以后還要用到。(1)Customer表的數(shù)據(jù)注:ItemNum的類型(Type)設(shè)置為Autoincriment。這就意味,ItemNum的值會(huì)由程序自動(dòng)地填入。因此,在制作Items表的數(shù)據(jù)時(shí),不要在該字段中填入任何東西。
CustNumLastNameFiestName1001KennedyTom1002AndersonJean1003GeorgeTim1004SamJean(2)Parts表的數(shù)據(jù)PartNumDescription
QtyInStockSellingPrice1001PartNum1011,000301002PartNum102542001003PartNum103211231004PartNum104200751005PartNum1051110(3)Items表的數(shù)據(jù)ItemNum[注]CustNumPartNumQtySlod10011013
10031022
10011051
10011026第4章創(chuàng)建數(shù)據(jù)庫(kù)1.構(gòu)造表的結(jié)構(gòu)
創(chuàng)建過(guò)程如下:(1)啟動(dòng)數(shù)據(jù)庫(kù)桌面DBD。(2)設(shè)置工作目錄。選擇File\WorkingDirectory命令。(3)設(shè)置工作目錄的別名。選擇Tools\AliasManager命令。選擇Table\Restructure命令,構(gòu)造表Customer.db的結(jié)構(gòu)。
2.向Customer表中輸入數(shù)據(jù)①選擇File\Open\Table命令。打開(kāi)Customer.db表。②選擇Table\EditData命令,將表置于編輯模式。③向一個(gè)字段輸入數(shù)據(jù)。即單擊該字段,然后即可輸入數(shù)據(jù)。使用Navigator控件對(duì)表中記錄排序、移動(dòng)。3.繼續(xù)向Parts.db和Items.db表輸入數(shù)據(jù),完成之后,建立PSDB完成。4.創(chuàng)建Delphi數(shù)據(jù)庫(kù)程序
(1)建立一個(gè)新的工程
l
運(yùn)行Delphi7;
l
從主菜單中選擇File\New\Application命令,則Delphi7自動(dòng)創(chuàng)建一個(gè)新工程。
l
從主菜單中選擇File\SaveAs命令,保存單元文件CMyCust.Pas,保存工程文件
MyCust.Dpr。
(2)用數(shù)據(jù)庫(kù)窗體向?qū)?chuàng)建窗體
在數(shù)據(jù)庫(kù)窗體向?qū)atabase\FormWizard命令創(chuàng)建的Form2窗體上,已經(jīng)自動(dòng)地放置了5個(gè)控件:TPanel、TDBNavigator、TDBGrid、TTable和TDataSource。Navigator控件
TTable控件
DBGrid控件
Tpanel控件
TDataSource控件
(3)執(zhí)行MyCust程序當(dāng)程序被運(yùn)行時(shí),便自動(dòng)生成一個(gè)可執(zhí)行的.EXE程序。Delphi7會(huì)顯示Customer.DB表中的數(shù)據(jù)。其中Navigator控件中輝亮的按鈕是可用的,可以使用Navigator控件的按鈕在各記錄之間移動(dòng)。第5章
讀寫(xiě)字段值
5.1字段編輯器和列編輯器
字段編輯器
列編輯器ColumnsEditorAddfields命令:使用這個(gè)命令可為T(mén)able對(duì)象增加物理字段。每個(gè)增加的字段都代表窗體類中的一個(gè)對(duì)象。所謂“增加物理字段”,是指有選擇地使用數(shù)據(jù)庫(kù)表中實(shí)際存在的字段,因?yàn)?,根?jù)需要不是總要使用數(shù)據(jù)庫(kù)表中實(shí)際存在的全部字段。在實(shí)際操作中,雖然數(shù)據(jù)庫(kù)表中實(shí)際存在很多字段,但有些是當(dāng)前不需要的字段,就不去選擇它們了。
在字段編輯器FieldsEditor中“增加物理字段”、不被選擇的字段或者被刪除的字段,都不會(huì)改變數(shù)據(jù)庫(kù)表中實(shí)際存在的字段。
Newfields命令:使用這個(gè)命令可以創(chuàng)建新的數(shù)據(jù)庫(kù)表中實(shí)際不存在的字段。這種字段分為三類:Data(數(shù)據(jù)字段)、Calculated(計(jì)算字段)和Lookup(查找字段)。所創(chuàng)建的每個(gè)新字段都代表窗體類中的一個(gè)對(duì)象。而且主要是創(chuàng)建計(jì)算字段(Calculated)。但所創(chuàng)建的新字段也不會(huì)添加到實(shí)際的數(shù)據(jù)庫(kù)表中。它僅用于顯示的目的。
不要忘記!要想創(chuàng)建和修改實(shí)際的數(shù)據(jù)庫(kù)表,還得使用數(shù)據(jù)庫(kù)桌面DatabaseDesktop程序。雙擊Grid1控件雙擊ItemsTable控件5.2使用字段編輯器選擇字段①雙擊ItemsTable控件,彈出數(shù)據(jù)庫(kù)表字段編輯器②在編輯器內(nèi)單擊鼠標(biāo)右鍵,彈出快捷菜單③在快捷菜單中選擇Addallfield,然后選擇Selectall,則Itemss.db表的所有字段被選擇。(1)雙擊ItemsTable控件,Delphi7顯示數(shù)據(jù)庫(kù)表字段編輯器。(2)操作過(guò)程如下圖所示。在Items.db表中選擇字段5.3使用列編輯器選擇字段
選擇網(wǎng)格顯示字段(1)雙擊Grid控件,顯示列編輯器窗口。(2)操作過(guò)程如下圖所示。①在Grid內(nèi)雙擊,顯示列編輯器②在列編輯器內(nèi)單擊鼠標(biāo)右鍵,彈出菜單③選擇“添加所有字段”按鈕或選擇菜單中AddAllFields則顯示Items.db表的全部字段
AddAllFields命令5.4使用列編輯器選擇顯示字段
如下圖所示,選中要?jiǎng)h除的字段FieldName,單擊“刪除”按鈕,字段FirstName即被刪除。這里所謂刪除是非永久性刪除,即不是刪除數(shù)據(jù)表中的字段,而是不在網(wǎng)格表中顯示它?;謴?fù)字段添加字段刪除字段添加所有字段列編輯器快捷菜單按鈕的功能
現(xiàn)在采用上頁(yè)圖中的結(jié)果,即只選擇含有兩個(gè)字段CustNum和LastName的DBGrid1的網(wǎng)格表。我們看一看Delphi7為字段CustNum和LastName還做了些什么工作?
事實(shí)上,一旦選擇了這兩個(gè)字段,Delphi7就在Form2窗體中自動(dòng)地放置兩個(gè)不可見(jiàn)的附加組件CustomerTableCustNum和CustomerTableLastName,通常把這種附加組件稱為字段對(duì)象。當(dāng)然,可以像其他任何組件一樣查看和設(shè)置它們的屬性,而且這一點(diǎn)也是非常重要的特性。
打開(kāi)對(duì)象查看器(ObjectInspector)上的對(duì)象選擇器(ObjectSelector)的下拉列表框,就會(huì)看到CustomerTableCustNum和CustomerTableLastName這兩個(gè)對(duì)象。如下圖所示。5.5字段對(duì)象③在對(duì)象查看的Properties標(biāo)簽頁(yè)中設(shè)置Align屬性為
alNone,并使Grid框變小。5.6用代碼改變字段屬性
①啟動(dòng)Delphi7
執(zhí)行MyCust程序②選中Grid控件,
打開(kāi)對(duì)象查看器的Properties標(biāo)簽頁(yè)。1.設(shè)置Grid控件的邊框
設(shè)置Grid控件的邊框的目的是使之可以調(diào)整大小,以適應(yīng)用戶的要求。操作過(guò)程如圖5.5所示。3.設(shè)置Checkbox1(Name設(shè)置為chkVisible
)和Checkbox2(Name設(shè)置為
chkCenter)復(fù)選框。為復(fù)選框chkVisible和chkCenter的OnClick事件添加代碼:2.給Exit按鈕的“單擊”事件添加代碼
在OnClick事件的cmdExitOnClick過(guò)程代碼窗口中添加如下代碼:
Application.Terminate;
填寫(xiě)的代碼beginif(條件)Then語(yǔ)句1else語(yǔ)句2;end;如果滿足條件執(zhí)行語(yǔ)句1如果不滿足條件執(zhí)行語(yǔ)句2程序語(yǔ)句結(jié)構(gòu)
說(shuō)明4.讀寫(xiě)字段值(1)
給cmdCustomerNumber按鈕的OnClick事件添加代碼,使得當(dāng)該代碼被執(zhí)行時(shí),作為
lblValue標(biāo)簽的Caption屬性值。
①選中cmdCustomerNumber按鈕,并打開(kāi)對(duì)象查看器的Events標(biāo)簽頁(yè)。
②雙擊Events標(biāo)簽頁(yè)的OnClick事件右邊的單元格,Delphi7彈出cmdCustomerNumberOnClick過(guò)程的代碼對(duì)話窗口,添加代碼,如下圖所示。(2)
代碼的含義:
lblValue.Caption:=‘CustomerNum:’+
CustomerTableCustNum.AsString;現(xiàn)在來(lái)解釋這個(gè)語(yǔ)句。這個(gè)語(yǔ)句的含義是:lblValue對(duì)象的Caption屬性將接受“:=”之后的值‘CustomerNumber:’+CustomerTableCustNum.AsString。但要知道,Caption的屬性是字符型的,因此,要求所賦的值也必須是字符型的。首先知道,‘CustomerNumber:’是個(gè)字符串(用‘和’括起來(lái)的內(nèi)容即表示是個(gè)字符串)。但是CustomerTableCustNum是數(shù)字型,而不是字符型的,要想把其值賦給Caption,就必須轉(zhuǎn)換類型。屬性AsString的作用就是將“.”之前的CustomerTableCustNum轉(zhuǎn)換為字符型。因此,CustomerTableCustNum.AsString的含義是,將表CustomerTable的CustNum字段值轉(zhuǎn)換成字符型(串)?!?”表示將其前與后的兩個(gè)字符串相繼賦值給Caption屬性,即將CustomerNumber:CustNum字段值賦值給Caption屬性。
選擇1001為當(dāng)前記錄,再單擊CustomerNumber按鈕,此時(shí)MyCust程序更新lblValue標(biāo)簽的Caption屬性為當(dāng)前記錄的CustNum字段值,即1001,如圖(a)所示。改變選擇的當(dāng)前記錄,例如,選擇1003為當(dāng)前記錄,再單擊CustomerNumber按鈕,此時(shí)MyCust程序更新lblValue標(biāo)簽的Caption屬性為當(dāng)前記錄的CustNum字段值,即1003,如圖(b)所示。(3)例子:讀取字段CustNum之值選擇1001為當(dāng)前記錄
(a)單擊此按鈕在此標(biāo)簽上顯示1001單擊此按鈕
(b)選擇1003為當(dāng)前記錄在此標(biāo)簽上顯示1003(4)程序清單:見(jiàn)隨書(shū)光盤(pán)中的文件CMyCust.txt。第6章計(jì)算字段
我們?cè)?.2節(jié)中曾設(shè)計(jì)了一個(gè)PSDB數(shù)據(jù)庫(kù),它包含三個(gè)表:Customer.DB、Items.DB和Parts.DB。讀者可以打開(kāi)本書(shū)光盤(pán)中的文件Form2.txt,代碼中顯示了在Form2窗體上所做的工作。下面我們要學(xué)習(xí)的內(nèi)容是:(1)用代碼把Parts.db和tems.db表連接起來(lái)。(2)在Delphi7中怎樣定義計(jì)算字段。用Delphi7的計(jì)算字段功能來(lái)編寫(xiě)一個(gè)叫做購(gòu)買(mǎi)商品的總價(jià)TotPrice.EXE程序。因?yàn)門(mén)otalPrice是可計(jì)算的,因此可以把TotalPrice視為程序中的一個(gè)字段,而且把它稱做計(jì)算字段。定義或增加新字段時(shí),從數(shù)據(jù)庫(kù)表字段編輯器開(kāi)始:雙擊temsTable控件,彈出數(shù)據(jù)庫(kù)表字段編輯器ItemTable。在其內(nèi)單擊鼠標(biāo)右鍵,從彈出的快捷菜單上選擇NewField選項(xiàng),彈出定義計(jì)算字段對(duì)話窗口。然后,填入計(jì)算字段名(Name)、類型(Type)和Calculated選項(xiàng),單擊OK按鈕。再在數(shù)據(jù)庫(kù)表字段編輯器ItemTable內(nèi)單擊鼠標(biāo)右鍵,從彈出的快捷菜單中選擇SelectAllField選項(xiàng),為數(shù)據(jù)庫(kù)表選擇所有的字段。然后雙擊網(wǎng)格控件DBGrid1,顯示網(wǎng)格表列編輯器EditingDBGrid1,在其中設(shè)置前面定義過(guò)的新計(jì)算字段名后,再在網(wǎng)格表列編輯器內(nèi)單擊鼠標(biāo)右鍵,在彈出快捷菜單上選擇SelectAllField選項(xiàng),為網(wǎng)格表顯示字段選擇所有的字段。
讀者可以打開(kāi)本書(shū)光盤(pán)中的文件TotPrice.txt,看到本章所編寫(xiě)的完整的程序代碼。第7章鏈接表
在第6章的6.4.7節(jié)中曾提到,可以使用兩種方法把數(shù)據(jù)庫(kù)中兩個(gè)表鏈接起來(lái),一是編寫(xiě)代碼的方法,二是用數(shù)據(jù)庫(kù)窗體向?qū)?。關(guān)于使用代碼鏈接表的方法前面已經(jīng)講過(guò),本章學(xué)習(xí)使用數(shù)據(jù)庫(kù)窗體向?qū)У逆溄颖砉δ?,把Customer.db表與Items.db表鏈接起來(lái)的方法。此外,還要學(xué)習(xí)一個(gè)重要的數(shù)據(jù)庫(kù)概念,即“一對(duì)多”關(guān)系的概念?,F(xiàn)在用數(shù)據(jù)庫(kù)窗體向?qū)atabaseFormWizard的鏈接表功能,實(shí)現(xiàn)Customer.db表與Items.db表的鏈接。
One2Many程序用于實(shí)現(xiàn)Customer.db表和Items.db表之間的“一對(duì)多”關(guān)系。
CPartItem程序用于實(shí)現(xiàn)Parts.db表和Items.db表之間的“一對(duì)多”關(guān)系。實(shí)現(xiàn)步驟:
1.啟動(dòng)Delphi7。
2.在Delphi7菜單中選擇File\New\Application命令。
3.啟動(dòng)數(shù)據(jù)庫(kù)窗體向?qū)atabase\FormWizard。選擇Createamaster/Detailform(創(chuàng)建主/從[明細(xì)]窗體)選項(xiàng)。建立從Customer.db表到Items.db表的一種“一對(duì)多”關(guān)系(或從Parts.db表到Items.db表的一種“一對(duì)多”關(guān)系),這是一種主/從關(guān)系的窗體,因此,選擇Createamaster/Detailform(創(chuàng)建主/從[明細(xì)]窗體)選項(xiàng)。并且是以表為對(duì)象的窗體,因此,還要選擇CreateaformusingTTableobjects(創(chuàng)建的窗體使用表對(duì)象)。
4.為Items.db表創(chuàng)建次級(jí)索引制定Customer.db(或Parts.db表)和Items.db表之間的“一對(duì)多”關(guān)系。
One2Many程序清單:見(jiàn)光盤(pán)中的文件One2Many.txt。
PartItem程序清單:見(jiàn)光盤(pán)中的文件PartItem.txt。第8章查找和確認(rèn)數(shù)據(jù)
查找數(shù)據(jù)是查找一個(gè)具體的記錄。確認(rèn)數(shù)據(jù)是檢查用戶輸入的數(shù)據(jù)的合法性,對(duì)不合法的數(shù)據(jù)拒絕接受。1.基于表的確認(rèn)技術(shù)這是在用數(shù)據(jù)庫(kù)桌面(DatabaseDesktop)創(chuàng)建表時(shí),設(shè)置的一種有效性檢查技術(shù)。例如,設(shè)置字段允許的最小值和最大值。其好處在于不需要編寫(xiě)確認(rèn)數(shù)據(jù)的代碼。這又稱為表一級(jí)(Table-Level)有效性檢查。2.基于編碼的確認(rèn)技術(shù)為了用代碼確認(rèn)用戶的數(shù)據(jù),可以通過(guò)給OnValidate事件添加代碼來(lái)實(shí)現(xiàn)。這樣,當(dāng)用戶修改一個(gè)字段時(shí),將自動(dòng)生成該對(duì)象字段的OnValidate事件,從而將自動(dòng)執(zhí)行你給該事件添加的代碼,該代碼可以檢查用戶輸入的數(shù)據(jù),并根據(jù)檢查結(jié)果決定接受或拒絕數(shù)據(jù)。3.參照完整性參照完整性概念與查找表的概念相似。參照完整性是在兩個(gè)表之間建立參照完整性聯(lián)系,這種聯(lián)系是建立在公共字段的基礎(chǔ)上。參照完整性的作用在于可以防止向表中輸入非法數(shù)據(jù)。從而保證了數(shù)據(jù)的安全性。源程序:見(jiàn)光盤(pán)中的文件CSearch.txt第9章制作數(shù)據(jù)輸入窗體
在Delphi7數(shù)據(jù)庫(kù)應(yīng)用中,通常不希望用戶使用Grid控件向表中輸入數(shù)據(jù)。更適宜的方法是制作一個(gè)專用的窗體,供用戶輸入數(shù)據(jù)。本章完成一個(gè)窗體,用來(lái)顯示Clients.db表中的記錄。用戶可以在Clients.db表中添加記錄、刪除記錄和在表中查找記錄??梢宰層脩羰褂肗avigator控件,也可以制作一個(gè)按鈕來(lái)模仿Navigator控件的按鈕。我們將使用DBText和DBEdit控件來(lái)編輯和瀏覽Clients.db表中的字段。設(shè)計(jì)好的數(shù)據(jù)輸入窗體如下圖所示。用來(lái)向數(shù)據(jù)庫(kù)表Clients.db中輸入數(shù)據(jù)和瀏覽表中的數(shù)據(jù)的程序,見(jiàn)光盤(pán)中的文件CClients.txt。
第10章列表和查找表
本章學(xué)習(xí)了列表和查找表,以及如何在數(shù)據(jù)輸入窗體中使用列表和查找表。用戶為了避免用鍵盤(pán)輸入可能產(chǎn)生的錯(cuò)誤,可以使用列表和查找表,即用戶通過(guò)從列表中選擇來(lái)輸入數(shù)據(jù)。為此,建立了MyList程序,用以說(shuō)明如何在數(shù)據(jù)輸入窗體中使用列表。也學(xué)習(xí)了如何使用DBLookupList控件作為顯示字段內(nèi)容的工具,該控件允許用戶從列表項(xiàng)中選擇數(shù)據(jù)或者直接輸入數(shù)據(jù),以及通過(guò)設(shè)置該控件的一些屬性,可以把該控件作為工具,用來(lái)從一個(gè)表中查找數(shù)據(jù),然后再填入另一個(gè)表的某個(gè)字段(因此得名查找表)。為此建立了MyLookup程序。
MyList程序清單:見(jiàn)光盤(pán)中的文件CMyList.txtMyLookup程序清單:見(jiàn)光盤(pán)中的文件CMyLookup.txt參照完整性和查找表不同。在表Clients.db中的字段SalersPersonNum,包含了銷售人員的編號(hào),因此保證了編號(hào)為合法數(shù)值(必須包括在表SalesPer.db中)是十分重要的。另一種保證表Clients.db的字段SalersPersonNum擁有合法數(shù)據(jù)(必須包括在表SalesPer.db中)的方法是在表SalesPer.db和表Clients.db之間建立參照完整性聯(lián)系。此后,用戶就不能向SalersPersonNum字段中輸入一個(gè)表SalesPer.db中沒(méi)有的數(shù)值。建立參照完整性聯(lián)系,意味著即使使用數(shù)據(jù)庫(kù)桌面也不能向SalersPersonNum字段輸入數(shù)據(jù)。
第11章查找和設(shè)定范圍
本章學(xué)習(xí)了如何使用戶只能瀏覽或編輯符合一定條件的記錄。如何設(shè)置記錄的范圍。實(shí)現(xiàn)了使用靜態(tài)SQL查詢技術(shù)的程序OnlyJim。在程序設(shè)計(jì)期間,設(shè)置了靜態(tài)SQL查詢語(yǔ)句。同時(shí),編寫(xiě)了一個(gè)SetQuery程序,以它為例說(shuō)明如何實(shí)現(xiàn)動(dòng)態(tài)查詢。所謂動(dòng)態(tài)查詢是指在程序運(yùn)行期間可以修改查詢條件的查詢。例如,可以設(shè)置查詢條件,使Grid控件只顯示那些LastName字段為Smith的記錄。而在程序運(yùn)行期間,又希望顯示那些LastName字段為Anderson的記錄,那么就可以使用動(dòng)態(tài)查詢來(lái)達(dá)到這一目的。
OnlyJim程序清單:見(jiàn)光盤(pán)中的文件CJim.txt。
SetQuery程序清單:見(jiàn)光盤(pán)中的文件CSetQuery.txt。第12章
多窗體和打印窗體
前面幾章完成的工程都只是包含一個(gè)窗體。事實(shí)上,一個(gè)數(shù)據(jù)庫(kù)工程通常由多個(gè)程序組成,而且所有的程序都使用同一個(gè)數(shù)據(jù)庫(kù)。所以可以創(chuàng)建一個(gè)程序作為所有其他程序的前端界面。我們把這個(gè)程序稱為主程序。這樣,用戶可以很方便地在各程序之間切換,也就是在各窗體之間切換。另外了解了窗口可以按模式或非模式顯示,以及如何實(shí)現(xiàn)Print按鈕、Markhe、GoToBookmark按鈕,后面兩個(gè)按鈕使當(dāng)前記錄指針指向先前標(biāo)識(shí)的紀(jì)錄。同時(shí)在本章中也完成了書(shū)簽的制作,以便讓用戶利用它實(shí)現(xiàn)如下功能:為當(dāng)前記錄建立書(shū)簽;為了進(jìn)行計(jì)算需要把記錄指針指向其他記錄;當(dāng)計(jì)算結(jié)束后,使用GotoBookmark方法使當(dāng)前記錄指針?lè)祷貢?shū)簽中保存的紀(jì)錄指針。為此,創(chuàng)建了一個(gè)工程AllView和另外兩個(gè)窗體(Clients和Parts),以其為例說(shuō)明如何完成多窗體工程。工程AddView的程序:見(jiàn)光盤(pán)中文件CACP.txt中的
CAllApps.pas程序?qū)崿F(xiàn)Clients窗體的程序:見(jiàn)光盤(pán)中文件CACP.txt中的
CClients.pas程序?qū)崿F(xiàn)Parts窗體的程序:見(jiàn)光盤(pán)中文件CACP.txt中的
CParts.pas程序第13章制作報(bào)表
本章學(xué)習(xí)了利用表帶式報(bào)表生成器QuickReport創(chuàng)建報(bào)表的方法。特別是根據(jù)數(shù)據(jù)庫(kù)數(shù)據(jù)打印報(bào)表時(shí),可以大大簡(jiǎn)化用戶應(yīng)用程序的打印工作。使用QuickReport組件創(chuàng)建應(yīng)用程序,可以按以下步驟進(jìn)行:
1.在組件模板上選擇Table和DataSource組件并放在窗體上。
2.將屬性DatabaseName設(shè)置為“數(shù)據(jù)庫(kù)別名”、TableName設(shè)置為“表名”、Active設(shè)置為T(mén)rue、DataSet設(shè)置為T(mén)able1。
3.在組件模板上選擇控件QuickRep1并放到Form1窗體中,創(chuàng)建一個(gè)空白表。
4.在對(duì)象查看器中將Bands屬性設(shè)置為T(mén)rue,創(chuàng)建表帶類型。
5.把屬性HansDetail設(shè)置為T(mén)rue創(chuàng)建表帶對(duì)象。
6.選中QuickRep1。設(shè)置DataSet屬性為T(mén)able1,把表和數(shù)據(jù)庫(kù)組件連接起來(lái)。
7.在表帶中放置文本對(duì)象(標(biāo)注為QRDBText的組件)。
8.選中QRDBText1,設(shè)置DataSet屬性為T(mén)able1,DataField設(shè)置為“數(shù)據(jù)庫(kù)表的字段名”重復(fù)進(jìn)行,直至設(shè)置完表的全部字段。
9.現(xiàn)在可以保存應(yīng)用程序。
下面是為打印預(yù)覽、打印按鈕的BitBtn的OnClick事件編寫(xiě)的程序:
procedureTmainForm.BitBtn1Click(Sender:Tobject);begin
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代辦公環(huán)境下的健康與舒適
- 未來(lái)的工作環(huán)境科技與舒適性的平衡
- 現(xiàn)代辦公環(huán)境下的智能配送技術(shù)應(yīng)用實(shí)例
- 2024秋七年級(jí)數(shù)學(xué)上冊(cè) 第4章 一元一次方程4.2 解一元一次方程 3用合并同類項(xiàng)法解方程說(shuō)課稿(新版)蘇科版001
- Unit 4 History And Traditions Reading for Writing 說(shuō)課稿-2023-2024學(xué)年高中英語(yǔ)人教版(2019)必修第二冊(cè)
- Unit 4 Friends Forever Understanding ideas click for a friend 說(shuō)課稿-2024-2025學(xué)年高中英語(yǔ)外研版必修第一冊(cè)
- 2024年五年級(jí)英語(yǔ)下冊(cè) Unit 2 How do you come to school第1課時(shí)說(shuō)課稿 譯林牛津版
- 6 魯濱遜漂流記(節(jié)選)(說(shuō)課稿)-2023-2024學(xué)年語(yǔ)文六年級(jí)下冊(cè)統(tǒng)編版
- 16《夏天里的成長(zhǎng)》(說(shuō)課稿)2024-2025學(xué)年部編版語(yǔ)文六年級(jí)上冊(cè)001
- Unit 2 Wildlife Protection Reading and Thinking Language Focus 說(shuō)課稿-2024-2025學(xué)年高一上學(xué)期英語(yǔ)人教版(2019)必修第二冊(cè)001
- 2022屆高三體育特長(zhǎng)生家長(zhǎng)會(huì)
- 不對(duì)外供貨協(xié)議
- 2024屆高考作文主題訓(xùn)練:時(shí)評(píng)類(含解析)
- 260噸汽車吊地基承載力驗(yàn)算
- 公司新員工三級(jí)安全教育培訓(xùn)(車間級(jí))
- 北師大版高三數(shù)學(xué)選修4-6初等數(shù)論初步全冊(cè)課件【完整版】
- 老子道德經(jīng)全文講解學(xué)習(xí)課件
- 企業(yè)更名通知函
- 經(jīng)大量臨床實(shí)驗(yàn)證明,空氣負(fù)離子能有效治療心腦血管疾病
- GB/T 12618-1990開(kāi)口型扁圓頭抽芯鉚釘
- GA/T 458-2021居民身份證質(zhì)量要求
評(píng)論
0/150
提交評(píng)論