?? 036.htm
字號:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>—DELPHI基礎教程—第十五章 數據訪問部件的應用及編程(一)</TITLE><META NAME="keywords" CONTENT=" DELPHI基礎教程 第十五章 數據訪問部件的應用及編程(一)"><META NAME="description" CONTENT=" - DELPHI基礎教程 - 第十五章 數據訪問部件的應用及編程(一)"><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="037.htm"><FONT style="FONT-SIZE: 9pt">后一頁</font></A><BR><A HREF="035.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="隸書">第十五章 數據訪問部件的應用及編程(一)</FONT></B></center><hr width="94%"><p> 在這一章里我們主要介紹Delphi的數據訪問部件的層次結構、多部件之間的關系、部件的屬性、方法、事件以及各部件的應用。這些部件包括:</p><p>● TSession部件</p><p>● 數據集部件(TTable和TQuery)</p><p>● TDatasource部件</p><p>● 字段對象TField</p><p>● 字段編輯器的使用</p><p>● TReport部件和TBatchMove部件</p><p>我們對這些部件的屬性、方法和事件進行一般性的描述,讀者在實際使用Delphi開發應用程序時,還可以通過聯機幫助獲得有關部件更詳細的信息。 </p><p align="center">15.1 Delphi數據訪問部件的層次結構 </p><p> Delphi提供了強大的開發數據庫應用程序的能力,它給用戶提供了大量的數據訪問部件。以方便程序設計人員開發數據庫應用程序。這些部件中,有些部件繼承了另一些部件的屬性、方法和事件,也就是說多部件之間存在著繼承和被繼承的關系,各部件的這種關聯便構成了一個層次結構 </p><p>圖15.1 Delphi數據訪問部件的層次結構 </p><p>TSession是全局性的部件,在應用程序運行時,它自動地建立,在設計階段和運行過程中它是一個不可見的部件。</p><p>TDatabase部件是為開發客戶/服務器數據庫應用程序時,設置登錄的數據庫的有關參數的,它在數據訪問部件頁上。</p><p>TDataset部件是不可見的,TTable和TQuery部件是由它派生而來的,這兩個部件一般被稱為數據集部件,它們在數據訪問部件頁上。</p><p>TDatasource部件是連接數據集部件和數據瀏覽部件的橋梁,它在數據訪問部件頁上。</p><p>TFields部件對應于數據庫表中的實際字段,它既可以在應用程序的運行過程中動態地生成也可以在程序設計階段用字段編輯器創建。它是不可見的部件,在程序中我們可以通過TField部件來訪問數據庫記錄的各個字段值。 </p><p align="center">15.2 Tsession部件及其應用 </p><p>TSession部件一般用得較少,但它對于一些特殊的應用是很有用的,在每一個數據庫應用程序運行時Delphi自動地創建一個TSession部件。程序設計人既不能看見該部件也不能顯示地創建一個TSession部件,但是我們可以在應用程序中全局性地使用TSession部件的屬性、方法。 </p><p>15.2.1 TSession部件的重要屬性及作用 </p><p>TSession部件的許多重要屬性是用于控制數據庫應用程序與數據庫的連接的,在一個應用程序中,可以全局性地設置TSession的有關屬性值,對與之相連接的磁盤上的數據庫進行控制。TSession部件主要有下列屬性:</p><p>Database屬性:是TSession中可以進行連接的所有數據庫的數據庫名字列表,這些數據庫的名字常常是實際數據庫的別名,包括數據庫的路徑、用戶名、用戶登錄口令等參數。</p><p>DatabaseCount屬性:是TSession中可以進行連接的所有數據庫的數量,它是一個整數。</p><p>KeepCounnections屬性:是一個布爾型屬性,用它說明應用程序是否保持與一個非活動數據庫的連接。因為對于一個數據庫,當該數據庫中沒有相應的數據集部件(TTable或TQuery)被打開時,該數據庫將自動地變成非活動的數據庫。缺省情況下,KeePcounnections的值是True,就是說應用程序總是保持著與數據庫的連接,即使數據庫變成了非活動的數據庫時,也是如此。如果將KeepConnections屬性設置成False,那么當數據庫由活動狀態變成非活動狀態時,應用程序與該數據庫的連接也隨之中斷。</p><p>NetFileDir屬性:說明BDE網絡控制文件的路徑名。</p><p>PrivateDir屬性:說明存取臨時文件的路徑名。 </p><p>15.2.2 TSession部件的方法: </p><p>TSession部件中的大部分方法是用于向用戶提供與應用程序相連接的數據庫的信息,如數據庫的名字及別名,數據庫中的表名以及數據庫引擎BDE的有關參數等,在設計數據庫應用程序時,想要獲取有關數據庫的信息,調用TSession部件的下列方法,將會大大簡化程序的設計。</p><p>GetAliasNames方法:調用該方法,我們可以獲得數據庫引擎BDE中定義的數據庫別名。</p><p>GetAliasParams方法:該方法主要用于獲取我們在BDE中定義數據庫別名時所說明的參數值,如BDE所在的目錄路徑以及實際名稱等。</p><p>GetDatabaseNames方法:調用該方法可以幫助我們獲得當前應用程序可以進行連接的所有數據庫的名字,數據庫的名字是用戶使用BDE工具定義的實際數據庫的別名。</p><p>GetDriverNames方法:數據庫引擎BDE可以與多種數據庫管理系統相連接,如客戶/服務器數據庫管理系統Oracle、Sybase以及本地數據庫管理系統dBASE,Paradox等,BDE與每一種數據庫管理系統進行連接時,都有相應的驅動程序,而且這些驅動程序都可以選擇地安裝。通過調用GetDriverNames方法。我們可以獲得當前BDE安裝的數據庫驅動程序的名字。</p><p>GetDriverParams方法:BDE的數據庫驅動程序中包含著多個參數,如支持的民族語言、DBMS的版本號、文件塊大小等,對于服務器上的DBMS,還有數據庫服務器的名字等等。</p><p>GetTableNames方法:因為每一個數據庫都是由多個數據庫表組成的,我們通過說明數據庫名,然后調用GetTableNames方法,便可以獲得該數據庫中全部的數據庫表的名字。</p><p>上述這些方法在調用時都需要一個字符串列表作為參數,而且都返回一個字符串列表的值。</p><p>TSession部件還有一個叫DropConnections的方法用于控制應用程序與數據庫的連接,當調用DropConnections方法時,應用程序與所有的數據庫的連接將會切斷。 </p><p>15.2.3 TSession部件應用舉例 </p><p>例15.1:我們創建一個應用程序,通過調用TSession有關的方法獲取當前應用程序可以進行連接的數據庫的名字以及獲取其中任意一個數據庫中的全部數據庫表的名字。 </p><p> 通過TSession部件獲取數據庫的有關信息 </p><p>窗體中主要使用了兩個列表框,其中列表框DatabaselistBox用于顯示數據庫的名字,列表框TablelistBox用于顯示數據庫中的表名。程序運行完后數據庫的名字顯示在DatabaselistBox列表框中,當用戶單擊DatabaselistBox列表框中的數據庫名時,該數據庫全部的數據庫表的名字將會顯示在TablelistBox列表框中。有關的程序代碼如下: </p><p>程序清單15.1</p><p>unit unit31; </p><p>interface </p><p>uses</p><p>SysUtils, Windows, Messages, Classes, Graphics, Controls,</p><p>Forms, Dialogs, StdCtrls, DB, DBTables, Buttons, ComCtrls, Tabnotbk; </p><p>type </p><p>TQueryForm = class(TForm)</p><p>BitBtn1: TBitBtn;</p><p>DataSource1: TDataSource;</p><p>Table1: TTable;</p><p>GroupBox1: TGroupBox;</p><p>CheckBox1: TCheckBox;</p><p>CheckBox2: TCheckBox;</p><p>PageControl1: TPageControl;</p><p>TabSheet1: TTabSheet;</p><p>Label1: TLabel;</p><p>Label2: TLabel;</p><p>Label3: TLabel;</p><p>ListBox1: TListBox;</p><p>ListBox2: TListBox;</p><p>ListBox3: TListBox;</p><p>TabSheet2: TTabSheet;</p><p>Memo1: TMemo;</p><p>procedure FormCreate(Sender: TObject);</p><p>procedure ListBox1Click(Sender: TObject);</p><p>procedure ListBox2Click(Sender: TObject);</p><p>end;</p><p> </p><p>var</p><p>QueryForm: TQueryForm;</p><p> </p><p>implementation</p><p> </p><p>{$R *.DFM}</p><p> </p><p>uses RSLTFORM;</p><p> </p><p>procedure TQueryForm.FormCreate(Sender: TObject);</p><p>begin</p><p>Screen.Cursor := crHourglass;</p><p> </p><p>{ Populate the alias list }</p><p> </p><p>with ListBox1 do</p><p>begin</p><p>Items.Clear;</p><p>Session.GetAliasNames(Items);</p><p>end;</p><p> </p><p>{ Make sure there are aliases defined }</p><p> </p><p>Screen.Cursor := crDefault;</p><p>if ListBox1.Items.Count < 1 then</p><p>MessageDlg( 'There are no database aliases currently defined. You ' +</p><p>'need at least one alias to use this demonstration.',</p><p>mtError, [mbOK], 0 );</p><p>end;</p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -