人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統(tǒng)下載站 > 技術開發(fā)教程 > 詳細頁面

第15章 數(shù)據(jù)訪問部件的應用及編程(一)

第15章 數(shù)據(jù)訪問部件的應用及編程(一)

更新時間:2022-07-11 文章作者:未知 信息來源:網(wǎng)絡 閱讀次數(shù):

在這一章里我們主要介紹Delphi的數(shù)據(jù)訪問部件的層次結(jié)構(gòu)、多部件之間的關系、部件的屬性、方法、事件以及各部件的應用。這些部件包括:
  ● TSession部件

  ● 數(shù)據(jù)集部件(TTable和TQuery)

  ● TDatasource部件

  ● 字段對象TField

  ● 字段編輯器的使用

  ● TReport部件和TBatchMove部件

  我們對這些部件的屬性、方法和事件進行一般性的描述,讀者在實際使用Delphi開發(fā)應用程序時,還可以通過聯(lián)機幫助獲得有關部件更詳細的信息。 

  15.1 Delphi數(shù)據(jù)訪問部件的層次結(jié)構(gòu) 

   Delphi提供了強大的開發(fā)數(shù)據(jù)庫應用程序的能力,它給用戶提供了大量的數(shù)據(jù)訪問部件。以方便程序設計人員開發(fā)數(shù)據(jù)庫應用程序。這些部件中,有些部件繼承了另一些部件的屬性、方法和事件,也就是說多部件之間存在著繼承和被繼承的關系,各部件的這種關聯(lián)便構(gòu)成了一個層次結(jié)構(gòu) 

  圖15.1 Delphi數(shù)據(jù)訪問部件的層次結(jié)構(gòu) 

  TSession是全局性的部件,在應用程序運行時,它自動地建立,在設計階段和運行過程中它是一個不可見的部件。

  TDatabase部件是為開發(fā)客戶/服務器數(shù)據(jù)庫應用程序時,設置登錄的數(shù)據(jù)庫的有關參數(shù)的,它在數(shù)據(jù)訪問部件頁上。

  TDataset部件是不可見的,TTable和TQuery部件是由它派生而來的,這兩個部件一般被稱為數(shù)據(jù)集部件,它們在數(shù)據(jù)訪問部件頁上。

  TDatasource部件是連接數(shù)據(jù)集部件和數(shù)據(jù)瀏覽部件的橋梁,它在數(shù)據(jù)訪問部件頁上。

  TFields部件對應于數(shù)據(jù)庫表中的實際字段,它既可以在應用程序的運行過程中動態(tài)地生成也可以在程序設計階段用字段編輯器創(chuàng)建。它是不可見的部件,在程序中我們可以通過TField部件來訪問數(shù)據(jù)庫記錄的各個字段值。 

  15.2 Tsession部件及其應用 

  TSession部件一般用得較少,但它對于一些特殊的應用是很有用的,在每一個數(shù)據(jù)庫應用程序運行時Delphi自動地創(chuàng)建一個TSession部件。程序設計人既不能看見該部件也不能顯示地創(chuàng)建一個TSession 部件,但是我們可以在應用程序中全局性地使用TSession部件的屬性、方法。 

  15.2.1 TSession部件的重要屬性及作用 

  TSession部件的許多重要屬性是用于控制數(shù)據(jù)庫應用程序與數(shù)據(jù)庫的連接的,在一個應用程序中,可以全局性地設置TSession的有關屬性值,對與之相連接的磁盤上的數(shù)據(jù)庫進行控制。TSession部件主要有下列屬性:

  Database屬性:是TSession中可以進行連接的所有數(shù)據(jù)庫的數(shù)據(jù)庫名字列表,這些數(shù)據(jù)庫的名字常常是實際數(shù)據(jù)庫的別名,包括數(shù)據(jù)庫的路徑、用戶名、用戶登錄口令等參數(shù)。

  DatabaseCount屬性:是TSession中可以進行連接的所有數(shù)據(jù)庫的數(shù)量,它是一個整數(shù)。

  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ù)庫的連接也隨之中斷。

  NetFileDir屬性:說明BDE網(wǎng)絡控制文件的路徑名。

  PrivateDir屬性:說明存取臨時文件的路徑名。 

  15.2.2 TSession部件的方法: 

  TSession部件中的大部分方法是用于向用戶提供與應用程序相連接的數(shù)據(jù)庫的信息,如數(shù)據(jù)庫的名字及別名,數(shù)據(jù)庫中的表名以及數(shù)據(jù)庫引擎BDE的有關參數(shù)等,在設計數(shù)據(jù)庫應用程序時,想要獲取有關數(shù)據(jù)庫的信息,調(diào)用TSession部件的下列方法,將會大大簡化程序的設計。

  GetAliasNames方法:調(diào)用該方法,我們可以獲得數(shù)據(jù)庫引擎BDE中定義的數(shù)據(jù)庫別名。

  GetAliasParams方法:該方法主要用于獲取我們在BDE中定義數(shù)據(jù)庫別名時所說明的參數(shù)值,如BDE所在的目錄路徑以及實際名稱等。

  GetDatabaseNames 方法:調(diào)用該方法可以幫助我們獲得當前應用程序可以進行連接的所有數(shù)據(jù)庫的名字,數(shù)據(jù)庫的名字是用戶使用BDE工具定義的實際數(shù)據(jù)庫的別名。

  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ū)動程序的名字。

  GetDriverParams方法:BDE的數(shù)據(jù)庫驅(qū)動程序中包含著多個參數(shù),如支持的民族語言、DBMS的版本號、文件塊大小等,對于服務器上的DBMS,還有數(shù)據(jù)庫服務器的名字等等。

  GetTableNames方法:因為每一個數(shù)據(jù)庫都是由多個數(shù)據(jù)庫表組成的,我們通過說明數(shù)據(jù)庫名,然后調(diào)用GetTableNames方法,便可以獲得該數(shù)據(jù)庫中全部的數(shù)據(jù)庫表的名字。

  上述這些方法在調(diào)用時都需要一個字符串列表作為參數(shù),而且都返回一個字符串列表的值。

  TSession部件還有一個叫DropConnections的方法用于控制應用程序與數(shù)據(jù)庫的連接,當調(diào)用DropConnections方法時,應用程序與所有的數(shù)據(jù)庫的連接將會切斷。 

  

  15.2.3 TSession部件應用舉例 

  例15.1:我們創(chuàng)建一個應用程序,通過調(diào)用TSession有關的方法獲取當前應用程序可以進行連接的數(shù)據(jù)庫的名字以及獲取其中任意一個數(shù)據(jù)庫中的全部數(shù)據(jù)庫表的名字。 

  通過TSession部件獲取數(shù)據(jù)庫的有關信息 

  窗體中主要使用了兩個列表框,其中列表框DatabaselistBox用于顯示數(shù)據(jù)庫的名字,列表框TablelistBox用于顯示數(shù)據(jù)庫中的表名。程序運行完后數(shù)據(jù)庫的名字顯示在DatabaselistBox列表框中,當用戶單擊DatabaselistBox列表框中的數(shù)據(jù)庫名時,該數(shù)據(jù)庫全部的數(shù)據(jù)庫表的名字將會顯示在TablelistBox列表框中。有關的程序代碼如下: 

  程序清單15.1

  unit unit31; 

  interface 

  uses

  SysUtils, Windows, Messages, Classes, Graphics, Controls,

  Forms, Dialogs, StdCtrls, DB, DBTables, Buttons, ComCtrls, Tabnotbk; 

  type 

  TQueryForm = class(TForm)

  BitBtn1: TBitBtn;

  DataSource1: TDataSource;

  Table1: TTable;

  GroupBox1: TGroupBox;

  CheckBox1: TCheckBox;

  CheckBox2: TCheckBox;

  PageControl1: TPageControl;

  TabSheet1: TTabSheet;

  Label1: TLabel;

  Label2: TLabel;

  Label3: TLabel;

  ListBox1: TListBox;

  ListBox2: TListBox;

  ListBox3: TListBox;

  TabSheet2: TTabSheet;

  Memo1: TMemo;

  procedure FormCreate(Sender: TObject);

  procedure ListBox1Click(Sender: TObject);

  procedure ListBox2Click(Sender: TObject);

  end;

  

  var

  QueryForm: TQueryForm;

  

  implementation

  

  {$R *.DFM}

  

  uses RSLTFORM;

  

  procedure TQueryForm.FormCreate(Sender: TObject);

  begin

  Screen.Cursor := crHourglass;

  

  { Populate the alias list }

  

  with ListBox1 do

  begin

  Items.Clear;

  Session.GetAliasNames(Items);

  end;

  

  { Make sure there are aliases defined }

  

  Screen.Cursor := crDefault;

  if ListBox1.Items.Count < 1="" then="">

  MessageDlg( 'There are no database aliases currently defined. You ' +

  'need at least one alias to use this demonstration.',

  mtError, [mbOK], 0 );

  end;

  

  procedure TQueryForm.ListBox1Click(Sender: TObject);

  var

  strValue: string; { Holds the alias selected by the user }

  bIsLocal: Boolean; { Indicates whether or not an alias is local }

  slParams: TStringList; { Holds the parameters of the selected alias }

  iCounter: Integer; { An integer counter variable for loops}

  begin

  

  { Determine the alias name selected by the user }

  

  with ListBox1 do

  strValue := Items.Strings[ItemIndex];

  

  { Get the names of the tables in the alias and put them in the

  appropriate list box, making sure the user's choices are reflected

  in the list. } 

  ListBox2.Items.Clear;

  Session.GetTableNames(strValue, { alias to enumerate }

  '', { pattern to match } 

[1] [2]  下一頁

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 新邵县| 嘉禾县| 廊坊市| 沾化县| 孙吴县| 石河子市| 福州市| 喀什市| 安陆市| 奇台县| 峨边| 同心县| 江达县| 年辖:市辖区| 兴安县| 黄浦区| 车险| 屏山县| 绥芬河市| 宁河县| 垫江县| 孙吴县| 绵阳市| 霍州市| 灵宝市| 吴桥县| 库尔勒市| 卫辉市| 稻城县| 乡城县| 汝阳县| 甘谷县| 柯坪县| 绥德县| 纳雍县| 靖安县| 福州市| 红桥区| 万安县| 德化县| 武强县|