




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 第第5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.1 BCB數(shù)據(jù)庫技術(shù)概論數(shù)據(jù)庫技術(shù)概論 5.2 數(shù)據(jù)庫組件的連接數(shù)據(jù)庫組件的連接 5.3 TDataSet類類 5.4 數(shù)據(jù)控制組件的使用數(shù)據(jù)控制組件的使用 5.5 TQuery組件的使用組件的使用 5.6 建立主表建立主表/細(xì)目表關(guān)系細(xì)目表關(guān)系 5.7 使用使用ADO技術(shù)技術(shù) 5.8 使用使用QuickReport創(chuàng)建報表創(chuàng)建報表 習(xí)題習(xí)題 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.1 BCB數(shù)據(jù)庫技術(shù)概論數(shù)據(jù)庫技術(shù)概論 5.1.1 ODBC、BDE與ADO ODBC是
2、Microsoft公司W(wǎng)indows開放式體系結(jié)構(gòu)的數(shù)據(jù)庫部件,它是若干Windows API的標(biāo)準(zhǔn)命令或函數(shù)組,用戶以統(tǒng)一的方式使用這些API來處理不同平臺上的數(shù)據(jù)庫信息。ODBC已成為數(shù)據(jù)庫行業(yè)的標(biāo)準(zhǔn),每個數(shù)據(jù)庫管理系統(tǒng)的開發(fā)商都為自己的數(shù)據(jù)庫產(chǎn)品編制了相應(yīng)的ODBC,為數(shù)據(jù)庫的二次開發(fā)帶來了方便。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 為了對包括Office文檔、郵件、Web上的文本或圖形等形式的數(shù)據(jù)提供統(tǒng)一的訪問方法,Microsoft對ODBC進(jìn)行擴(kuò)充,推出了新的數(shù)據(jù)訪問接口標(biāo)準(zhǔn)OLE DB。但ODBC和OLE DB使用起來都不太方便,因此Microsoft隨后又對OL
3、E DB進(jìn)行了包裝,推出了一種面向?qū)ο笄遗c語言無關(guān)的數(shù)據(jù)庫應(yīng)用編程接口,這就是ADO(ActiveX Data Objects)。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) BCB支持從ODBC到ADO的各種流行的數(shù)據(jù)庫標(biāo)準(zhǔn)。Borland數(shù)據(jù)庫引擎稱為BDE,它是訪問各種數(shù)據(jù)庫的DLL和實用程序的集合,用來訪問符合ODBC標(biāo)準(zhǔn)的本地數(shù)據(jù)庫和客戶/服務(wù)器數(shù)據(jù)庫。針對不同的數(shù)據(jù)庫,BDE提供了一組驅(qū)動器,使應(yīng)用程序能夠在不知道數(shù)據(jù)庫的具體工作細(xì)節(jié)情況下即可進(jìn)行各種數(shù)據(jù)操作。不同版本的C+Builder所帶的驅(qū)動器有所不同,但每個版本都有一個名為STANDARD的驅(qū)動器,提供本地數(shù)據(jù)庫所
4、要的一切。而Client/Server版的C+Builder帶有連接Sybase、Oracle、Informix、InterBase等數(shù)據(jù)庫服務(wù)器的驅(qū)動器。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) BCB對ADO的支持則是通過一組VCL的數(shù)據(jù)庫組件來實現(xiàn)的。經(jīng)過BCB包裝的ADO組件,在使用中與BDE以及其它的VCL組件有很好的兼容性,使得用BCB開發(fā)的數(shù)據(jù)庫程序具有極強(qiáng)的適應(yīng)能力。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.1.2 數(shù)據(jù)庫別名 BDE可以直接訪問數(shù)據(jù)庫,也可以通過別名訪問數(shù)據(jù)庫,前者較為直接,后者則較為正規(guī),并且具有更多的功能和更好的兼容性。數(shù)據(jù)庫別
5、名生成后就可以在C+Builder中使用。 本地數(shù)據(jù)庫使用的別名通常比較簡單,它告訴BDE使用哪種驅(qū)動器和數(shù)據(jù)庫文件在磁盤上的位置。而客戶/服務(wù)器數(shù)據(jù)庫的別名則還包含其它信息,如打開方式、用戶名和密碼等。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) BCB安裝完成后,本地硬盤上已經(jīng)設(shè)置了一個別名為“BCDEMOS”的數(shù)據(jù)庫,該數(shù)據(jù)庫內(nèi)有許多表,我們經(jīng)常在例題中使用該數(shù)據(jù)庫別名。 下面介紹如何生成BDE的數(shù)據(jù)庫別名。在Windows系統(tǒng)的控制面板中選取“BDE Administrator”圖標(biāo),此時彈出BDE別名管理器,如圖5-1所示。該窗口左下方Database頁上列出了系統(tǒng)所有的可用
6、數(shù)據(jù)庫的別名,打開其中的樹型結(jié)點可以瀏覽更加詳細(xì)的內(nèi)容。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 圖5-1 BDE 管理器 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 作為例子我們創(chuàng)建一個基于FOXPRO的BDE別名MYBDE,具體方法如下: (1) 在別名管理器的Database 頁面上選擇主菜單ObjectNew,或右擊樹型結(jié)構(gòu)的任意地方,選擇彈出菜單的New選項,彈出新別名對話框,如圖5-2所示。在下拉列表框中選擇“STANDARD”,此時生成一個缺省名為“STANDARD1”的別名。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 圖5-2 新建數(shù)據(jù)庫別名第第
7、5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (2) 將別名命名為“MYBDE”并回車,然后在該別名的設(shè)置中單擊DEFAULT DRIVER的屬性值,選取FOXPRO。 (3) 將別名的PATH設(shè)置為數(shù)據(jù)庫所在的目錄,如路徑為 C:Program FilesBorlandBorland SharedData (4) 單擊工具欄中的Apply按鈕,即完成了別名的創(chuàng)建。 如果需要瀏覽數(shù)據(jù)庫別名所指的數(shù)據(jù)庫及其數(shù)據(jù)表,則單擊別名前面的“+”,展開后再打開Tables節(jié)點,將出現(xiàn)該數(shù)據(jù)庫所有可用的表,如圖5-3所示。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 圖5-3 展開后的數(shù)據(jù)庫瀏覽
8、器 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.1.3 Database DeskTop Database DeskTop是Borland公司的一個小型數(shù)據(jù)庫管理系統(tǒng)產(chǎn)品。C+Builder中可以使用Database DeskTop來創(chuàng)建、瀏覽和修改本地的Paradox和dBASE數(shù)據(jù)表。 執(zhí)行ToolsDatabase DeskTop 菜單命令即可打開Database DeskTop。在Database DeskTop中可以打開子窗口對數(shù)據(jù)表進(jìn)行創(chuàng)建、查詢、執(zhí)行SQL語句等操作。Database DeskTop子窗口主要有以下三種。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程
9、序開發(fā) 1查詢窗口 打開或建立新的QBE文件時,Database DeskTop將打開一個查詢窗口,可以使用查詢窗口檢索表中的信息。 2SQL編輯器 當(dāng)打開或創(chuàng)建SQL文件時,SQL編輯器窗口就會自動出現(xiàn)在主窗口上面。SQL編輯器除了具有文本編輯器的一般特征以外,還具有執(zhí)行和保存SQL語句的功能。在執(zhí)行時,由SQL服務(wù)器進(jìn)行文法檢查。 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 3表窗口 當(dāng)打開或建立新的Paradox、dBASE、SQL表時,會出現(xiàn)表窗口,利用表窗口可以輸入或修改表的結(jié)構(gòu)。 Database DeskTop支持Paradox、dBASE和SQL文件格式,在Datab
10、ase DeskTop中建立一個表的步驟如下: (1) 選擇FileNewTable,或右擊“Open Table”工具按鈕選擇“New”, Database Desktop將打開“Create Table”對話框,從下拉式列表框中選擇“Paradox”(如果建立其它類型的數(shù)據(jù)表,也只要在這里作相應(yīng)選擇即可)。單擊“OK”, Database DeskTop將打開創(chuàng)建數(shù)據(jù)表對話框。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (2) 在“Field Name”列輸入字段名。移動光標(biāo)到“Type”列,按下“空格”鍵或用鼠標(biāo)右擊“Type”列,從顯示的數(shù)據(jù)類型列表中選擇該字段的數(shù)據(jù)類型。在
11、“Size”列鍵入一個合適的字段寬度(如果需要的話)。 (3) 使用向下箭頭,重復(fù)如上步驟,直到指定所需的所有字段。 (4) 可以雙擊某字段的“Key”列將該字段指定為一個鍵。Paradox表可以有一個或幾個鍵,但必須是該表最前面的幾個字段。被指定為Key的字段會被自動索引,并且系統(tǒng)會檢查鍵值組合的惟一性(即不允許兩條記錄的所有鍵值都相同)。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (5) 表結(jié)構(gòu)創(chuàng)建完成之后,選擇“Save As”命令按鈕為該表命名并保存。在Database DeskTop的表窗口中設(shè)計表的結(jié)構(gòu)如圖5-4所示。在Database DeskTop中可對數(shù)據(jù)表進(jìn)行輸入
12、或編輯,具體步驟如下: 執(zhí)行FileOpen菜單命令打開數(shù)據(jù)表,執(zhí)行TableEdit Data菜單命令進(jìn)入編輯模式,在該模式下可輸入或編輯數(shù)據(jù)。在編輯完一條記錄并進(jìn)入下一條記錄的編輯后,Database DeskTop將自動保存剛才輸入或編輯的記錄。 如果要修改表的結(jié)構(gòu),則應(yīng)在打開表窗口之后執(zhí)行TableRestructure菜單命令。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 圖5-4 使用Database DeskTop設(shè)計表的結(jié)構(gòu)第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.1.4 BCB 的數(shù)據(jù)庫組件 BCB數(shù)據(jù)庫組件分為兩大類:非可視的數(shù)據(jù)訪問組件和可視化的數(shù)
13、據(jù)控制組件。前者提供了取得數(shù)據(jù)的機(jī)制,它們位于組件面板的Data Access、BDE和ADO等頁上;而后者主要用于瀏覽和編輯數(shù)據(jù),它們位于Data Controls頁上。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.2 數(shù)據(jù)庫組件的連接數(shù)據(jù)庫組件的連接 VCL的數(shù)據(jù)訪問組件和數(shù)據(jù)控制控件之間通常使用DataSource來連接。下面這個簡單的例子讓我們對BCB使用組件連接數(shù)據(jù)庫的技術(shù)有感性的認(rèn)識。 【例5-1】 本例使用數(shù)據(jù)庫組件連接位于本地的BCDEMOS數(shù)據(jù)庫中的animals數(shù)據(jù)表進(jìn)行瀏覽。具體制作步驟如下:第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (1) 新建一
14、個項目,在主窗體上放一個TTable類組件Table1(位于BDE組件頁)。將它的DatabaseName屬性設(shè)置為BCDEMOS,它的TableName屬性設(shè)置為animals.dbf。 (2) 在窗體上放置一個TDataSource類組件Database1(位于Data Access頁),并在其屬性Dataset的下拉框中選取Table1,實現(xiàn)數(shù)據(jù)源和數(shù)據(jù)集相聯(lián)系。 (3) 將一個TDBGrid類控件(位于Data Controls頁)放到窗體上,將其DataSource屬性設(shè)置為DataSource1,使其與數(shù)據(jù)源相聯(lián)系。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (4) 回到
15、Table1組件上,將其Active屬性設(shè)置為true(缺省值為false),這樣就打開了數(shù)據(jù)源,此時ANIMALS.DBF表中的數(shù)據(jù)立即顯示在DBGrid1的柵格中(除BMP字段外)??烧{(diào)整DBGrid控件的大小以便于瀏覽。 (5) 再將一個TDBImage類控件(位于Data Controls頁)放置在窗體上,將其DataSource屬性設(shè)置為DataSource1,DataField屬性設(shè)置為BMP(animals表中的字段名,數(shù)據(jù)類型為圖片),并調(diào)整該控件的尺寸和位置。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (6) 將一個TDBNavigator類控件(位于Data Co
16、ntrols頁)放置在窗體上,將其DataSource屬性設(shè)置為DataSource1。 至此,程序設(shè)計完畢。運行該程序,通過DBNavigator按鈕可以實現(xiàn)添加和刪除記錄等功能,在DBImage中顯示圖片,如圖5-5所示。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 圖5-5 簡單的數(shù)據(jù)表瀏覽程序 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.3 TDataSet類類 TTable組件用于方便快捷地訪問本地數(shù)據(jù)表,而處理SQL數(shù)據(jù)庫服務(wù)器則通常使用TQuery組件,它們都是TDataSet的派生類。本節(jié)將對TDataSet類屬性和方法的用法作一個較為詳細(xì)的介紹,它們是B
17、CB數(shù)據(jù)庫技術(shù)的重要基礎(chǔ)。 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.3.1 連接數(shù)據(jù)庫 與連接數(shù)據(jù)集有關(guān)的屬性和方法主要有下面兩點。 1DatabaseName屬性 DatabaseName屬性用來指定當(dāng)前使用的數(shù)據(jù)庫。在程序的設(shè)計階段,可在Object Inspector中進(jìn)行設(shè)置,通常只要在如圖5-6所示的組合框中選擇一個已定義的數(shù)據(jù)庫別名即可。此外,DatabaseName 也可以在程序運行時動態(tài)設(shè)置。如果沒有設(shè)置過數(shù)據(jù)庫別名,那么也可以對DatabaseName屬性輸入數(shù)據(jù)表文件所在目錄的路徑。例如,當(dāng)數(shù)據(jù)表文件與應(yīng)用程序項目在同一目錄下時,只要對DatabaseNa
18、me屬性輸入“.”即可。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 圖5-6 選擇數(shù)據(jù)庫 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 2TableName屬性 TableName屬性用來指定數(shù)據(jù)表的名稱,在設(shè)置TableName的屬性值之前,應(yīng)該首先設(shè)置DatabaseName屬性的值。如果DatabaseName屬性的值是在設(shè)計階段指定的,則可通過選擇下拉列表框中有效表名來指定TableName。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.3.2 打開和關(guān)閉數(shù)據(jù)表 打開和關(guān)閉數(shù)據(jù)表的有關(guān)屬性和方法主要有下面三點。 1Active屬性 如果Active屬性為t
19、rue,相當(dāng)于調(diào)用Open方法打開數(shù)據(jù)集,使數(shù)據(jù)集處于Browse狀態(tài)。如果設(shè)置為false,相當(dāng)于調(diào)用Close方法關(guān)閉數(shù)據(jù)集。在程序的運行階段,在設(shè)置DatabaseName 的值之前,必須首先將Active屬性的值設(shè)置為false,然后可設(shè)置DatabaseName的值,最后再打開該數(shù)據(jù)集。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 2Open方法 Open方法用于打開數(shù)據(jù)集,使它處于Browse狀態(tài),相當(dāng)于把Active屬性設(shè)置為true。 3Close方法 Close方法用于關(guān)閉數(shù)據(jù)集,使它處于非活動狀態(tài),相當(dāng)于把Active屬性設(shè)置為false。第第5 5章章 數(shù)據(jù)庫應(yīng)用
20、程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.3.3 瀏覽記錄 瀏覽記錄的有關(guān)屬性和方法主要有下面七點。 1Bof屬性 Bof屬性為只讀。如果當(dāng)前記錄是數(shù)據(jù)集中的第一條記錄,Bof屬性返回true,否則返回false。當(dāng)程序剛打開一個非空的數(shù)據(jù)集或調(diào)用了First過程時,Bof為true。 2Eof屬性 Eof屬性為只讀。如果當(dāng)前記錄是數(shù)據(jù)集中的最后一條記錄,Eof屬性返回true,否則返回false。當(dāng)程序打開一個空的數(shù)據(jù)集或調(diào)用了Last過程時,Eof為true。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 3RecordCount屬性 RecordCount只讀屬性返回數(shù)據(jù)集中的記錄數(shù)。值得注
21、意的是:RecordCount屬性返回的記錄數(shù)與數(shù)據(jù)物理存儲的記錄數(shù)可能不同,因為有可能使用了過濾。 4First、Last、Next和Prior方法 First、Last、Next和Prior方法分別將數(shù)據(jù)集在過濾范圍內(nèi)的第一條記錄、最后一條記錄、下一條記錄和上一條記錄設(shè)置為當(dāng)前記錄。 5IsEmpty方法 如果數(shù)據(jù)集是空的,IsEmpty函數(shù)就返回true。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 6MoveBy方法 MoveBy方法用于移動當(dāng)前記錄。例如,MoveBy(-2)將位于當(dāng)前位置前面的第二條記錄變成當(dāng)前記錄,MoveBy(3) 將位于當(dāng)前位置后面的第三條記錄變成當(dāng)前
22、記錄。 7Refresh方法 當(dāng)使用數(shù)據(jù)控制控件如DBGrid顯示數(shù)據(jù)時,可以調(diào)用Refresh方法刷新數(shù)據(jù),使顯示的數(shù)據(jù)總是數(shù)據(jù)集中最新的。當(dāng)處于網(wǎng)絡(luò)環(huán)境時,該方法尤其重要。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.3.4 編輯數(shù)據(jù) 編輯數(shù)據(jù)的有關(guān)屬性和方法主要有下面六點。 1CanModify屬性 CanModify屬性僅可在運行期間使用,且為只讀。如果CanModify屬性為false,表示不能修改(可能是由于多用戶操作時數(shù)據(jù)集已被其他用戶加鎖等原因)。不過即使CanModify屬性返回true,也并不意味著數(shù)據(jù)集一定能修改,還要取決于其它因素。第第5 5章章 數(shù)據(jù)庫應(yīng)用
23、程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 2Modified屬性 Modified屬性是運行期間只讀的屬性,如果返回true表示當(dāng)前記錄某個字段被修改了但還沒有被寫到數(shù)據(jù)集中,當(dāng)程序調(diào)用Cancel或Post后,這個屬性將變?yōu)閒alse。 3Edit方法 調(diào)用Edit方法使數(shù)據(jù)集處于編輯狀態(tài)。 4Insert方法 為了在表中插入一個記錄,首先應(yīng)將記錄指針移到表內(nèi)適當(dāng)位置,接著用Insert方法建立一條空記錄,然后填充記錄的各字段,最后將記錄寫入數(shù)據(jù)庫表中。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 例如,下面的一段代碼是調(diào)用Insert方法插入一條記錄:void_fastcall TForm1:B
24、uttonInsertClick (TObject *Sender)Table1-First ( );Table1-MoveBy (5);Table1-Insert ( );Table1-FieldByName (Name)-Value = NoBody;Table1-FieldByName (Capital)-Value = NoWhere;Table1-FieldByName (Continent)-Value = Imagination;Table1-FieldByName (Area)-Value = 0;Table1-FieldByName (Population)-Value =
25、0;Table1-Post ( );第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5Append方法Append方法的用法類似Insert,但總是將空記錄插入到表的尾部。6Delete方法刪除記錄可采用Delete方法,程序示例如下:void_fastcall TForm1:ButtonDeleteClick(TObject *Sender) if (MessageDlg (確實要刪除這條記錄?, mtConfirmation, TMsgDlgButtons ()mbYesDelete ( );第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.3.5 訪問字段 訪問字段的有關(guān)屬
26、性和方法主要有下面三點。 1FieldCount屬性 FieldCount屬性在運行期間為只讀,返回數(shù)據(jù)集中字段(列)的個數(shù)。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 2Fields屬性 Fields屬性是由數(shù)據(jù)集中所有字段構(gòu)成的數(shù)組,每個數(shù)組元素都是一個TField對象。例如,以下代碼將Tabel1數(shù)據(jù)表中所有字段的名稱加入到一個列表框中顯示: for (int i=0; iFieldCount; i+) ListBox1-Items-Add (Table1-Fieldsi-FieldName); 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 3FieldByName方法
27、 FieldByName方法非常重要,主要用于通過字段名訪問當(dāng)前記錄的某個字段,使用時應(yīng)確保數(shù)據(jù)集中有這個字段,否則將觸發(fā)一個異常。當(dāng)不能確定數(shù)據(jù)集中是否含有某個字段時,可調(diào)用FindField方法進(jìn)行檢測。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.3.6 過濾操作 過濾數(shù)據(jù)集是常用的操作之一,主要適用于本地數(shù)據(jù)庫。而客戶/服務(wù)器數(shù)據(jù)庫主要通過SQL查詢來實現(xiàn)與本地數(shù)據(jù)庫過濾相同的功能。 有時數(shù)據(jù)集中的記錄較多,而其中有一些不是你所需要的部分,此時就可以進(jìn)行過濾。比如存儲學(xué)生信息的數(shù)據(jù)庫表,其中包含學(xué)生的學(xué)號、姓名、性別、年齡、籍貫等信息,如果只需要女同學(xué)的信息,就可以按照性別
28、進(jìn)行過濾,從而得到需要的信息。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) Table組件可通過Filter屬性進(jìn)行過濾。可以在設(shè)計時在Object Inspector中輸入Filter屬性,也可以在程序運行時將字符串值賦給Table組件的Filter屬性。 注意:僅當(dāng)Filtered屬性設(shè)置為true時過濾有效。 基本過濾語句的格式如下: FieldName ConstString; 其中,F(xiàn)ieldName表示過濾的字段名,op是用于過濾條件的操作符,常見的操作符如表5-1所示,ConstString一般代表一個常量,如語句“性別=女”表示顯示所有女同學(xué)的信息。第第5 5章章 數(shù)據(jù)
29、庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 其中的邏輯操作符用來連接多個基本過濾語句,例如:CITY=New York AND STATE=Ca;在過濾語句中,字段名和邏輯操作符一般與大小寫無關(guān)。如果字段名內(nèi)含有空格如City Name,則使用該字段名時,應(yīng)使用“ ”,例如: City Name=Now York and state=Ca;第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 表5-1 常見的過濾操作符操 作 符含 義大于=等于不等于=大于或等于( )指定復(fù)合表達(dá)式的求值順序放在包含空格的字段名兩邊and、or、not邏輯操作符:與、或、非第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序
30、開發(fā) 對于搜索文本的情況,F(xiàn)ilterOptions屬性可決定搜索時是否考慮大小寫。啟用部分比較時,指定STATE = M* 之類的過濾器可以使記錄集中包含STATE字段以M開頭的所有記錄。 值得注意的是,過濾操作符與一般C+編程中使用的邏輯操作符是有一些區(qū)別的。如“不等于”過濾操作符為,而相應(yīng)的C+操作符為!=。另外,字符串在過濾操作時一般是放在單引號中的,而C+字符串放在雙引號中。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.3.7 查找記錄 查找記錄的方法有很多,這里所講的方法適用于TDataSet所有的派生類,而不僅僅是Table組件。但對于客戶/服務(wù)器數(shù)據(jù)庫,查找通常是通
31、過SQL查詢進(jìn)行的。 Table組件主要使用FindFirst、FindNext、FindPrior和FindLast方法查找記錄,這些方法適合于搜索過濾的記錄集。另一種搜索方法是使用FindKey和GotoKey以及GotoNearest和FindNearest。這些方法只能對已設(shè)置為Key的字段進(jìn)行查找。 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 此外,還可以使用Locate和Lookup方法搜索數(shù)據(jù)表。其優(yōu)點是不必過濾數(shù)據(jù)集也不需要使用鍵就能搜索。其中Locate還能自動優(yōu)化搜索,如果數(shù)據(jù)表有索引,則Locate使用該索引提高搜索速度。 使用GotoKey方法查詢數(shù)據(jù)表中記錄
32、的步驟如下:第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (1) 確保要查找的字段是關(guān)鍵字或已經(jīng)為它定義了輔助索引,并且已在Table組件的IndexName或IndexFieldNames屬性中指定索引或關(guān)鍵字。IndexName和IndexFieldNames用法稍有不同,可以在設(shè)計時或運行時設(shè)置這兩個屬性,但不能同時使用這兩個屬性。 (2) 通過調(diào)用SetKey方法,把Table組件設(shè)置成查找模式。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (3) 把查找值送進(jìn)被查找字段的查找緩沖區(qū)。 (4) 調(diào)用Table組件的GotoKey方法,如果查找成功,GotoKey返回tr
33、ue值,表中記錄指針指向找到的記錄。如果查找失敗,GotoKey返回false值,表中記錄指針不發(fā)生變化。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 【例5-2】 在窗體上放入Table、DataSource、DBGrid組件各一個。指定Table1的DatabaseName屬性為BCDEMOS,TableName屬性為Customer.db,Active屬性為true;DataSource1的DataSet屬性為Table1;DBGrid1的DataSource屬性為DataSource1。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 再往窗體上放入一個TEdit、兩個TL
34、abel和兩個TButton控件。當(dāng)用戶在Edit1控件輸入客戶編碼并單擊查找按鈕時,程序便開始在Customer表中查找該客戶號。如果查找成功,則在Label2上顯示“查找成功”,該客戶的電話號碼就會顯示在標(biāo)簽Label1上,并且在數(shù)據(jù)表柵格中加亮顯示該記錄。程序運行時如圖5-7所示。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 范例中“查找”按鈕的OnClick事件代碼如下:void_fastcall TForm1:Button1Click (TObject *Sender)Table1-IndexFieldNames = CustNo;Table1-SetKey ( );Tabl
35、e1-FieldByName (CustNo)-AsString = Edit1-Text;if (Table1-GotoKey ( ) Label2-Caption = 查找成功;第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) Label1-Caption = Table1-FieldByName (Phone)-AsString; else Label2-Caption = 查找失敗; 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 圖5-7 使用GotoKey查找第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 【例5-3】 先建立一個職工情況表ZG.db,其中一個字段為
36、XM(姓名)。在程序窗體上放入Table1、DataSource、DBGrid組件各一個并使它們與ZG表連接。在Form1上再放上一個編輯框和一個“查找”按鈕,當(dāng)點擊按鈕時,程序在ZG表中查找XM與編輯框中內(nèi)容相一致的第一條記錄并在DBGrid內(nèi)顯示。 下面是程序中“查找”按鈕的OnClick事件代碼:第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) void_fastcall TForm1:Button1Click (TObject *Sender)Table1-Filter = XM =+Edit1-Text+;if (! Table1-FindFirst ( ) ShowMessag
37、e ( 查找失??!); 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 最后介紹一下使用Locate進(jìn)行查找的例子,Locate方法的函數(shù)原型為: bool_fastcall Locate (AnsiString KeyFields, Variant &KeyValues, TLocateOptions Options); 其中的Options參數(shù)用于指定查找方式,它是TlocateOption的集合,集合元素可取值為loCaseInsensitive、loPartialKey,分別表示不區(qū)分大小寫和允許字符串部分匹配。 下面舉一個簡單的例子。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)
38、據(jù)庫應(yīng)用程序開發(fā) 【例5-4】 類似例5-2,將數(shù)據(jù)庫組件與Customer.db表連接,在編輯框中輸入客戶號碼后點擊“查找”按鈕開始查找。程序中需要編寫如下事件代碼: void_fastcall TForm1:Button1Click (TObject *Sender) TLocateOptions Opts; Opts.Clear ( ); Opts Locate (CustNo, Edit1-Text, Opts) ShowMessage (查找成功);else ShowMessage (未找到!);Locate 可以按多個列組合的條件搜索,但語法較復(fù)雜,下面舉一個例子。第第5 5章章
39、數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 【例5-5】 我們稍微修改上面的例子,在Edit1中輸入公司(Company),窗體上再增加一個Edit2輸入地址(Addr1)。編寫“查找”按鈕的OnClick代碼為: void_fastcall TForm1:Button1Click (TObject *Sender) TLocateOptions Opts; Variant locvalues 2; Opts.Clear ( ); Opts Text);locvalues1 = Variant (Edit2-Text);if (Table1-Locate (Company ; Addr1, VarA
40、rrayOf (locvalues, 1), Opts) ShowMessage (查找成功!);第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 運行該程序,就能按公司和地址兩個字段的值查找符合條件的記錄,如圖5-8所示。 程序中,Opts loPartialKey 指定查找方式為部分匹配,當(dāng)然也可以使用Opts loCaseInsensitive 制作步驟 (1) 建立本范例中使用的數(shù)據(jù)表“職工.db”。圖5-13為在Database DeskTop中設(shè)計該表的結(jié)構(gòu),我們看到在該表中有姓名、工號、性別、工資、職務(wù)等字段。為方便起見,我們將該表與本例中的程序存放在同一個文件夾內(nèi)。第第5
41、5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 圖5-12 數(shù)據(jù)表單程序運行時第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 圖5-13 職工.db表的結(jié)構(gòu)第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (2) 在Form1窗體中加入數(shù)據(jù)訪問組件Tabe1和DataSource1并使它們與數(shù)據(jù)表連接。我們將Table1的DatabaseName 設(shè)置為“.”,將TableName設(shè)置為“職工.db”;將DataSource1的DataSet設(shè)置為Table1。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (3) 在窗體上放置五個數(shù)據(jù)控制組件DBEdit1、DBEdit2、DB
42、Edit3、DBRadioGroup1和DBComBoBox1。 它們的DataSource屬性都設(shè)置為DataSource1,DataField屬性分別設(shè)置為“姓名”、“工號”、“工資”、“性別”和“職務(wù)”。對DBRadioGroup1還要設(shè)置Columns屬性為2,設(shè)置Items為“男”、“女”。對DBComBoBox1,設(shè)置Items為“經(jīng)理”、“主任”、“科長”、“資料員”和“員工”等。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (4) 為了對表單上需填寫的數(shù)據(jù)進(jìn)行說明,我們還要在窗體內(nèi)放上五個Label,它們的Caption屬性分別為“姓名”、“工號”、“性別”、“工資”和
43、“職務(wù)”。 (5) 往窗體上放一個Panel1控件,將它的Align屬性設(shè)置為alRight。再往Panel1上放八個Button按鈕,它們的Caption分別為“First”、“Prior”、“Next”、“Last”、“Insert”、“Delete”、“Post”和“Quit”等。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 以下是程序中窗體和按鈕事件的處理代碼: void_fastcall TForm1:Button1Click (TObject *Sender)Table1-First ( );Button1-Enabled = false;Button2-Enabled =
44、 false;Button3-Enabled = true;Button4-Enabled = true;/-第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) void_fastcall TForm1:Button2Click (TObject *Sender)Table1-Prior ( );Button3-Enabled = true;Button4-Enabled = true;if (Table1-Bof) Button1-Enabled = false; Button2-Enabled = false; /-第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) void_fast
45、call TForm1:Button3Click (TObject *Sender)Table1-Next ( );Button1-Enabled = true;Button2-Enabled = true;if (Table1-Eof) Button3-Enabled = false; Button4-Enabled = false; /-第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) void_fastcall TForm1:Button4Click (TObject *Sender)Table1-Last ( );Button1-Enabled = true;Button2-Ena
46、bled = true;Button3-Enabled = false;Button4-Enabled = false;/-第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) void_fastcall TForm1:Button5Click (TObject *Sender)Table1-Insert ( );/-void_fastcall TForm1:Button6Click (TObject *Sender)Table1-Delete ( );/-第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) void_fastcall TForm1:Button7Click (TObject
47、 *Sender)Table1-Edit ( );Table1-Post ( );/-void_fastcall TForm1:Button8Click (TObject *Sender)Table1-Close ( );Close ( );第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 【評析】 (1) 程序中各個按鈕的功能也可利用DBNavigator組件實現(xiàn),但使用DBNavigaor難以擴(kuò)充或修改其功能,也不能改變其外觀。所以,對較復(fù)雜的數(shù)據(jù)表單程序必須編寫事件代碼,本范例中的代碼有一定的參考價值。 (2) 數(shù)據(jù)輸入或修改是在數(shù)據(jù)控制組件中進(jìn)行的,一般要在執(zhí)行“Post”方法時才
48、將改變后的數(shù)據(jù)寫入數(shù)據(jù)表。但對于本地數(shù)據(jù)集,BDE在執(zhí)行“Next”、“Prior”等方法之前會自動調(diào)用Post。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (3) 本例僅具有最基本的數(shù)據(jù)表單處理功能,存在諸多不完善。如刪除記錄時無任何限制,也沒有提供警告信息;程序關(guān)閉時,若數(shù)據(jù)已經(jīng)過修改但還沒有執(zhí)行Post,一般應(yīng)該有提示信息,但程序中忽略了。讀者在實際編寫數(shù)據(jù)庫應(yīng)用程序時要注意這些方面的完善。 (4) 本例一般只能在單用戶環(huán)境下運行,要使程序能在客戶/服務(wù)器環(huán)境下正常工作,還要考慮更多的因素,并為程序提供異常保護(hù)。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.5 TQ
49、uery組件的使用組件的使用 結(jié)構(gòu)化查詢語言(SQL,Structured Query Language)具有功能豐富、語言簡潔、使用靈活方便等特點,在計算機(jī)用戶中廣泛使用,已經(jīng)成為數(shù)據(jù)庫語言的國際標(biāo)準(zhǔn)。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 目前大多數(shù)運行于服務(wù)器上的數(shù)據(jù)庫管理系統(tǒng)都支持SQL,因此使用SQL有利于開發(fā)客戶/服務(wù)器結(jié)構(gòu)的數(shù)據(jù)庫應(yīng)用程序。雖然SQL已經(jīng)成為標(biāo)準(zhǔn),但是很多數(shù)據(jù)庫廠商對SQL進(jìn)行了不同程度的擴(kuò)展。如果在應(yīng)用程序中使用了非標(biāo)準(zhǔn)的SQL,會給系統(tǒng)的移植帶來困難。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.5.1 結(jié)構(gòu)化查詢語言SQL 我們假定
50、讀者有一定的SQL或關(guān)系數(shù)據(jù)庫理論的基礎(chǔ),這里僅簡單介紹SQL的最基本語句。這些語句是:SELECT、INSERT、UPDATE、DELETE、CREATE和DROP。 1SELECT語句 SELECT語句是SQL中使用最頻繁的語句。在SELECT中可以查詢指定數(shù)據(jù)表中的指定字段值,并可將這些指定的字段值組成的記錄放在一個動態(tài)集或表中作為返回結(jié)果,以便用戶對其進(jìn)行處理。SELECT語句最基本的格式如下:第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) SELECT FROM WHERE子句 GROUP BY子句 HAVING子句 ORDER BY子句第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫
51、應(yīng)用程序開發(fā) 說明: (1) “字段列表”指定需要輸出的字段或表達(dá)式,這些字段一般應(yīng)來自由FROM指定的表。當(dāng)字段名中間有空格時,必須將該字段名用方括號括起來。如果要查詢表中所有的字段值,可以使用通配符“*”取代字段列表。 (2) WHERE子句可以對表記錄指定過濾條件。 (3) GROUP BY子句是針對記錄分組的,輸出的每一條記錄代表原始數(shù)據(jù)中的一個組,在輸出中可以按組進(jìn)行統(tǒng)計。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (4) HAVING子句僅在分組時有意義,它對已產(chǎn)生的組進(jìn)行過濾。 (5) ORDER BY子句對輸出結(jié)果指定排序方式。 (6) 查詢的結(jié)果可生成臨時表。 (7
52、) SELECT語句中還可以使用JOIN子句連接多個表作為輸入數(shù)據(jù)。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 2INSERT語句 INSERT語句用于將一個記錄或一組記錄添加到指定的表中。它的格式如下: INSERT INTO VALUES( , .) 例如:INSERT INTO Authors VALUES (18188, Mike, 1999) 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 說明: (1) 當(dāng)需要插入表中所有的字段時,“字段列表”可以省略; (2) 應(yīng)保證插入數(shù)據(jù)的順序、數(shù)據(jù)類型和項數(shù)要與字段列表中一致; (3) 主索引字段應(yīng)保證不與表中已有的字段值重
53、復(fù)且本身也不為空。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 3UPDATE語句 UPDATE語句用于更新數(shù)據(jù)庫中的數(shù)據(jù),其格式如下: UPDATE SET WHERE UPDATE語句的作用是對表中滿足邏輯表達(dá)式的記錄更新指定的字段。其中,數(shù)據(jù)設(shè)置表達(dá)式的格式為=。當(dāng)有多個表達(dá)式時,用逗號進(jìn)行分割。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 例如: UPDATE Authors SET Authors.Author = Scott, John WHERE Authors.Au_ID = 888第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 4CREATE語句 CRE
54、ATE語句用于創(chuàng)建表或索引。用于創(chuàng)建表時,應(yīng)同時指定表中字段的名稱、數(shù)據(jù)類型和長度。語句格式如下: CREATE TABLE ( , .)第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5DELETE語句 DELETE語句用于刪除表中滿足條件的記錄,其格式如下: DELETE FROM WHERE DELETE語句的作用是刪除表中滿足邏輯表達(dá)式的記錄, 如果省略WHERE子句,那么刪除表中所有記錄。 例如: DELETE FROM Authors WHERE Year Born1900第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 6DROP語句 DROP語句主要用于刪除數(shù)據(jù)庫中的
55、表,其格式如下: DROP TABLE 用DROP語句刪除表與用DELETE刪除表中的記錄是不同的,DROP語句刪除整個表及其相關(guān)的索引。而使用DELETE語句,即使刪除表中所有的記錄,該表及其相關(guān)索引也依然存在,只不過表的內(nèi)容被刪除了。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 1聯(lián)機(jī)交互式 執(zhí)行 DatabaseExplore菜單命令打開“SQL Explorer”,在左面的窗口中選擇某個數(shù)據(jù)庫別名,打開它的Tables節(jié)點。在右面進(jìn)入“Enter SQL”頁輸入SQL命令,然后點擊按 鈕即可運行該SQL語句,右下方的窗口則顯示查詢的結(jié)果,如圖5-14所示。 2嵌入式 在C+Bu
56、ilder中,可以使用TQuery類組件的SQL屬性或Open及ExecSQL方法中嵌入SQL查詢語句,具體的使用將在后面詳細(xì)介紹。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 圖5-14 在SQL Explorer中執(zhí)行SQL命令 第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.5.2 TQuery組件的屬性和方法 本節(jié)我們將介紹如何使用TQuery類組件,以及如何通過SQL命令在一個或多個數(shù)據(jù)表中檢索、插入、更新和刪除數(shù)據(jù)。 Query組件位于組件面板的BDE頁上。TQuery 組件在SQL編程中占據(jù)了十分重要的位置,它實現(xiàn)了BCB對SQL語言的支持。TQuery組件支持
57、SQL語言,因而具備了強(qiáng)大的關(guān)系查詢能力,TQuery組件可以訪問的數(shù)據(jù)庫有:第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) (1) Paradox或者Dbase數(shù)據(jù)庫,這時使用的是本地SQL,支持SQL-92標(biāo)準(zhǔn)語法。 (2) 本地InterBase Server數(shù)據(jù)庫,這時使用的是InterBase引擎,支持SQL-92標(biāo)準(zhǔn)語法及擴(kuò)展語法。 (3) 遠(yuǎn)程數(shù)據(jù)庫服務(wù)器上的數(shù)據(jù)庫,例如Oracle,Sybase、MS-SQL Server、Informix、DB2和InterBase。必須安裝相應(yīng)的SQL Link驅(qū)動器來訪問不同的遠(yuǎn)程服務(wù)器,只要是服務(wù)器支持的SQL語法我們都可以使用。
58、 TQuery類除了繼承其父類TDBDataSet的成員外,還有許多自己的屬性和方法。表5-2和表5-3列舉了它的一些重要屬性和方法。第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 表5-2 Query組件的重要屬性 屬 性說 明Constrained表示對于Paradox和dBASE數(shù)據(jù)表格的更新和插入操作是否允許,條件是根據(jù)SELECT語句產(chǎn)生的結(jié)果DataSource指定數(shù)據(jù)源Local只讀屬性。表示查詢涉及的表格是本地的Paradox或dBASE表格還是遠(yuǎn)程服務(wù)器上的SQL表格。如果值為TRUE,則只能訪問Paradox或dBASE表格ParamCheck指定如果SQL屬性在運行
59、時發(fā)生改變,查詢的參數(shù)清單是否更新第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) ParamCount只讀屬性。表示查詢參數(shù)的個數(shù)ParamsSQL查詢的參數(shù)Prepared表示執(zhí)行查詢是否準(zhǔn)備好RequestLive當(dāng)查詢執(zhí)行時,表明應(yīng)用程序是否從Borland數(shù)據(jù)庫引擎(BDE)獲取活動結(jié)果集。缺省值為FALSE,表示查詢總是返回只讀結(jié)果集RowsAffected只讀屬性。決定最近一次查詢操作被更新或刪除的行數(shù),如果值為-1則表示沒有更新或刪除任何行SQL包含執(zhí)行查詢的SQL語句文本。一次只能包含一條完整的SQL語句。一般不容許多個查詢語句,除非特別的服務(wù)器支持SQLBinary該屬
60、性是無法訪問的。指向代表SQL查詢語句或結(jié)果集的二進(jìn)制數(shù)據(jù)串Text指向傳給Borland數(shù)據(jù)庫引擎(BDE)的實際文本第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 表5-3 Query組件的重要方法 方 法說 明ExecSQL執(zhí)行一次SQL命令GetDetailLinkFields獲得鏈接的主細(xì)字段清單GetProviderAttributes列出數(shù)據(jù)集的語言驅(qū)動程序、本地表名和只讀信息ParamByName返回特定參數(shù)的信息Prepare向服務(wù)器發(fā)送查詢準(zhǔn)備指令,以便在查詢前進(jìn)行優(yōu)化UnPrepare釋放分配給前面準(zhǔn)備好的查詢的資源第第5 5章章 數(shù)據(jù)庫應(yīng)用程序開發(fā)數(shù)據(jù)庫應(yīng)用程序開發(fā) 5.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度活動策劃合作協(xié)議
- 地球守護(hù)行動
- 創(chuàng)新思維引領(lǐng)未來
- 高中地理新視角
- 主持人手部護(hù)理方法
- 2025天福大酒店女職工權(quán)益保護(hù)專項集體合同
- 2025網(wǎng)絡(luò)安全人員勞動合同
- 醫(yī)療風(fēng)險面試題目及答案
- 行政車輛安全培訓(xùn)標(biāo)準(zhǔn)化體系
- 2025至2030年中國快潔起蠟水行業(yè)投資前景及策略咨詢報告
- 2025年公路水運工程重大事故隱患判定標(biāo)準(zhǔn)深度解析
- 2024年高考真題-化學(xué)(天津卷) 含解析
- 2024年可行性研究報告投資估算及財務(wù)分析全套計算表格(含附表-帶只更改標(biāo)紅部分-操作簡單)
- 小學(xué)數(shù)學(xué)命題思考
- 戰(zhàn)略管理教學(xué)ppt課件(完整版)
- 砌筑擋土墻搭設(shè)腳手架專項方案設(shè)計
- 太平歌詞唱詞
- 長篇情感電臺讀文(10篇)精選
- 辦公樓裝飾拆除工程施工方案
- DB35_T 169-2022 森林立地分類與立地質(zhì)量等級
- 動火作業(yè)危害識別及控制措施清單
評論
0/150
提交評論