?? 036.htm
字號:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI基礎教程-->第十五章 數(shù)據(jù)訪問部件的應用及編程(一)</TITLE>
<META NAME="keywords" CONTENT=" DELPHI基礎教程 第十五章 數(shù)據(jù)訪問部件的應用及編程(一)">
<META NAME="description" CONTENT=" - DELPHI基礎教程 - 第十五章 數(shù)據(jù)訪問部件的應用及編程(一)">
<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" aLink=#9900ff link=#006699 vLink=#006699 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%" bgcolor="#e0e0e0"><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>
<A HREF="../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首頁</font></A><BR>
</strong>
</TD>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷體_GB2312">第十五章 數(shù)據(jù)訪問部件的應用及編程(一)</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p> 在這一章里我們主要介紹Delphi的數(shù)據(jù)訪問部件的層次結(jié)構(gòu)、
多部件之間的關系、部件的屬性、方法、事件以及各部件的應用。這些部件包括:</p>
<p>● TSession部件</p>
<p>● 數(shù)據(jù)集部件(TTable和TQuery)</p>
<p>● TDatasource部件</p>
<p>● 字段對象TField</p>
<p>● 字段編輯器的使用</p>
<p>● TReport部件和TBatchMove部件</p>
<p>我們對這些部件的屬性、方法和事件進行一般性的描述,讀者在實際使用Delphi開發(fā)應用程序時,還可以通過聯(lián)機幫助獲得有關部件更詳細的信息。 </p>
<p align="center">15.1 Delphi數(shù)據(jù)訪問部件的層次結(jié)構(gòu) </p>
<p> Delphi提供了強大的開發(fā)數(shù)據(jù)庫應用程序的能力,它給用戶提供了大量的數(shù)據(jù)訪問部件。以方便程序設計人員開發(fā)數(shù)據(jù)庫應用程序。這些部件中,有些部件繼承了另一些部件的屬性、方法和事件,也就是說多部件之間存在著繼承和被繼承的關系,各部件的這種關聯(lián)便構(gòu)成了一個層次結(jié)構(gòu) </p>
<p>圖15.1 Delphi數(shù)據(jù)訪問部件的層次結(jié)構(gòu) </p>
<p>TSession是全局性的部件,在應用程序運行時,它自動地建立,在設計階段和運行過程中它是一個不可見的部件。</p>
<p>TDatabase部件是為開發(fā)客戶/服務器數(shù)據(jù)庫應用程序時,設置登錄的數(shù)據(jù)庫的有關參數(shù)的,它在數(shù)據(jù)訪問部件頁上。</p>
<p>TDataset部件是不可見的,TTable和TQuery部件是由它派生而來的,這兩個部件一般被稱為數(shù)據(jù)集部件,它們在數(shù)據(jù)訪問部件頁上。</p>
<p>TDatasource部件是連接數(shù)據(jù)集部件和數(shù)據(jù)瀏覽部件的橋梁,它在數(shù)據(jù)訪問部件頁上。</p>
<p>TFields部件對應于數(shù)據(jù)庫表中的實際字段,它既可以在應用程序的運行過程中動態(tài)地生成也可以在程序設計階段用字段編輯器創(chuàng)建。它是不可見的部件,在程序中我們可以通過TField部件來訪問數(shù)據(jù)庫記錄的各個字段值。 </p>
<p align="center">15.2 Tsession部件及其應用 </p>
<p>TSession部件一般用得較少,但它對于一些特殊的應用是很有用的,在每一個數(shù)據(jù)庫應用程序運行時Delphi自動地創(chuàng)建一個TSession部件。程序設計人既不能看見該部件也不能顯示地創(chuàng)建一個TSession
部件,但是我們可以在應用程序中全局性地使用TSession部件的屬性、方法。 </p>
<p>15.2.1 TSession部件的重要屬性及作用 </p>
<p>TSession部件的許多重要屬性是用于控制數(shù)據(jù)庫應用程序與數(shù)據(jù)庫的連接的,在一個應用程序中,可以全局性地設置TSession的有關屬性值,對與之相連接的磁盤上的數(shù)據(jù)庫進行控制。TSession部件主要有下列屬性:</p>
<p>Database屬性:是TSession中可以進行連接的所有數(shù)據(jù)庫的數(shù)據(jù)庫名字列表,這些數(shù)據(jù)庫的名字常常是實際數(shù)據(jù)庫的別名,包括數(shù)據(jù)庫的路徑、用戶名、用戶登錄口令等參數(shù)。</p>
<p>DatabaseCount屬性:是TSession中可以進行連接的所有數(shù)據(jù)庫的數(shù)量,它是一個整數(shù)。</p>
<p>KeepCounnections屬性:是一個布爾型屬性,用它說明應用程序是否保持與一個非活動數(shù)據(jù)庫的連接。因為對于一個數(shù)據(jù)庫,當該數(shù)據(jù)庫中沒有相應的數(shù)據(jù)集部件(TTable或TQuery)被打開時,該數(shù)據(jù)庫將自動地變成非活動的數(shù)據(jù)庫。缺省情況下,KeePcounnections的值是True,就是說應用程序總是保持著與數(shù)據(jù)庫的連接,
即使數(shù)據(jù)庫變成了非活動的數(shù)據(jù)庫時,也是如此。如果將KeepConnections屬性設置成False,那么當數(shù)據(jù)庫由活動狀態(tài)變成非活動狀態(tài)時,應用程序與該數(shù)據(jù)庫的連接也隨之中斷。</p>
<p>NetFileDir屬性:說明BDE網(wǎng)絡控制文件的路徑名。</p>
<p>PrivateDir屬性:說明存取臨時文件的路徑名。 </p>
<p>15.2.2 TSession部件的方法: </p>
<p>TSession部件中的大部分方法是用于向用戶提供與應用程序相連接的數(shù)據(jù)庫的信息,如數(shù)據(jù)庫的名字及別名,數(shù)據(jù)庫中的表名以及數(shù)據(jù)庫引擎BDE的有關參數(shù)等,在設計數(shù)據(jù)庫應用程序時,想要獲取有關數(shù)據(jù)庫的信息,調(diào)用TSession部件的下列方法,
將會大大簡化程序的設計。</p>
<p>GetAliasNames方法:調(diào)用該方法,我們可以獲得數(shù)據(jù)庫引擎BDE中定義的數(shù)據(jù)庫別名。</p>
<p>GetAliasParams方法:該方法主要用于獲取我們在BDE中定義數(shù)據(jù)庫別名時所說明的參數(shù)值,如BDE所在的目錄路徑以及實際名稱等。</p>
<p>GetDatabaseNames
方法:調(diào)用該方法可以幫助我們獲得當前應用程序可以進行連接的所有數(shù)據(jù)庫的名字,數(shù)據(jù)庫的名字是用戶使用BDE工具定義的實際數(shù)據(jù)庫的別名。</p>
<p>GetDriverNames方法:數(shù)據(jù)庫引擎BDE可以與多種數(shù)據(jù)庫管理系統(tǒng)相連接,如客戶/服務器數(shù)據(jù)庫管理系統(tǒng)Oracle、Sybase以及本地數(shù)據(jù)庫管理系統(tǒng)dBASE,Paradox等,BDE與每一種數(shù)據(jù)庫管理系統(tǒng)進行連接時,都有相應的驅(qū)動程序,而且這些驅(qū)動程序都可以選擇地安裝。通過調(diào)用GetDriverNames方法。我們可以獲得當前BDE安裝的數(shù)據(jù)庫驅(qū)動程序的名字。</p>
<p>GetDriverParams方法:BDE的數(shù)據(jù)庫驅(qū)動程序中包含著多個參數(shù),如支持的民族語言、DBMS的版本號、文件塊大小等,對于服務器上的DBMS,還有數(shù)據(jù)庫服務器的名字等等。</p>
<p>GetTableNames方法:因為每一個數(shù)據(jù)庫都是由多個數(shù)據(jù)庫表組成的,我們通過說明數(shù)據(jù)庫名,然后調(diào)用GetTableNames方法,便可以獲得該數(shù)據(jù)庫中全部的數(shù)據(jù)庫表的名字。</p>
<p>上述這些方法在調(diào)用時都需要一個字符串列表作為參數(shù),
而且都返回一個字符串列表的值。</p>
<p>TSession部件還有一個叫DropConnections的方法用于控制應用程序與數(shù)據(jù)庫的連接,當調(diào)用DropConnections方法時,應用程序與所有的數(shù)據(jù)庫的連接將會切斷。 </p>
<p>15.2.3 TSession部件應用舉例 </p>
<p>例15.1:我們創(chuàng)建一個應用程序,通過調(diào)用TSession有關的方法獲取當前應用程序可以進行連接的數(shù)據(jù)庫的名字以及獲取其中任意一個數(shù)據(jù)庫中的全部數(shù)據(jù)庫表的名字。 </p>
<p> 通過TSession部件獲取數(shù)據(jù)庫的有關信息 </p>
<p>窗體中主要使用了兩個列表框,其中列表框DatabaselistBox用于顯示數(shù)據(jù)庫的名字,列表框TablelistBox用于顯示數(shù)據(jù)庫中的表名。程序運行完后數(shù)據(jù)庫的名字顯示在DatabaselistBox列表框中,當用戶單擊DatabaselistBox列表框中的數(shù)據(jù)庫名時,該數(shù)據(jù)庫全部的數(shù)據(jù)庫表的名字將會顯示在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>
<p> </p>
<p>procedure TQueryForm.ListBox1Click(Sender: TObject);</p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -