程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第十八章-Delphi客戶服務器應用開發(三)(3)

第十八章-Delphi客戶服務器應用開發(三)(3)

編輯:Delphi

18.3.1.2 定制數據庫服務器的注冊參數

大多數數據庫服務器都包含限制數據庫訪問的安全特征。通常,在用戶能訪問數據庫之前,服務器都要求注冊的用戶名和口令。

如果服務器需要注冊,在設計階段,Delphi 會在你試圖聯接時提示你,諸如在會TTable部件描述數據庫表名時。

在缺省情況下,Delphi應用在打開數據庫服務器的聯接時,顯示標准注冊對話框。如果聯接已建立,則注冊對話框不會出現。

可以用下列方法處理服務器注冊:

1. 將TDatabase部件的LoginPrompt屬性置為True。這樣,當應用程序試圖建立數據庫聯接時,標准注冊對話框會打開。

2. 將LoginPrompt屬性置為False,在TDatabase部件的Params屬性中包含用戶名和口令參數。例如:

   USERNAME = SYSDBA

PASSWORD = mosterkey

但不推薦使用該方法,因為這會危害數據庫安全

3. 使用TDatabase部件的OnLogin事件設置注冊參數。OnLogin事件得到TDatabase 注冊參數數組的拷貝,並利用Values屬性改變這些參數。如:

   LoginParams.Values['SERVER NAME'] := 'MYSERVERNAME';

   LoginParams.Values['USER NAME'] := 'MYUERNAME';

   LoginParams.Values['PASSWORD'] := 'MYPASSWORD';

當控制從數據庫注冊事件處理過程中返回時,這些參數被用來建立聯接。

18.3.1.3 建立應用程序特定的別名

TDatabase的Aliases描述了數據庫表的位置和數據庫服務器的聯接參數。通常都是在Delphi之外,運用BDE配置工具(BDECFG32.EXE)創建別名,並且別名被存在BDE 配置文件IDAPI32.CFG中。

用戶也可以用TDatabase創建只在應用程序中可用的別名,用TDatabase 創建的別名不會加進BDE配置文件中。任何DataSet部件可通過描述DatabaseName 屬性來使用這些別名。為了定制這些局部別名的參數,用鼠標左鍵雙擊TDatabase部件或從TDatabase部件中選擇Database Editor,Delphi就會打開數據庫屬性編輯器(Database Properties Editor)。

18.3.1.4 控制數據庫的聯接

TDatabase部件的Connected屬性,指示TDatabase部件是否建立與數據庫服務器的聯接。當應用程序打開數據庫中的表時,Connected被設置為True。將Connected 設為True就建立了數據庫的聯接。

1. 保持數據庫聯接

TDatabase的KeepConnection屬性描述當沒有數據庫表打開時是否要與保持數據庫的聯接。

如果應用程序需要在單個數據庫中多次打開關閉多個表時,將KeepConnection 置為True能使應用程序具備更好的性能。

當KeepConnection為True時,即使沒有表打開,應用程序也能保持數據庫的聯接。那麼就能重復打開和關閉數據庫表而不需每次進行聯接注冊。

2. 使用TSesstion控制聯接

 TSesstion部件有一個面向整個應用程序的KeepConnections屬性。如果Session.KeepConnections為True,那麼用於所有TDatabase部件的數據庫聯接都是持久的。

TSession為應用程序提供數據庫聯接的全局控制。TSession中的Databases 屬性是Session中所有活躍數據庫組成的數組,DatabasesCount屬性描述活躍數據庫的數目。

3. 描述Net和Private目錄

TSession的NetFileDir屬性描述BDE網絡控制目錄的路徑。TSession的PrivateDir屬性描述存儲諸述處理局部SQL表達式的臨時文件的目錄的路徑。

18.3.1.5 獲取數據庫信息

TSession擁有許多讓用戶獲取數據庫有關的信息,每個方法都以TStringList 部件作為傳入參數,並將信息返回TStringList中。

1. GetAliasNames方法

聲明:procedure GetAliasNames(List: TStringList);

GetAliasNames方法消除List中的參數,並將所有已定義的BDE別名的名字寫入List。應用程序生成的別名不包括在內。

2. GetAliasParams方法

聲明:procedure GetAliasParams(const AliasName: String; List: TStringList);

GetAliasParams方法清除List的內容,並將BDE別名為AliaName的參數寫入List。

3. GetDatabaseNames方法

聲明:procedure GetDatabaseNames(List: TStrings);

GetDatabaseNames方法清除List的內容並將所有BDE別名和應用程序定義的別名的名字寫入List。

4. GetDriverNames方法

聲明:procedure GetDriverNames(List: TStrings);

GetDriverNames方法清除List中的內容,並將BDE當前安裝的驅動程序名寫入List。

5. GetDriverParams方法

聲明:procedure GetDriverParams(const DriverName: String; List: TStrings);

GetDriverParams方法消除List中的內容,並將名為DriveName驅動程序缺省參數寫入List。

6. GetTableNames方法

聲明:procedure GetTableNames(const DatabaseName, Pattern: Strings;

Extensions, SystemTable: Boolean; List: TStrings);

GetTableNames方法消除List中的內容,並將名為DatabaseName的數據庫中的所有表的名字寫入List。Pattern參數將限制表名。對於SQL服務器,將SystemeTables設為True將獲取系統表和用戶表。對非SQL數據庫,將Extensions設為True將在表名中包含擴展名。

18.3.2 處理Client/Server事務控制

使用隱式控制和顯示控制的數據庫應用中有兩種方法管理事務控制:

 ● 運用TDatabase部件的屬性和方法進行顯式控制

  ● 運用TQuery部件的傳遞式SQL控制事務

Delphi還支持Paradox和dBASE表的局部事務處理

18.3.2.1 事務控制概述

當用Delphi創建數據庫應用時,Delphi提供了用為所有數據庫訪問的事務控制。

事務是這樣一組操作,在被提交前,它們對一個或多個數據庫的操作,必須全部執行成功。如果其中一個操作失敗,則所有操作失敗,即事務具有原子性。

即使發生硬件失敗,事務也要保證數據庫一致性。當允許多用戶並發訪問時,事務還要維持數據完整性。

例如:一個應用程序可能更新ORDERS表以指明接受購買某一項目的定單,那麼也要更新INNENTORY表以反映庫存的減少。如果在第一個更新之後,第二個更新之前發生硬件錯誤,數據庫就會處於不一致狀態,因為庫存情況沒有反映定單情況。在事務控制下,兩個表達式將在同一時間提交,如果其中一個表達式失敗,則被返轉(Rolled Back)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved