版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 圖書(shū)管理系統(tǒng)畢業(yè)設(shè)計(jì)</p><p><b> 摘 要</b></p><p> 圖書(shū)管理系統(tǒng)是典型的信息管理系統(tǒng),其開(kāi)發(fā)主要包括后臺(tái)數(shù)據(jù)庫(kù)的建立和維護(hù)以及前端應(yīng)用程序的開(kāi)發(fā)兩個(gè)方面。對(duì)于前者要求建立起數(shù)據(jù)一致性和完整性強(qiáng)、數(shù)據(jù)安全性好的庫(kù)。而對(duì)于后者則要求應(yīng)用程序功能完備,易使用等特點(diǎn)。</p><p> 因此
2、要求結(jié)合開(kāi)入式圖書(shū)館的要求,對(duì)MS SQL Server2000數(shù)據(jù)庫(kù)管理系統(tǒng)、SQL語(yǔ)言原理、完成對(duì)圖書(shū)管理系統(tǒng)的需求分析、功能模塊劃分、數(shù)據(jù)庫(kù)模式分析,并由此設(shè)計(jì)了數(shù)據(jù)庫(kù)結(jié)構(gòu)和應(yīng)用程序。</p><p> 第一章對(duì)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)和圖書(shū)管理系統(tǒng)進(jìn)行了簡(jiǎn)明的介紹,并分析了開(kāi)發(fā)圖書(shū)管理系統(tǒng)所應(yīng)進(jìn)行的工作。第二章對(duì)數(shù)據(jù)庫(kù)的設(shè)計(jì)和SQL語(yǔ)言的使用進(jìn)行了系統(tǒng)分析,為深入理解數(shù)據(jù)庫(kù)應(yīng)用打下了基礎(chǔ)。第三章學(xué)習(xí)了具體的開(kāi)
3、發(fā)工具Delphi 6.0,對(duì)其數(shù)據(jù)庫(kù)組件,SQL語(yǔ)言在Delphi中的應(yīng)用等數(shù)據(jù)庫(kù)編程關(guān)鍵技術(shù)進(jìn)行了系統(tǒng)的介紹。第四章分析了圖書(shū)管理信息系統(tǒng)的應(yīng)用需求,按照數(shù)據(jù)庫(kù)設(shè)計(jì)理論的要求給出了系統(tǒng)需求說(shuō)明書(shū)、局部ER圖、全局ER圖、系統(tǒng)關(guān)系模式,子模式,利用MS SQL Server2000建立了數(shù)據(jù)庫(kù)。第五章進(jìn)行了具體的程序設(shè)計(jì),具體劃分了三類(lèi)用戶(hù)的操作權(quán)限,設(shè)計(jì)了了三個(gè)操作界面。實(shí)現(xiàn)了數(shù)據(jù)庫(kù)表的瀏覽,記錄的添加、刪除和修改,報(bào)表的生成,實(shí)現(xiàn)
4、了多數(shù)據(jù)庫(kù)表的連接操作,實(shí)現(xiàn)了多條件查詢(xún)和模糊查詢(xún),并靈活實(shí)現(xiàn)了對(duì)不可更新查詢(xún)結(jié)果集的更新操作,實(shí)現(xiàn)了主從表操作,實(shí)現(xiàn)了密碼維護(hù)功能,最后,系統(tǒng)還可以導(dǎo)入數(shù)據(jù)庫(kù)以對(duì)任意同結(jié)構(gòu)的數(shù)據(jù)庫(kù)進(jìn)行操作設(shè)計(jì)充分利用Delphi 6、MS SQL Server2000數(shù)據(jù)庫(kù)。</p><p> 關(guān)鍵詞:數(shù)據(jù)庫(kù),MS SQL Server,Delphi,數(shù)據(jù)庫(kù),圖書(shū),管理</p><p><b&g
5、t; 目 錄</b></p><p><b> 1前 言4</b></p><p> 1.1數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)簡(jiǎn)介4</p><p> 1.1.1數(shù)據(jù)庫(kù)4</p><p> 1.1.2數(shù)據(jù)庫(kù)管理系統(tǒng)5</p><p> 1.1.3創(chuàng)建數(shù)據(jù)庫(kù)5<
6、;/p><p> 1.2圖書(shū)管理系統(tǒng)6</p><p> 1.3系統(tǒng)所做工作6</p><p> 2數(shù)據(jù)庫(kù)理論基礎(chǔ)7</p><p> 2.1數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)及范式分析7</p><p> 2.1.1數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)7</p><p> 2.1.2數(shù)據(jù)庫(kù)設(shè)計(jì)范式分析9
7、</p><p> 2.2SQL語(yǔ)言介紹9</p><p> 2.2.1SQL基礎(chǔ)9</p><p> 2.2.2SQL語(yǔ)句10</p><p> 3應(yīng)用系統(tǒng)開(kāi)發(fā)工具11</p><p> 3.1Delphi6.0 VCL組件的體系結(jié)構(gòu)12</p><p> 3.
8、2數(shù)據(jù)庫(kù)組件介紹12</p><p> 3.3SQL語(yǔ)言在Delphi中的應(yīng)用13</p><p> 3.4MS SQL Server簡(jiǎn)述15</p><p> 4圖書(shū)管理系統(tǒng)設(shè)計(jì)分析16</p><p> 4.1需求分析16</p><p> 4.2系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)17</p&g
9、t;<p> 4.2.1概念設(shè)計(jì)17</p><p> 4.2.2關(guān)系數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì)18</p><p> 4.2.3數(shù)據(jù)庫(kù)的實(shí)現(xiàn)18</p><p> 5圖書(shū)管理系統(tǒng)應(yīng)用程序設(shè)計(jì)19</p><p> 5.1系統(tǒng)窗體模塊組成19</p><p> 5.2數(shù)據(jù)模塊窗體的
10、設(shè)置20</p><p> 5.3啟動(dòng)畫(huà)面的實(shí)現(xiàn)20</p><p> 5.4用戶(hù)登錄窗體的的實(shí)現(xiàn)20</p><p> 5.5用戶(hù)密碼認(rèn)證窗體的的實(shí)現(xiàn)20</p><p> 5.6借閱者服務(wù)模塊的實(shí)現(xiàn)20</p><p> 5.6.1圖書(shū)查詢(xún)功能的實(shí)現(xiàn)20</p><
11、;p> 5.6.2借閱者登錄功能的實(shí)現(xiàn)20</p><p> 5.6.3借閱者借閱情況功能的實(shí)現(xiàn)20</p><p> 5.6.4借閱者個(gè)人資料維護(hù)功能的實(shí)現(xiàn)21</p><p> 5.7工作人員-圖書(shū)借閱/歸還模塊的實(shí)現(xiàn)21</p><p> 5.7.1工作人員進(jìn)行圖書(shū)借閱功能實(shí)現(xiàn)21</p>
12、<p> 5.7.2工作人員進(jìn)行圖書(shū)歸還功能實(shí)現(xiàn)21</p><p> 5.8圖書(shū)館管理員模塊和管理員圖書(shū)管理功能的實(shí)現(xiàn)21</p><p> 5.8.1圖書(shū)館管理員工作人員和管理員管理功能的實(shí)現(xiàn)21</p><p> 5.8.2圖書(shū)館管理員修改圖書(shū)類(lèi)別及統(tǒng)記功能的實(shí)現(xiàn)21</p><p> 5.8.3
13、圖書(shū)館管理員借閱者管理功能的實(shí)現(xiàn)22</p><p> 5.8.4圖書(shū)館維護(hù)借閱者管理功能的實(shí)現(xiàn)22</p><p> 5.8.5圖書(shū)館身份維護(hù)功能的實(shí)現(xiàn)22</p><p> 5.8.6圖書(shū)館借閱者統(tǒng)計(jì)功能的實(shí)現(xiàn)22</p><p> 5.8.7圖書(shū)館統(tǒng)計(jì)借閱過(guò)期記錄功能的實(shí)現(xiàn)22</p><
14、p><b> 結(jié) 束 語(yǔ)23</b></p><p><b> 致 謝24</b></p><p><b> 參考文獻(xiàn)25</b></p><p><b> 附錄26</b></p><p><b> 前 言</
15、b></p><p> 數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)簡(jiǎn)介</p><p> 在數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)之前,對(duì)開(kāi)發(fā)數(shù)據(jù)庫(kù)的基本概念應(yīng)當(dāng)了解,對(duì)數(shù)據(jù)庫(kù)的結(jié)構(gòu)、開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的步驟、開(kāi)發(fā)體系及方法都應(yīng)當(dāng)有相當(dāng)清晰的了解和認(rèn)識(shí)。</p><p> 數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)的目標(biāo)是建立一個(gè)滿(mǎn)足用戶(hù)長(zhǎng)期需求的產(chǎn)品。開(kāi)發(fā)的主要過(guò)程為:理解用戶(hù)的需求,然后,把它們轉(zhuǎn)變?yōu)橛行У臄?shù)據(jù)庫(kù)設(shè)計(jì)
16、。把設(shè)計(jì)轉(zhuǎn)變?yōu)閷?shí)際的數(shù)據(jù)庫(kù),并且這些數(shù)據(jù)庫(kù)帶有功能完備、高效能的應(yīng)用。</p><p> 數(shù)據(jù)庫(kù)技術(shù)在計(jì)算機(jī)軟件鄰域研究中一直是非常重要的主題,產(chǎn)生于60年代,30多年來(lái)數(shù)據(jù)庫(kù)技術(shù)得到了迅速發(fā)展,并已形成較為完整的理論體系和一大批實(shí)用系統(tǒng)。并且,近年來(lái),隨著World Wide Web(WWW)的猛增及Internet技術(shù)的迅速發(fā)展,使得數(shù)據(jù)庫(kù)技術(shù)之時(shí)成為最熱門(mén)技術(shù)之一。</p><p>
17、;<b> 數(shù)據(jù)庫(kù)</b></p><p> 數(shù)據(jù)庫(kù)由DBMS(數(shù)據(jù)庫(kù)管理系統(tǒng))處理,DBMS則由開(kāi)發(fā)人員和用戶(hù)通過(guò)應(yīng)用程序直接或間接地使用。它主要包括四個(gè)要素:用戶(hù)數(shù)據(jù)、元數(shù)據(jù)、索引和應(yīng)用元數(shù)據(jù)。</p><p><b> 用戶(hù)數(shù)據(jù)</b></p><p> 目前,大多數(shù)主流數(shù)據(jù)庫(kù)管理系統(tǒng)把用戶(hù)數(shù)據(jù)表示為關(guān)系?,F(xiàn)
18、在把關(guān)系看作數(shù)據(jù)表。表的列包含域或?qū)傩裕淼男邪瑢?duì)應(yīng)業(yè)務(wù)環(huán)境中的實(shí)體的記錄。并非所有的關(guān)系都同樣符合要求,有些關(guān)系比其它關(guān)系更結(jié)構(gòu)化一些。第二章描述了一個(gè)用以產(chǎn)生良好結(jié)構(gòu)關(guān)系的過(guò)程,稱(chēng)作規(guī)范化。</p><p> 為了對(duì)比結(jié)構(gòu)差的關(guān)系和結(jié)構(gòu)好的關(guān)系之間的差別,以本文所設(shè)計(jì)的圖書(shū)管理系統(tǒng)中的圖書(shū)和圖書(shū)借閱者關(guān)系為例來(lái)說(shuō)明,假若設(shè)計(jì)關(guān)系R1(借書(shū)證號(hào),姓名,性別,身份編號(hào),身份證,聯(lián)系電話,圖書(shū)編號(hào),圖書(shū)名稱(chēng),圖
19、書(shū)類(lèi)別,作者,出版社,出版日期,備注,價(jià)格,數(shù)量);這個(gè)關(guān)系的問(wèn)題出在它有關(guān)于兩個(gè)不同主題的數(shù)據(jù),就是圖書(shū)借閱者和圖書(shū)。用這種方式構(gòu)成的關(guān)系在進(jìn)行修改時(shí),會(huì)出現(xiàn)問(wèn)題。因?yàn)橐粋€(gè)圖書(shū)借閱者可能借閱多本書(shū),如果某個(gè)圖書(shū)借閱者的某個(gè)字段(如聯(lián)系電話)出現(xiàn)變更,它所借閱的圖書(shū)記錄(可能多個(gè))也就必須變化,這是不好的。因此數(shù)據(jù)用兩個(gè)關(guān)系表示更好?,F(xiàn)在如果某圖書(shū)借閱者改變了它的聯(lián)系電話,只有關(guān)系(表)user的對(duì)應(yīng)行需要改變。當(dāng)然,要想產(chǎn)生一個(gè),顯示
20、圖書(shū)名稱(chēng)及其借閱者聯(lián)系電話的報(bào)表,就需要將這兩個(gè)表的行結(jié)合起來(lái)。結(jié)果表明,將關(guān)系分別存儲(chǔ),在生成報(bào)表的時(shí)候?qū)⑺鼈兘Y(jié)合起來(lái),比把它們存儲(chǔ)在一個(gè)合成的表中更好。</p><p> user(借書(shū)證號(hào),姓名,性別,身份編號(hào),身份證,聯(lián)系電話,)</p><p> book(圖書(shū)編號(hào),圖書(shū)名稱(chēng),圖書(shū)類(lèi)別,作者,出版社,出版日期,備注,價(jià)格,數(shù)量)</p><p><
21、;b> 元數(shù)據(jù)</b></p><p> 數(shù)據(jù)庫(kù)是自描述的,這就意味著它自身包含了它的結(jié)構(gòu)的描述,這種結(jié)構(gòu)的描述稱(chēng)作元數(shù)據(jù)。因?yàn)镈BMS產(chǎn)品是用來(lái)存儲(chǔ)和操縱表的,所以大多數(shù)產(chǎn)品把元數(shù)據(jù)以表的形式存儲(chǔ),有時(shí)稱(chēng)作系統(tǒng)表。這些系統(tǒng)表存儲(chǔ)了數(shù)據(jù)庫(kù)中表的情況,指出每一個(gè)表中有多少列,那一列是主關(guān)鍵字,每一列的數(shù)據(jù)類(lèi)型的描述,它也存儲(chǔ)索引、關(guān)鍵字、規(guī)則和數(shù)據(jù)庫(kù)結(jié)構(gòu)的其他部分。</p>&l
22、t;p> 在表中存儲(chǔ)元數(shù)據(jù)不僅對(duì)DBMS是有效的,對(duì)用戶(hù)也是方便的,因?yàn)樗麄兛梢允褂门c查詢(xún)用戶(hù)數(shù)據(jù)同樣的查詢(xún)工具來(lái)查詢(xún)?cè)獢?shù)據(jù)。本文第二章所介紹的SQL語(yǔ)言可以同時(shí)用于元數(shù)據(jù)和用戶(hù)數(shù)據(jù)。</p><p><b> 索引</b></p><p> 第三種類(lèi)型的數(shù)據(jù)改進(jìn)了數(shù)據(jù)庫(kù)的性能和可訪問(wèn)性,這種數(shù)據(jù)經(jīng)常稱(chēng)作開(kāi)銷(xiāo)數(shù)據(jù),盡管有時(shí)也采用其他類(lèi)型的數(shù)據(jù)結(jié)構(gòu),如鏈表,
23、但它主要還是索引。索引可以用來(lái)排序和快速訪問(wèn)數(shù)據(jù)。下面以本人的圖書(shū)管理信息系統(tǒng)中的book表為例來(lái)說(shuō)明。</p><p> 假定數(shù)據(jù)在磁盤(pán)上是按’圖書(shū)編號(hào)’的遞增順序排列的,用戶(hù)想打印一個(gè)按’圖書(shū)名稱(chēng)’排序的圖書(shū)數(shù)據(jù)報(bào)表。為此,所有的數(shù)據(jù)都需要從源表中提取出來(lái)并排序,除非表很小,否則這是一個(gè)很費(fèi)時(shí)的過(guò)程。或者,可以在‘圖書(shū)名稱(chēng)’字段上創(chuàng)建一個(gè)索引,該索引的條目按照‘圖書(shū)名稱(chēng)’排序,這樣,該索引的條目可以讀出來(lái),
24、并用來(lái)按順序訪問(wèn)book數(shù)據(jù)。</p><p> 索引用于快速訪問(wèn)數(shù)據(jù)。例如,一個(gè)用戶(hù)只想訪問(wèn)book表中‘圖書(shū)類(lèi)別’值為‘01’的那些學(xué)生。如果沒(méi)有索引,則必須搜索整個(gè)源表;但有了索引之后,可以找到索引條目,并使用它來(lái)挑選所有合適的行。</p><p> 索引對(duì)排序和查找是有幫助的,但要付出代價(jià)。book表中的行每次改變時(shí),索引也必須改變,這意味著索引并非隨意的,應(yīng)該在真正需要時(shí)保存
25、。</p><p><b> 應(yīng)用元數(shù)據(jù)</b></p><p> 存儲(chǔ)在數(shù)據(jù)庫(kù)中的第四種數(shù)據(jù)是應(yīng)用元數(shù)據(jù),它用來(lái)存儲(chǔ)用戶(hù)窗體、報(bào)表、查詢(xún)和其他形式的查詢(xún)組件。并非所有的DBMS都支持應(yīng)用組件,支持組件的DBMS也不一定把全部組件的結(jié)構(gòu)作為應(yīng)用元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中。然而,大多數(shù)現(xiàn)代的DBMS產(chǎn)品存儲(chǔ)這種數(shù)據(jù)作為數(shù)據(jù)庫(kù)的一部分。一般來(lái)說(shuō),數(shù)據(jù)庫(kù)開(kāi)發(fā)人員和用戶(hù)都不直接
26、訪問(wèn)應(yīng)用元數(shù)據(jù),想反,他們通過(guò)DBMS中的工具來(lái)處理這些數(shù)據(jù)。</p><p> MS SQL Server2000中就支持窗體、存儲(chǔ)過(guò)程等應(yīng)用元數(shù)據(jù)。</p><p><b> 數(shù)據(jù)庫(kù)管理系統(tǒng)</b></p><p> 數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)是指數(shù)據(jù)庫(kù)系統(tǒng)中管理數(shù)據(jù)的軟件系統(tǒng)。DBMS是數(shù)據(jù)庫(kù)系統(tǒng)的核心組成部分。對(duì)數(shù)據(jù)庫(kù)的一切操作,
27、包括定義、更新及各種控制,都是通過(guò)DBMS進(jìn)行的。DBMS總是基于某種數(shù)據(jù)模型,可以把DBMS看成是某種數(shù)據(jù)模型在計(jì)算機(jī)系統(tǒng)上的具體實(shí)現(xiàn)。根據(jù)數(shù)據(jù)模型的不同,DBMS可以分成層次型、網(wǎng)狀型、關(guān)系型、面向?qū)ο笮偷?。MS SQL Server2000就是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。</p><p> 關(guān)系模型。關(guān)系模型主要是用二維表格結(jié)構(gòu)表達(dá)實(shí)體集,用外鍵表示實(shí)體間聯(lián)系。關(guān)系模型是由若干個(gè)關(guān)系模式組成的集合。關(guān)系模式
28、相當(dāng)于前面提到的記錄類(lèi)型,它的實(shí)例稱(chēng)為關(guān)系,每個(gè)關(guān)系實(shí)際上是一張二維表格。</p><p> 關(guān)系模型和層次、網(wǎng)狀模型的最大判別是用關(guān)鍵碼而不是用指針導(dǎo)航數(shù)據(jù),表格簡(jiǎn)單用戶(hù)易懂,編程時(shí)并不涉及存儲(chǔ)結(jié)構(gòu),訪問(wèn)技術(shù)等細(xì)節(jié)。關(guān)系模型是數(shù)學(xué)化模型。SQL語(yǔ)言是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)化語(yǔ)言,已得到了廣泛的應(yīng)用。DBMS的特點(diǎn)和功能可以分為三個(gè)子系統(tǒng):設(shè)計(jì)工具子系統(tǒng)、運(yùn)行子系統(tǒng)和DBMS引擎。</p><p&
29、gt; 設(shè)計(jì)子系統(tǒng)有一個(gè)方便數(shù)據(jù)庫(kù)及其應(yīng)用創(chuàng)建的工具集。它典型地包含產(chǎn)生表、窗體、查詢(xún)和報(bào)表的工具。DBMS產(chǎn)品還提供編程語(yǔ)言和對(duì)編程語(yǔ)言的接口。</p><p> 運(yùn)行子系統(tǒng)處理用設(shè)計(jì)子系統(tǒng)開(kāi)發(fā)的應(yīng)用組件。它所包含的運(yùn)行處理器用來(lái)處理窗體和數(shù)據(jù)庫(kù)的數(shù)據(jù)交互,以及回答查詢(xún)和打印報(bào)表等。</p><p> DBMS引擎從其他兩個(gè)組件接受請(qǐng)求,并把它們翻譯成對(duì)操作系統(tǒng)的命令,以便讀寫(xiě)物理
30、介質(zhì)上的數(shù)據(jù)。DBMS引擎還涉及事務(wù)管理、鎖、備份和恢復(fù)。</p><p><b> 創(chuàng)建數(shù)據(jù)庫(kù)</b></p><p> 數(shù)據(jù)庫(kù)模式定義了數(shù)據(jù)庫(kù)的結(jié)構(gòu)、表、關(guān)系、域和業(yè)務(wù)規(guī)則。數(shù)據(jù)庫(kù)模式是一種設(shè)計(jì),數(shù)據(jù)庫(kù)和應(yīng)用正是建立在此基礎(chǔ)上的。</p><p> 域是一列可能擁有的值的集合。必須為每一個(gè)表的每一列確定域。除了數(shù)據(jù)的物理格式外,還需要
31、確定是否有些域?qū)Ρ韥?lái)說(shuō)是唯一的。</p><p> 數(shù)據(jù)庫(kù)模式的最后一個(gè)要素是業(yè)務(wù)規(guī)則,它是對(duì)需要反映在數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)應(yīng)用程序中的業(yè)務(wù)活動(dòng)的約束。業(yè)務(wù)規(guī)則是模式的一個(gè)重要部分,因?yàn)樗麄冎付藷o(wú)論什么數(shù)據(jù)變化到達(dá)DBMS引擎,允許的數(shù)據(jù)值必須滿(mǎn)足的約束。不管無(wú)效的數(shù)據(jù)變化請(qǐng)求是來(lái)自窗體的用戶(hù)、查詢(xún)/修改請(qǐng)求還是應(yīng)用程序,DBMS都應(yīng)該拒絕。</p><p> 遺憾的是,不同的DBMS產(chǎn)品
32、用不同的方法實(shí)施業(yè)務(wù)規(guī)則。在某些情況下,DBMS產(chǎn)品不具備實(shí)施必要業(yè)務(wù)規(guī)則的能力,必須以代碼形式把它們編入應(yīng)用程序。</p><p><b> 圖書(shū)管理系統(tǒng)</b></p><p> 當(dāng)今時(shí)代是飛速發(fā)展的信息時(shí)代。在各行各業(yè)中離不開(kāi)信息處理,這正是計(jì)算機(jī)被廣泛應(yīng)用于信息管理系統(tǒng)的環(huán)境。計(jì)算機(jī)的最大好處在于利用它能夠進(jìn)行信息管理。使用計(jì)算機(jī)進(jìn)行信息控制,不僅提高了工
33、作效率,而且大大的提高了其安全性。</p><p> 尤其對(duì)于復(fù)雜的信息管理,計(jì)算機(jī)能夠充分發(fā)揮它的優(yōu)越性。計(jì)算機(jī)進(jìn)行信息管理與信息管理系統(tǒng)的開(kāi)發(fā)密切相關(guān),系統(tǒng)的開(kāi)發(fā)是系統(tǒng)管理的前提。本系統(tǒng)就是為了管理好圖書(shū)館信息而設(shè)計(jì)的。</p><p> 圖書(shū)館作為一種信息資源的集散地,圖書(shū)和用戶(hù)借閱資料繁多,包含很多的信息數(shù)據(jù)的管理,現(xiàn)今,有很多的圖書(shū)館都是初步開(kāi)始使用,甚至尚未使用計(jì)算機(jī)進(jìn)行信
34、息管理。根據(jù)調(diào)查得知,他們以前對(duì)信息管理的主要方式是基于文本、表格等紙介質(zhì)的手工處理,對(duì)于圖書(shū)借閱情況(如借書(shū)天數(shù)、超過(guò)限定借書(shū)時(shí)間的天數(shù))的統(tǒng)計(jì)和核實(shí)等往往采用對(duì)借書(shū)卡的人工檢查進(jìn)行,對(duì)借閱者的借閱權(quán)限、以及借閱天數(shù)等用人工計(jì)算、手抄進(jìn)行。數(shù)據(jù)信息處理工作量大,容易出錯(cuò);由于數(shù)據(jù)繁多,容易丟失,且不易查找??偟膩?lái)說(shuō),缺乏系統(tǒng),規(guī)范的信息管理手段。盡管有的圖書(shū)館有計(jì)算機(jī),但是尚未用于信息管理,沒(méi)有發(fā)揮它的效力,資源閑置比較突出,這就是管
35、理信息系統(tǒng)的開(kāi)發(fā)的基本環(huán)境。</p><p> 數(shù)據(jù)處理手工操作,工作量大,出錯(cuò)率高,出錯(cuò)后不易更改。圖書(shū)館采取手工方式對(duì)圖書(shū)借閱情況進(jìn)行人工管理,由于信息比較多,圖書(shū)借閱信息的管理工作混亂而又復(fù)雜;一般借閱情況是記錄在借書(shū)證上,圖書(shū)的數(shù)目和內(nèi)容記錄在文件中,圖書(shū)館的工作人員和管理員也只是當(dāng)時(shí)對(duì)它比較清楚,時(shí)間一長(zhǎng),如再要進(jìn)行查詢(xún),就得在眾多的資料中翻閱、查找了,造成查詢(xún)費(fèi)時(shí)、費(fèi)力。如要對(duì)很長(zhǎng)時(shí)間以前的圖書(shū)進(jìn)行
36、更改就更加困難了。</p><p> 基于這些問(wèn)題,我認(rèn)為有必要建立一個(gè)圖書(shū)管理系統(tǒng),使圖書(shū)管理工作規(guī)范化,系統(tǒng)化,程序化,避免圖書(shū)管理的隨意性,提高信息處理的速度和準(zhǔn)確性,能夠及時(shí)、準(zhǔn)確、有效的查詢(xún)和修改圖書(shū)情況。</p><p><b> 系統(tǒng)所做工作</b></p><p> 1) 了解應(yīng)用開(kāi)發(fā)工具的現(xiàn)狀</p>&l
37、t;p> 2) DelPHi6.0編程基礎(chǔ)</p><p> 3) MS SQL Server基礎(chǔ)</p><p> 4) 設(shè)計(jì)數(shù)據(jù)庫(kù);設(shè)計(jì)界面</p><p> 5) 開(kāi)發(fā)數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)實(shí)現(xiàn)的一些功能有</p><p> l 數(shù)據(jù)和數(shù)據(jù)說(shuō)明的醒目顯示;</p><p> l 多條件的查詢(xún)、多條記錄的
38、檢索、模糊查詢(xún);</p><p> l 數(shù)據(jù)文件某種存儲(chǔ)格式導(dǎo)入數(shù)據(jù)窗體,經(jīng)過(guò)數(shù)據(jù)完整性校驗(yàn)存入數(shù)據(jù)庫(kù);</p><p> l 數(shù)據(jù)庫(kù)安全性的設(shè)計(jì);</p><p> l 數(shù)據(jù)庫(kù)的設(shè)計(jì)、數(shù)據(jù)接口、界面的設(shè)計(jì)。</p><p><b> 數(shù)據(jù)庫(kù)理論基礎(chǔ)</b></p><p> 一個(gè)成功的
39、信息管理系統(tǒng),是建立在許多條件之上的,而數(shù)據(jù)庫(kù)是其中一個(gè)非常重要的條件和關(guān)鍵技術(shù)。</p><p> 信息管理系統(tǒng)所涉及的數(shù)據(jù)庫(kù)設(shè)計(jì)分五個(gè)步驟:數(shù)據(jù)庫(kù)需求分析、概念設(shè)計(jì)、邏輯設(shè)計(jì)、物理設(shè)計(jì)與加載測(cè)試。</p><p> (1) 數(shù)據(jù)庫(kù)需求分析的任務(wù)是將業(yè)務(wù)管理單證流化為數(shù)據(jù)流,劃分主題之間的邊界,繪制出DFD圖,并完成相應(yīng)的數(shù)據(jù)字典。</p><p> (2)
40、 概念設(shè)計(jì)的任務(wù)是從DFD出發(fā),繪制出本主題的實(shí)體-關(guān)系圖,并列出各個(gè)實(shí)體與關(guān)系的綱要表。</p><p> ?。?) 邏輯設(shè)計(jì)的任務(wù)是從E-R圖與對(duì)應(yīng)的綱要表出發(fā),確定各個(gè)實(shí)體及關(guān)系的表名屬性。</p><p> ?。?) 物理設(shè)計(jì)的任務(wù)是確定所有屬性的類(lèi)型、寬度與取值范圍,設(shè)計(jì)出基本表的主鍵,將所有的表名與字段名英文化(現(xiàn)在很多軟件能支持中文字段,如MS SQL Server,我就是用
41、的中文字段名),實(shí)現(xiàn)物理建庫(kù),完成數(shù)據(jù)庫(kù)物理設(shè)計(jì)字典。</p><p> ?。?) 加載測(cè)試工作貫穿于程序測(cè)試工作的全過(guò)程,整個(gè)錄入、修改、查詢(xún)、處理工作均可視為對(duì)數(shù)據(jù)庫(kù)的加載測(cè)試工作。</p><p> 要設(shè)計(jì)出一個(gè)好的信息管理系統(tǒng)數(shù)據(jù)庫(kù),除滿(mǎn)足系統(tǒng)所要求的功能外,還必須遵守下列原則:</p><p> 1 基本表的個(gè)數(shù)越少越好。</p><
42、;p> 2 主鍵的個(gè)數(shù)越少越好。鍵是表間連接的工具,主鍵越少,表間的連接就越簡(jiǎn)單。</p><p> 3 字段的個(gè)數(shù)越少越好。</p><p> 4 所有基本表的設(shè)計(jì)均應(yīng)盡量符合第三范式。</p><p> 數(shù)據(jù)庫(kù)的設(shè)計(jì)中,如何處理多對(duì)多的關(guān)系和如何設(shè)計(jì)主鍵,是兩個(gè)有著較大難度、需要重點(diǎn)考慮的問(wèn)題。下面我們著重從SQL應(yīng)用、數(shù)據(jù)庫(kù)設(shè)計(jì)范式和查詢(xún)優(yōu)化等方
43、面來(lái)分析本課題的系統(tǒng)關(guān)鍵技術(shù)和實(shí)現(xiàn)難點(diǎn)并加以解決。</p><p> 數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)及范式分析</p><p> 信息系統(tǒng)的主要任務(wù)是通過(guò)大量的數(shù)據(jù)獲得管理所需要的信息,這就必須存儲(chǔ)和管理大量的數(shù)據(jù)。因此建立一個(gè)良好的數(shù)據(jù)組織結(jié)構(gòu)和數(shù)據(jù)庫(kù),使整個(gè)系統(tǒng)都可以迅速、方便、準(zhǔn)確地調(diào)用和管理所需的數(shù)據(jù),是衡量信息系統(tǒng)開(kāi)發(fā)工作好壞的主要指標(biāo)之一。</p><p><
44、b> 數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)</b></p><p> 數(shù)據(jù)庫(kù)設(shè)計(jì)主要是進(jìn)行數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì),即將數(shù)據(jù)按一定的分類(lèi)、分組系統(tǒng)和邏輯層次組織起來(lái),是面向用戶(hù)的。數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)需要綜合企業(yè)各個(gè)部門(mén)的存檔數(shù)據(jù)和數(shù)據(jù)需求,分析各個(gè)數(shù)據(jù)之間的關(guān)系,按照DBMS提供的功能和描述工具,設(shè)計(jì)出規(guī)模適當(dāng)、正確反映數(shù)據(jù)關(guān)系、數(shù)據(jù)冗余少、存取效率高、能滿(mǎn)足多種查詢(xún)要求的數(shù)據(jù)模型。</p><p>
45、 數(shù)據(jù)庫(kù)設(shè)計(jì)的步驟是:</p><p> (1) 數(shù)據(jù)庫(kù)結(jié)構(gòu)定義:目前的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)有的是支持聯(lián)機(jī)事務(wù)處理CLTP(負(fù)責(zé)對(duì)事務(wù)數(shù)據(jù)進(jìn)行采集、處理、存儲(chǔ))的操作型DBMS,有的可支持?jǐn)?shù)據(jù)倉(cāng)庫(kù)、有聯(lián)機(jī)分析處理CLAP(指為支持決策的制定對(duì)數(shù)據(jù)的一種加工操作)功能的大型DBMS,有的數(shù)據(jù)庫(kù)是關(guān)系型的、有的可支持面向?qū)ο髷?shù)據(jù)庫(kù)。針對(duì)選擇的DBMS,進(jìn)行數(shù)據(jù)庫(kù)結(jié)構(gòu)定義。</p><p&g
46、t; (2) 數(shù)據(jù)表定義:數(shù)據(jù)表定義指定義數(shù)據(jù)庫(kù)中數(shù)據(jù)表的結(jié)構(gòu),數(shù)據(jù)表的邏輯結(jié)構(gòu)包括:屬性名稱(chēng)、類(lèi)型、表示形式、缺省值、校驗(yàn)規(guī)則、是否關(guān)鍵字、可否為空等。關(guān)系型數(shù)據(jù)庫(kù)要盡量按關(guān)系規(guī)范化要求進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì),但為使效率高,規(guī)范化程度應(yīng)根據(jù)應(yīng)用環(huán)境和條件來(lái)決定。數(shù)據(jù)表設(shè)計(jì)不僅要滿(mǎn)足數(shù)據(jù)存儲(chǔ)的要求,還要增加一些如反映有關(guān)信息、操作責(zé)任、中間數(shù)據(jù)的字段或臨時(shí)數(shù)據(jù)表。</p><p> (3) 存儲(chǔ)設(shè)備和存儲(chǔ)空間組織:確
47、定數(shù)據(jù)的存放地點(diǎn)、存儲(chǔ)路徑、存儲(chǔ)設(shè)備等,備份方案,對(duì)多版本如何保證一致性和數(shù)據(jù)的完整性。</p><p> ?。?) 數(shù)據(jù)使用權(quán)限設(shè)置:針對(duì)用戶(hù)的不同使用要求,確定數(shù)據(jù)的用戶(hù)使用權(quán)限,確保數(shù)據(jù)安全。</p><p> ?。?) 數(shù)據(jù)字典設(shè)計(jì):用數(shù)據(jù)字典描述數(shù)據(jù)庫(kù)的設(shè)計(jì),便于維護(hù)和修改。</p><p> 為了更好地組織數(shù)據(jù)和設(shè)計(jì)出實(shí)際應(yīng)用數(shù)據(jù)庫(kù),應(yīng)該注意如下問(wèn)題:
48、</p><p> 規(guī)范化地重組數(shù)據(jù)結(jié)構(gòu):對(duì)數(shù)據(jù)進(jìn)行規(guī)范化表達(dá),這在后面將會(huì)具體討論。</p><p> 關(guān)系數(shù)據(jù)結(jié)構(gòu)的建立:在進(jìn)行了數(shù)據(jù)基本結(jié)構(gòu)的規(guī)范化重組后,還必須建立整體數(shù)據(jù)的關(guān)系結(jié)構(gòu)。這一步設(shè)計(jì)完成后數(shù)據(jù)庫(kù)和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)工作基本完成,只待系統(tǒng)實(shí)現(xiàn)時(shí)將數(shù)據(jù)分析和數(shù)據(jù)字典的內(nèi)容代入到所設(shè)計(jì)的數(shù)據(jù)整體關(guān)系結(jié)構(gòu)中,一個(gè)規(guī)范化數(shù)據(jù)庫(kù)系統(tǒng)結(jié)構(gòu)就建立起來(lái)了。 </p><
49、p> 建立關(guān)系數(shù)據(jù)結(jié)構(gòu)涉及三方面內(nèi)容:確定關(guān)聯(lián)的關(guān)鍵指標(biāo)項(xiàng)并建立關(guān)聯(lián)表;確定單一的父系記錄結(jié)構(gòu);建立整個(gè)數(shù)據(jù)庫(kù)的關(guān)系結(jié)構(gòu)。 </p><p> ?。?)鏈接關(guān)系的確定 </p><p> 在進(jìn)行了上述數(shù)據(jù)規(guī)范化重組后,已經(jīng)可以確保每一個(gè)基本數(shù)據(jù)表(我們簡(jiǎn)稱(chēng)為表)是規(guī)范的,但是這些單獨(dú)的表并不能完整地反映事物,通常需要通過(guò)指標(biāo)體系整體指標(biāo)數(shù)據(jù)才能完整全面地反映問(wèn)題。也就是說(shuō)在這些基
50、本表的各宇段中,所存儲(chǔ)的是同一事物不同側(cè)面的屬性。那么計(jì)算機(jī)系統(tǒng)如何能知道哪些表中的哪些記錄應(yīng)與其它表中的哪些記錄相對(duì)應(yīng),它們表示的是同一個(gè)事物呢?這就需要在設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)時(shí)將這種各表之間的數(shù)據(jù)記錄關(guān)系確定下來(lái)。這種表與表之間的數(shù)據(jù)關(guān)系一般都是通過(guò)主或輔關(guān)鍵詞之間的連接來(lái)實(shí)現(xiàn)的。因?yàn)樵诿總€(gè)表中只有主關(guān)鍵詞才能唯一地標(biāo)識(shí)表中的這一個(gè)記錄值(因?yàn)楦鶕?jù)第三范式的要求,表中其它數(shù)據(jù)字段函數(shù)都依賴(lài)于主關(guān)鍵詞),所以將表通過(guò)關(guān)鍵詞連接就能夠唯一地標(biāo)識(shí)
51、出某一事物不同屬性在不同表中的存放位置。 </p><p> ?。?)確定單一的父子關(guān)系結(jié)構(gòu) </p><p> 所謂確定單一的父系關(guān)系結(jié)構(gòu)就是要在所建立的各種表中消除多對(duì)多(以下用M:N來(lái)表示)的現(xiàn)象,即設(shè)法使得所有表中記錄之間的關(guān)系呈樹(shù)狀結(jié)構(gòu)(只能由一個(gè)主干發(fā)出若干條分支,而不能有若干條主干交錯(cuò)發(fā)出若干條分支狀況)。所謂的“父系”就是指表的上一級(jí)關(guān)系表。消除多對(duì)多關(guān)系可以借助于E-R
52、圖的方法來(lái)解決,也可以在系統(tǒng)分析時(shí)予以注意,避免這種情況的發(fā)生。 </p><p> 消除這種M:N情況的辦法也很簡(jiǎn)單,只需在二表之間增加一個(gè)表,則原來(lái)M:N的關(guān)系就改成了M:1,1:N的關(guān)系了。</p><p> 確定數(shù)據(jù)資源的安全保密屬性:</p><p> 一般DBMS都提供給我們自己定義數(shù)據(jù)安全保密性的功能。系統(tǒng)所提供的安全保密功能一般有8個(gè)等級(jí)(0-
53、7級(jí)),4種不同方式(只讀、只寫(xiě)、刪除、修改),而且允許用戶(hù)利用這8個(gè)等級(jí)的4種方式對(duì)每一個(gè)表自由地進(jìn)行定義。 </p><p> 定義安全保密性的方法一般有如下幾種: </p><p> a.原則上所有文件都定義為4級(jí),個(gè)別優(yōu)先級(jí)特別高的辦公室(終端或微機(jī)的入網(wǎng)賬號(hào))可定義高于4級(jí)的級(jí)別,反之則定義為低于4的級(jí)別。 </p><p> b.統(tǒng)計(jì)文件(表)和數(shù)
54、據(jù)錄入文件一般只對(duì)本工作站定義為只寫(xiě)方式,對(duì)其它工作站則定義為只讀方式。 </p><p> c.財(cái)務(wù)等保密文件一般只對(duì)中工作站(如財(cái)務(wù)科等)定義為可寫(xiě)、可改、可刪除方式,對(duì)其它工作站則定義為只讀方式,而且不是每個(gè)人都能讀,只有級(jí)別相同和高級(jí)別者才能讀。</p><p> 數(shù)據(jù)庫(kù)設(shè)計(jì)范式分析 </p><p> 建立起一個(gè)良好的數(shù)據(jù)指標(biāo)體系,是建立數(shù)據(jù)結(jié)構(gòu)和數(shù)
55、據(jù)庫(kù)的最重要的一環(huán)。一個(gè)良好的數(shù)據(jù)指標(biāo)體系是建立DB的必要條件,但不是充分條件。我們完全可以認(rèn)為所建指標(biāo)體系中的一個(gè)指標(biāo)類(lèi)就是關(guān)系數(shù)據(jù)庫(kù)中的一個(gè)基本表,而這個(gè)指標(biāo)類(lèi)下面的一個(gè)個(gè)具體指標(biāo)就是這個(gè)基本表中的一個(gè)字段。但如果直接按照這種方式建庫(kù)顯然還不能算最佳。對(duì)于指標(biāo)體系中數(shù)據(jù)的結(jié)構(gòu)在建庫(kù)前還必須進(jìn)行規(guī)范化的重新組織。 </p><p><b> SQL語(yǔ)言介紹</b></p>
56、<p><b> SQL基礎(chǔ)</b></p><p> SQL(Structured Query Language,結(jié)構(gòu)查詢(xún)語(yǔ)言)是一個(gè)功能強(qiáng)大的數(shù)據(jù)庫(kù)語(yǔ)言。SQL通常使用于數(shù)據(jù)庫(kù)的通訊。ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì))聲稱(chēng),SQL是關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言。SQL語(yǔ)句通常用于完成一些數(shù)據(jù)庫(kù)的操作任務(wù),比如在數(shù)據(jù)庫(kù)中更新數(shù)據(jù),或者從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)。使用SQL的常見(jiàn)關(guān)系數(shù)據(jù)庫(kù)管
57、理系統(tǒng)有:Oracle、 Sybase、 Microsoft SQL Server、 Access、 Ingres等等。雖然絕大多數(shù)的數(shù)據(jù)庫(kù)系統(tǒng)使用SQL,但是它們同樣有它們自立另外的專(zhuān)有擴(kuò)展功能用于它們的系統(tǒng)。但是,標(biāo)準(zhǔn)的SQL命令,比如"Select"、 "Insert"、 "Update"、 "Delete"、 "Create"和
58、"Drop"常常被用于完成絕大多數(shù)數(shù)據(jù)庫(kù)的操作。MS SQL Server 就是用的Transact- SQL。</p><p> SQL語(yǔ)言有著非常突出的優(yōu)點(diǎn),主要是:</p><p><b> 1. 非過(guò)程化語(yǔ)言</b></p><p><b> 2. 統(tǒng)一的語(yǔ)言</b></p>
59、<p> 3. 是所有關(guān)系數(shù)據(jù)庫(kù)的公共語(yǔ)言</p><p> 非過(guò)程化語(yǔ)言:SQL是一個(gè)非過(guò)程化的語(yǔ)言,因?yàn)樗淮翁幚硪粋€(gè)記錄,對(duì)數(shù)據(jù)提供自動(dòng)導(dǎo)航。SQL允許用戶(hù)在高層的數(shù)據(jù)結(jié)構(gòu)上工作,而不對(duì)單個(gè)記錄進(jìn)行操作,可操作記錄集,所有SQL 語(yǔ)句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語(yǔ)句的結(jié)果作為另一條SQL語(yǔ)句的輸入。</p><p> SQL不要
60、求用戶(hù)指定對(duì)數(shù)據(jù)的存放方法, 這種特性使用戶(hù)更易集中精力于要得到的結(jié)果;所有SQL語(yǔ)句使用查詢(xún)優(yōu)化器,它是RDBMS的一部分,由它決定對(duì)指定數(shù)據(jù)存取的最快速度的手段,查詢(xún)優(yōu)化器知道存在什么索引,在哪兒使用索引合適,而用戶(hù)則從不需要知道表是否有索引、有什么類(lèi)型的索引。</p><p> 統(tǒng)一的語(yǔ)言:SQL可用于所有用戶(hù)的DB活動(dòng)模型,包括系統(tǒng)管理員、數(shù)據(jù)庫(kù)管理員、 應(yīng)用程序員、決策支持系統(tǒng)人員及許多其它類(lèi)型的終端
61、用戶(hù)。</p><p> SQL為許多任務(wù)提供了命令,其中包括:</p><p><b> 1.查詢(xún)數(shù)據(jù)</b></p><p> 2.在表中插入、修改和刪除記錄</p><p> 3.建立、修改和刪除數(shù)據(jù)對(duì)象 </p><p> 4.控制對(duì)數(shù)據(jù)和數(shù)據(jù)對(duì)象的存取</p>&
62、lt;p> 5.保證數(shù)據(jù)庫(kù)一致性和完整性</p><p> 以前的數(shù)據(jù)庫(kù)管理系統(tǒng)為上述各類(lèi)操作提供單獨(dú)的語(yǔ)言,而SQL 將全部任務(wù)統(tǒng)一在一種語(yǔ)言中。</p><p> 所有關(guān)系數(shù)據(jù)庫(kù)的公共語(yǔ)言:由于所有主要的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)都支持SQL語(yǔ)言,用戶(hù)可將使用SQL的技能從一個(gè)RDBMS(關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng))轉(zhuǎn)到另一個(gè),所有用SQL編寫(xiě)的程序都是可以移植的。</p>
63、<p><b> SQL語(yǔ)句</b></p><p> SQL功能強(qiáng)大,是一種完備的數(shù)據(jù)處理語(yǔ)言,不僅用于數(shù)據(jù)庫(kù)查詢(xún),而且用于數(shù)據(jù)庫(kù)中的數(shù)據(jù)修改和更新,概括起來(lái),它可以分成以下幾組:</p><p> DML(Data Manipulation Language,數(shù)據(jù)操作語(yǔ)言):用于檢索或者修改數(shù)據(jù); </p><p> DD
64、L(Data Definition Language,數(shù)據(jù)定義語(yǔ)言): 用于定義數(shù)據(jù)的結(jié)構(gòu),比如 創(chuàng)建、修改或者刪除數(shù)據(jù)庫(kù)對(duì)象; </p><p> DCL(Data Control Language,數(shù)據(jù)控制語(yǔ)言):用于定義數(shù)據(jù)庫(kù)用戶(hù)的權(quán)限。</p><p> DML組可以細(xì)分為以下的幾個(gè)語(yǔ)句:</p><p> SELECT:用于檢索數(shù)據(jù);</p&g
65、t;<p> INSERT:用于增加數(shù)據(jù)到數(shù)據(jù)庫(kù);</p><p> UPDATE:用于從數(shù)據(jù)庫(kù)中修改現(xiàn)存的數(shù)據(jù);</p><p> DELETE:用于從數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)。</p><p> DDL語(yǔ)句可以用于創(chuàng)建用戶(hù)和重建數(shù)據(jù)庫(kù)對(duì)象。下面是DDL命令:</p><p> CREATE TABLE,ALTER TABL
66、E,DROP TABLE,CREATE INDEX,DROP INDEX</p><p> 下面是一個(gè)簡(jiǎn)單SQL語(yǔ)句的例子:</p><p> 我們使用SQL語(yǔ)句來(lái)從Book中檢索‘借書(shū)證號(hào)’為‘000001’的借閱者姓名:</p><p> SELECT 姓名 FROM Book WHERE 借書(shū)證號(hào) = ‘000001’</p>&l
67、t;p> 2.2.2.1 DDL與DML</p><p> 數(shù)據(jù)定義語(yǔ)言DDL:它是用來(lái)創(chuàng)建和修改數(shù)據(jù)庫(kù)結(jié)構(gòu)的一種語(yǔ)句,包括 Create、Alter和Drop 語(yǔ)句。 </p><p> 數(shù)據(jù)操作語(yǔ)言DML:包括數(shù)據(jù)查詢(xún)與數(shù)據(jù)更新。數(shù)據(jù)查詢(xún)主要是由Select語(yǔ)句完成,這一點(diǎn)不再贅述。而數(shù)據(jù)更新所造成的風(fēng)險(xiǎn)大大超過(guò)數(shù)據(jù)查詢(xún)。數(shù)據(jù)庫(kù)管理系統(tǒng)必須在更改期內(nèi)保護(hù)所存儲(chǔ)的數(shù)據(jù)的一致性
68、,確保有效的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)必須保持一致性,DBMS還必須協(xié)調(diào)多用戶(hù)的并行更新,以確保用戶(hù)和它們的更改不至于影響其它用戶(hù)的作業(yè)。</p><p> 用于修改數(shù)據(jù)庫(kù)內(nèi)容的 SQL 語(yǔ)句主要有以下三個(gè): </p><p> (1) Insert,向一個(gè)表中加入新的數(shù)據(jù)行 </p><p> (2) Delete,從一個(gè)表中刪除數(shù)據(jù)行 </p>
69、<p> (3) Update,更改數(shù)據(jù)庫(kù)中已經(jīng)存在的數(shù)據(jù) </p><p> Insert標(biāo)準(zhǔn)語(yǔ)法: </p><p> INSERT INTO table_name (col1, col2...) VALUES(value1, value2...)</p><p> 下例要將借書(shū)證號(hào)為‘000001’作為一個(gè)新的借書(shū)情況加入借書(shū)情況表
70、OWNER中</p><p> Insert Into</p><p> owner (借書(shū)證號(hào),圖書(shū)編號(hào),借書(shū)日期) </p><p> values (‘000001’,‘00000001’,‘2002-9-12’)</p><p> Insert 語(yǔ)句還可以將多行數(shù)據(jù)添加到目標(biāo)表中去,在這種形式的 Insert 語(yǔ)句中,新行的數(shù)
71、據(jù)值不是在語(yǔ)句正文中明確地指定的,而是語(yǔ)句中指定的一個(gè)數(shù)據(jù)庫(kù)查詢(xún)。添加的值來(lái)自數(shù)據(jù)庫(kù)自身的行,在某些特定的狀態(tài)下,這是非常有用的。多行 Insert 語(yǔ)句為拷貝數(shù)據(jù)提供了一種緊湊而高效的方法,但我在自已做的圖書(shū)管理系統(tǒng)中沒(méi)有使用這種方法,我在系統(tǒng)中是使用循環(huán)依照上面的用法來(lái)完成多個(gè)記錄的插入。 </p><p> Update語(yǔ)句用于更新單表中選定行的一列或多列的值。要更新的目標(biāo)表在語(yǔ)句中定義,Set子句則指定
72、要更新哪些列并計(jì)算它們的值。Update語(yǔ)句總是包含Where語(yǔ)句,而且Update語(yǔ)句比較危險(xiǎn),所以您必須明確地認(rèn)識(shí)到Where語(yǔ)句的重要性,Where語(yǔ)句被用來(lái)指定需要更新的行。</p><p><b> 標(biāo)準(zhǔn)語(yǔ)法:</b></p><p> UPDATE table_name</p><p> SET columnname1 = v
73、alue1</p><p> [, columname2 = value2]...</p><p> WHERE search_condition</p><p> Delete 語(yǔ)句標(biāo)準(zhǔn)語(yǔ)法:</p><p> DELETE FROM tablename WHERE condition</p><p>
74、; 2.2.2.2 復(fù)雜操作實(shí)現(xiàn)</p><p> 在信息管理系統(tǒng)中,我們往往會(huì)遇到歸類(lèi)、匯總、映射、索引、子查詢(xún)等復(fù)雜操作,相應(yīng)的支持與實(shí)現(xiàn)如下:</p><p> u GROUP BY方法</p><p> GROUP BY子句語(yǔ)法為: </p><p> SELECT column1, SUM(column2)</p&g
75、t;<p> FROM "list-of-tables"</p><p> GROUP BY "column-list"; </p><p> 這個(gè)GROUP BY子句將集中所有的行在一起,它包含了指定列的數(shù)據(jù)以及允許合計(jì)函數(shù)來(lái)計(jì)算一個(gè)或者多個(gè)列。</p><p> 在本人的系統(tǒng)中在顯示數(shù)據(jù)時(shí)用到了此語(yǔ)句
76、來(lái)對(duì)查詢(xún)所得的內(nèi)容排序然后再顯示。</p><p> u 組合條件和布爾運(yùn)算符</p><p> 以下的SQL語(yǔ)句中就含有組合條件:</p><p> SELECT column1, SUM(column2)</p><p> FROM "list-of-tables"</p><p>
77、WHERE "condition1" AND "condition2"; </p><p><b> 下面是一個(gè)示例:</b></p><p> SELECT 身份描述</p><p> FROM ID,user</p><p> WHERE ID.身份編號(hào)=USER.身份
78、編號(hào) and user.借書(shū)證號(hào)=’000001’; </p><p> 這條SQL語(yǔ)句是從user、id表中查找借閱證號(hào)為000001的借閱者的身份描述,第三條語(yǔ)句中如果其中有一個(gè)條件為假,那么就什么都沒(méi)有顯示。</p><p><b> u UNION子句</b></p><p> 有些時(shí)候,需要一起瀏覽多個(gè)查詢(xún)的結(jié)果、組合它們的輸出
79、,我們可以使用UNION關(guān)鍵字。 </p><p><b> 應(yīng)用系統(tǒng)開(kāi)發(fā)工具</b></p><p> Delphi6.0 VCL組件的體系結(jié)構(gòu)</p><p> Delphi類(lèi)可以粗略地分成兩部分:一部分是組件類(lèi),這些組件類(lèi)通常以某種方式出現(xiàn)在組件面板上,當(dāng)用戶(hù)從組件面板上點(diǎn)取一個(gè)類(lèi)的圖標(biāo)后,在程序中就自動(dòng)生成了該類(lèi)的對(duì)象(非可視組件
80、除外);另一部分是功能類(lèi),這此功能類(lèi)的對(duì)象通常出現(xiàn)在程序代碼中,起著不可代替的作用,但是這些功能類(lèi)在組件面板上是找不到的。在Delphi中,每一個(gè)類(lèi)的祖先都是Tobject類(lèi),整個(gè)類(lèi)的層次結(jié)構(gòu)就像一棵倒掛的樹(shù),在最頂層的樹(shù)根即為T(mén)object類(lèi)。這樣,按照面向?qū)ο缶幊痰幕舅枷?,就使得用?hù)可用Tobject類(lèi)這個(gè)類(lèi)型代替任何其它類(lèi)的數(shù)據(jù)類(lèi)型。實(shí)際上在Delphi的類(lèi)庫(kù)中,Tobject類(lèi)派生出了為數(shù)相當(dāng)眾多的子類(lèi),它們形成了一個(gè)龐大的體
81、系,通常情況下,如果不自行開(kāi)發(fā)組件,就不必了解整個(gè)類(lèi)的體系結(jié)構(gòu),只用到類(lèi)層次樹(shù)的葉結(jié)點(diǎn)就足夠了。</p><p> 凡是做過(guò)程序開(kāi)發(fā)的人都知道從來(lái)沒(méi)有單純的數(shù)據(jù)應(yīng)用程序,也就是說(shuō),數(shù)據(jù)庫(kù)應(yīng)用程序必須和用戶(hù)界面(可以是圖形界面,也可以是命令接口)元素相結(jié)合,只講界面或只講數(shù)據(jù)庫(kù)本身都構(gòu)不成數(shù)據(jù)庫(kù)應(yīng)用程序,因而用Delphi6.0開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序就隱含著界面開(kāi)發(fā)。</p><p> 組件
82、在Delphi程序的開(kāi)發(fā)中是最顯眼的角色。我們知道,在編寫(xiě)程序時(shí)一般都開(kāi)始于在組件面板上選擇組件并定義組件間的相互作用。但也有一些組件不在組件面板上,例如Tform和Tapplication(典型的非可視組件)。組件是Tcomponents派生出來(lái)的子類(lèi),可以流的形式存放在DFM文件中,具有事件和Publish屬性。</p><p> 窗口組件類(lèi)是窗口化的可視化組件類(lèi),在Delphi的類(lèi)庫(kù)中占有最大的份額。在實(shí)
83、際編程中,窗口組件類(lèi)的對(duì)象都有句柄,可以接受輸入焦點(diǎn)和包含其它組件。</p><p> 圖形組件與窗口組件并列,是另一大類(lèi)組件。圖形組件不是基于窗口的,因而不能有窗口句柄,不能接受輸入焦點(diǎn)和包含其它組件。在實(shí)際編程中,它們必須寄生于它們的宿主——窗口組件類(lèi)的對(duì)象,由它們的擁有者負(fù)責(zé)其顯示,而且它們還能觸發(fā)一些和鼠標(biāo)活動(dòng)相關(guān)的事件。圖形控件最典型的例子是Tlabel和TspeedButton??梢钥闯鰣D形組件的功
84、能很弱,圖形組件的用處何在呢?其實(shí)使用圖形組件的最大好處在于節(jié)省資源,正是因?yàn)樗鼈兊墓δ茌^弱,所以使用的系統(tǒng)資源就要少。在一個(gè)應(yīng)用程序中,如果能在不影響其功能的前提下合理大量地使用圖形組件,將會(huì)大減少程序?qū)ο到y(tǒng)資源的消耗。</p><p> 非可視組件是與可視組件相并列的另一類(lèi)組件,非可視組件在程序運(yùn)行中是不可見(jiàn)的(除各種對(duì)話框組件之外,事實(shí)上有人認(rèn)為對(duì)話框組件不能歸入非可視組件,應(yīng)該是另一種介于可視與非可視之
85、間的組件)。</p><p> 最后要說(shuō)明一下,常說(shuō)的控件實(shí)際上是一種組件。也就是說(shuō)組件這個(gè)概念要大于控件,控件在內(nèi)涵上包含于組件中??丶蒞indows系列操作系統(tǒng)提出并使用,而組件是Borland和其它廠商在對(duì)Windows控件做了必要的擴(kuò)展之后提出來(lái)的概念,它們是在不同時(shí)期由不同的廠商提出的概念。 </p><p><b> 數(shù)據(jù)庫(kù)組件介紹</b><
86、;/p><p> 用Delphi6開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用,重點(diǎn)是和各種數(shù)據(jù)庫(kù)組件打交道,能和數(shù)據(jù)庫(kù)掛鉤的組件對(duì)象有5種,它們是:Session(數(shù)據(jù)庫(kù)會(huì)話)、Database(數(shù)據(jù)庫(kù))、Dataset(數(shù)據(jù)集)、DataSource(數(shù)據(jù)源)、Data control(數(shù)據(jù)控制組件,也叫data-controls即數(shù)據(jù)感知組件)。其中前面4種統(tǒng)稱(chēng)為數(shù)據(jù)訪問(wèn)(Data Access) ADO組件 Delphi6.0包含了可以
87、用來(lái)訪問(wèn)Microsoft公司的ActiveX Data Objects(ADO)格式數(shù)據(jù)庫(kù)的組件。ADO是Micrsoft公司關(guān)于各種類(lèi)型數(shù)據(jù)的高等界面,后來(lái)逐漸演變成滿(mǎn)足所有數(shù)據(jù)訪問(wèn)需要的完整解決辦法。ADO的對(duì)象模型是所有數(shù)據(jù)訪問(wèn)接口對(duì)象模型中最簡(jiǎn)單的一種。Microsoft公司用來(lái)訪問(wèn)ADO數(shù)據(jù)的應(yīng)用程序界面技術(shù)是OLE DB。OLE DB是一種底層編程接口,用來(lái)訪問(wèn)許多不同類(lèi)型的數(shù)據(jù)源,其中包括消息、文件系統(tǒng)以及其他一些非傳
88、統(tǒng)的數(shù)據(jù)源。OLE DB是一個(gè)由Component Object Model(COM)接口組成的集合,用來(lái)隱藏創(chuàng)建數(shù)據(jù)訪問(wèn)服務(wù)過(guò)程中的細(xì)節(jié)。OLEDB提供了訪問(wèn)</p><p> Delphi的ADO組件無(wú)需依靠BDE而是使用ADO技術(shù),提供了可以通過(guò)數(shù)據(jù)控制組件訪問(wèn)數(shù)據(jù)的新方法。唯一的要求是在使用ADO組件時(shí)必須運(yùn)行ADO/OLE-DB。ADO組件的使用使得DELPHI在訪問(wèn)數(shù)據(jù)的類(lèi)型和采用的技術(shù)方面都有了很
89、大的突破。</p><p> 數(shù)據(jù)模塊設(shè)計(jì)窗口: 數(shù)據(jù)模塊設(shè)計(jì)窗口是用來(lái)設(shè)計(jì)和維護(hù)數(shù)據(jù)模塊的。數(shù)據(jù)模塊設(shè)計(jì)窗口中包含了所有以.DTI作為文件擴(kuò)展名的Data Diagram文件的信息。DTI文件在編譯時(shí)不起任何作用。</p><p> SQL語(yǔ)言在Delphi中的應(yīng)用</p><p> 在Delphi中使用SQL語(yǔ)言非常方便,一般來(lái)說(shuō),都是通過(guò)Tquery或
90、TADOquery組件來(lái)使用SQL語(yǔ)言的??梢栽赥query或TADOquery組件的SQL屬性中設(shè)置SQL語(yǔ)句。設(shè)計(jì)程序時(shí),在該組件的屬性對(duì)話框中選擇SQL屬性,單擊帶省略號(hào)的按鈕,就可以打開(kāi)String List Editor對(duì)話框,然后我們就可以在對(duì)話框中添加SQL語(yǔ)句。還可以使用Delphi的SQL Builder來(lái)自動(dòng)生成SQL語(yǔ)句,這樣可以避免手工編寫(xiě)SQL而可能造成的語(yǔ)法錯(cuò)誤。</p><p>
91、靜態(tài)SQL語(yǔ)句在程序設(shè)計(jì)時(shí)便已固定下來(lái),它不包含任何參數(shù)和變量。</p><p> 動(dòng)態(tài)SQL語(yǔ)句,也被稱(chēng)作參數(shù)化的語(yǔ)句,在其中間包含著表示字段名或表名的參數(shù),例如下面的語(yǔ)句是一條動(dòng)態(tài)SQL語(yǔ)句: </p><p> Select * From Book Where 圖書(shū)編號(hào) =:bookCode; </p><p> 其中的變量bookCode便是一
92、個(gè)參數(shù)變量,它由一個(gè)冒號(hào)引導(dǎo),在程序運(yùn)行過(guò)程中,必須要為該參數(shù)賦值,該條SQL語(yǔ)句才能正確執(zhí)行,每次運(yùn)行應(yīng)用程序時(shí)可以為該參數(shù)變量賦予不同的值。為參數(shù)賦值有三種方法:</p><p> ?、俑鶕?jù)參數(shù)在SQL語(yǔ)句中出現(xiàn)的順序,設(shè)置TADOQuery組件的parameters屬性值為參數(shù)賦值。</p><p> ?、谥苯痈鶕?jù)SQL語(yǔ)句中各參數(shù)的名字,調(diào)用ParamByName方法來(lái)為各參數(shù)賦值
93、。</p><p> ③將TADOQuery組件的DataSource屬性設(shè)置為另一個(gè)數(shù)據(jù)源,這樣將另一個(gè)數(shù)據(jù)源中與當(dāng)前TADOQuery組件的SQL語(yǔ)句中的參數(shù)名相匹配的字段值賦給其對(duì)應(yīng)的參數(shù)。利用這種方法也能實(shí)現(xiàn)所謂的連接查詢(xún),創(chuàng)建主要—明細(xì)型數(shù)據(jù)庫(kù)應(yīng)用。</p><p> 在使用動(dòng)態(tài)SQL語(yǔ)句編程時(shí),常常用到一個(gè)很重要的方法Prepare,調(diào)用Prepare 方法之后,Delph
94、i會(huì)將帶參數(shù)的SQL語(yǔ)句傳送給與其對(duì)應(yīng)的數(shù)據(jù)庫(kù)引擎,對(duì)動(dòng)態(tài)SQL語(yǔ)句進(jìn)行語(yǔ)法分析和優(yōu)化。雖然在用動(dòng)態(tài)SQL語(yǔ)句編程時(shí),調(diào)用Prepare方法并不是必須的,但是調(diào)用Prepare方法后,會(huì)極大地提高動(dòng)態(tài)SQL 語(yǔ)句的執(zhí)行性能,特別是當(dāng)要反復(fù)多次執(zhí)行同一條動(dòng)態(tài)SQL語(yǔ)句時(shí),其優(yōu)越性會(huì)更加明顯。 </p><p> 如果在應(yīng)用程序中執(zhí)行一條SQL語(yǔ)句之前并沒(méi)有顯式地調(diào)用Prepare方法,每次在執(zhí)行SQL 語(yǔ)句時(shí),D
95、elphi會(huì)隱含地調(diào)用Prepare方法以準(zhǔn)備這個(gè)查詢(xún)。</p><p> TadoQuery部件還有一個(gè)Prepare屬性,這是一個(gè)布爾型屬性,當(dāng)其屬性值為T(mén)rue時(shí), 表明該查詢(xún)已被準(zhǔn)備好了( SQL 語(yǔ)句已被傳送到數(shù)據(jù)庫(kù)引擎中 ) , 當(dāng)我們使用參數(shù)編輯器Parameters Editor來(lái)為動(dòng)態(tài)SQL語(yǔ)句中的參數(shù)賦值時(shí),當(dāng)設(shè)置完相應(yīng)的參數(shù)值并退出參數(shù)編輯器時(shí),Delphi會(huì)隱含地調(diào)用Prepare方法以
96、準(zhǔn)備好查詢(xún)。</p><p> 當(dāng)SQL語(yǔ)句執(zhí)行完之后,要想準(zhǔn)備下一個(gè)查詢(xún),首先必須調(diào)用Close方法,然后才能調(diào)用Prepare方法準(zhǔn)備下一個(gè)查詢(xún)。一般來(lái)說(shuō),在一個(gè)應(yīng)用程序中應(yīng)該調(diào)用一次Prepare方法,常常在窗體的OnCreate事件處理過(guò)程中調(diào)用Prepare方法, 然后用上述介紹的方法為參數(shù)賦值,最后調(diào)用Open方法或ExecSQL方法執(zhí)行SQL語(yǔ)句,以完成查詢(xún)。</p><p&g
97、t; 當(dāng)然在調(diào)用Prepare方法準(zhǔn)備好一個(gè)查詢(xún)時(shí),會(huì)消耗一些數(shù)據(jù)庫(kù)資源,因而每當(dāng)一個(gè)查詢(xún)執(zhí)行完畢之后,要養(yǎng)成調(diào)用UnPrepare方法以撤消查詢(xún)的好習(xí)慣。在運(yùn)行程序過(guò)程中,通過(guò)程序改變TQuery或TADOquery部件的SQL屬性值時(shí),Delphi會(huì)自動(dòng)地調(diào)用Close方法和UnPrepare 方法,以撤消查詢(xún)。</p><p> 在程序運(yùn)行過(guò)程中,要想設(shè)置Tquery或TADOquery部件的SQL屬性
98、,必須首先調(diào)用Close方法,關(guān)閉TQuery或TADOquery部件,然后再調(diào)用Clear方法清除SQL屬性中現(xiàn)存的SQL命令語(yǔ)句, 最后再調(diào)用Add方法為SQL屬性設(shè)置新的SQL命令語(yǔ)句。例如: </p><p> datamodule4.adoquery2.close;</p><p> datamodule4.adoquery2.sql.clear;</p>&l
99、t;p> datamodule4.adoquery2.sql.add('SELECT 借書(shū)證號(hào),密碼 FROM [user] </p><p> WHERE (借書(shū)證號(hào) = :tt)');</p><p> datamodule4.adoquery2.parameters[0].value:=username;</p><p> dat
100、amodule4.adoquery2.open; </p><p> 在為T(mén)Query或TADOquery部件設(shè)置SQL屬性時(shí)調(diào)用Close方法總是很安全的,如果TQuery或TADOquery部件已經(jīng)被關(guān)閉了,調(diào)用Close方法時(shí)不會(huì)產(chǎn)生任何影響。在應(yīng)用程序中為SQL屬性設(shè)置新的SQL 命令語(yǔ)句時(shí),必須要調(diào)用Clear方法以清除SQL屬性中現(xiàn)存的SQL命令語(yǔ)句,如果不調(diào)用Clear方法,便調(diào)用Add方法向SQ
101、L屬性中設(shè)置SQL命令語(yǔ)句,那么新設(shè)置的SQL命令語(yǔ)句會(huì)追加在現(xiàn)存SQL命令語(yǔ)句后面, 在程序運(yùn)行時(shí)常常會(huì)出現(xiàn)出乎意料的查詢(xún)結(jié)果甚至程序無(wú)法運(yùn)行下去。</p><p> 在這里要特別注意的,一般情況下TQuery或TADOquery部件的SQL屬性只能包含一條完整的SQL語(yǔ)句,它不允許被設(shè)置成多條SQL語(yǔ)句。當(dāng)然有些數(shù)據(jù)庫(kù)服務(wù)器也支持在TQuery或TADOquery部件的SQL屬性中設(shè)置多條SQL語(yǔ)句,只要數(shù)
102、據(jù)庫(kù)服務(wù)器允許這樣,我們?cè)诰幊虝r(shí)可以為 SQL 屬性設(shè)置多條SQL語(yǔ)句。</p><p> 在為T(mén)Query或TADOquery部件設(shè)置完SQL屬性的屬性值之后,也即編寫(xiě)好適當(dāng)?shù)腟QL程序之后,可以有多種方式來(lái)執(zhí)行SQL程序。</p><p> 在設(shè)計(jì)過(guò)程中,設(shè)置完TQuery或TADOquery部件的SQL屬性之后將其Active屬性的值置為T(mén)rue,這樣便可以執(zhí)行SQL屬性中的SQ
103、L程序,如果應(yīng)用中有與TQuery或TADOquery部件相連的數(shù)據(jù)瀏覽部件( 如TDDGrid TDBEdit等)那么在這些數(shù)據(jù)瀏覽部件中會(huì)顯示SQL程序的執(zhí)行結(jié)果。</p><p> 在應(yīng)用程序運(yùn)行過(guò)程中,通過(guò)程序調(diào)用TQuery或TADOquery組件的Open方法或ExecSQL 方法可以執(zhí)行其SQL屬性中的SQL程序。Open方法和ExecSQL方法是不一樣的。Open方法只能用來(lái)執(zhí)行SQL語(yǔ)言的查詢(xún)
104、語(yǔ)句(Select命令), 并返回一個(gè)查詢(xún)結(jié)果集,而ExecSQL方法還可以用來(lái)執(zhí)行其它常用的SQL語(yǔ)句(如INSERT, UPDATE, DELETE等命令),例如:</p><p> Query1.Open (這樣會(huì)返回一個(gè)查詢(xún)結(jié)果集)</p><p> 如果調(diào)用Open方法,而沒(méi)有查詢(xún)結(jié)果時(shí),會(huì)出錯(cuò)。此時(shí)應(yīng)該調(diào)用ExecSQL </p><p> 方法來(lái)
105、代替Open方法。如:</p><p> Query1.ExecSQL (沒(méi)有返回結(jié)果)</p><p> 當(dāng)然在設(shè)計(jì)應(yīng)用程序時(shí),程序設(shè)計(jì)人員是無(wú)法確定TQuery或TADOquery組件中的SQL 語(yǔ)句是否會(huì)返回一個(gè)查詢(xún)結(jié)果的。對(duì)于這種情況應(yīng)當(dāng)用Try…Except模塊來(lái)設(shè)計(jì)程序。在 Try 部分調(diào)用Open方法,而在Except部分調(diào)用ExceSQL方法,這樣才能保證程序的正確運(yùn)行
106、。</p><p><b> 例如: </b></p><p><b> Try</b></p><p> Query1.Open</p><p><b> Except</b></p><p> Query1.ExecSQL</p>
107、;<p><b> End</b></p><p> 通過(guò)Tquery或TADOquery組件可以獲得兩種類(lèi)型的數(shù)據(jù):</p><p><b> u “活動(dòng)”的數(shù)據(jù)</b></p><p> 這種數(shù)據(jù)就跟通過(guò)TTable部件獲得的數(shù)據(jù)一樣,用戶(hù)可以通過(guò)數(shù)據(jù)瀏覽部件來(lái)編輯修改這些數(shù)據(jù),并且當(dāng)調(diào)用Post
108、方法或當(dāng)焦點(diǎn)離開(kāi)當(dāng)前的數(shù)據(jù)瀏覽部件時(shí),用戶(hù)對(duì)數(shù)據(jù)的修改自動(dòng)地被寫(xiě)回到數(shù)據(jù)庫(kù)中。</p><p> u 非活動(dòng)的數(shù)據(jù)(只讀數(shù)據(jù))</p><p> 用戶(hù)通過(guò)數(shù)據(jù)瀏覽部件是不能修改其中的數(shù)據(jù)。在缺省情況下,通過(guò)TQuery部件獲得的查詢(xún)結(jié)果數(shù)據(jù)是只讀數(shù)據(jù),要想獲得“活動(dòng)”的數(shù)據(jù),在應(yīng)用程序中必須要設(shè)置Tquery或TADOquery組件的RequestLive屬性值為T(mén)rue,然而并不是在
109、任何情況下(通過(guò)設(shè)置RequestLive的屬值True)都可以獲得“活動(dòng)”的數(shù)據(jù)的,要想獲得“活動(dòng)”的數(shù)據(jù),除了將TQuery部件的RequestLive屬性設(shè)置為T(mén)rue外,相應(yīng)的SQL命令還要滿(mǎn)足以下條件。</p><p> 本地SQL語(yǔ)句查詢(xún)情況下,要得到可更新的數(shù)據(jù)集,SQL語(yǔ)句的限制為:</p><p> 1. 查詢(xún)只能涉及到一個(gè)單獨(dú)的表</p><p
110、> 2. SQL語(yǔ)句中不能包含ORDER BY命令</p><p> 3. SQL語(yǔ)句中不能含聚集運(yùn)算符SUM或AVG</p><p> 4. 在Select后的字段列表中不能有計(jì)算字段</p><p> 在Select語(yǔ)句WHERE部分只能包含字段值與常量的比較運(yùn)算,這些比較運(yùn)算符是:Like, >, <, >=, <=
111、。各比較運(yùn)算之間可以有并和交運(yùn)算:AND和OR</p><p> 當(dāng)通過(guò)SQL語(yǔ)句查詢(xún)數(shù)據(jù)庫(kù)服務(wù)器中的數(shù)據(jù)庫(kù)表:</p><p> 1. 查詢(xún)只能涉及到一個(gè)單獨(dú)的表</p><p> 2. SQL語(yǔ)句中不能包含ORDER BY命令</p><p> 3. SQL語(yǔ)句中不能含聚集運(yùn)算符SUM或AVG運(yùn)算</p><p
112、> 另外,如果是查詢(xún)Sybase數(shù)據(jù)庫(kù)中的表,那么被查詢(xún)的表中只能有一個(gè)索引。</p><p> 如果在應(yīng)用程序中要求TQuery或TADOquery組件返回一個(gè)“活動(dòng)”的查詢(xún)結(jié)果數(shù)據(jù)集,但是SQL 命令語(yǔ)句不滿(mǎn)足上述約束條件時(shí),對(duì)于本地?cái)?shù)據(jù)庫(kù)的SQL查詢(xún),BDE只能返回只讀的數(shù)據(jù)集。對(duì)于數(shù)據(jù)庫(kù)服務(wù)器中的SQL查詢(xún),只能返回錯(cuò)誤的代碼。當(dāng)Tquery或TADOquery組件返回一個(gè)“活動(dòng)”的查詢(xún)結(jié)果數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖書(shū)管理系統(tǒng) 畢業(yè)設(shè)計(jì)
- 圖書(shū)管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---圖書(shū)管理系統(tǒng)
- 圖書(shū)管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)-----圖書(shū)管理系統(tǒng)
- 畢業(yè)設(shè)計(jì)-----圖書(shū)管理系統(tǒng)
- 圖書(shū)管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---圖書(shū)管理系統(tǒng)
- 圖書(shū)管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----圖書(shū)管理系統(tǒng)
- 畢業(yè)設(shè)計(jì)---圖書(shū)管理系統(tǒng)
- 畢業(yè)設(shè)計(jì)-----圖書(shū)管理系統(tǒng)
- 圖書(shū)管理系統(tǒng)(畢業(yè)設(shè)計(jì))
- 圖書(shū)管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì) 圖書(shū)管理系統(tǒng)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)----圖書(shū)管理系統(tǒng)設(shè)計(jì)
- 小型圖書(shū)管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 圖書(shū)管理系統(tǒng)畢業(yè)設(shè)計(jì)論文
- 畢業(yè)設(shè)計(jì)圖書(shū)管理系統(tǒng)
- 畢業(yè)設(shè)計(jì)(論文)-圖書(shū)管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論