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

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

編輯:Delphi

18.3.1 使用TDatabase部件聯接SQL服務器

18.3.1.1 TDatabase部件概述

TDatabase部件處理應用程序與單個數據庫的聯接。如果不需要控制數據庫聯接,可以不用創建TDatabase部件。當應用程序試圖打開數據庫表(Table)時,會自動創建一個臨時的TDatabase部件。但如果你想控制數據庫的持續聯接、進入數據庫服務器的注冊和數據庫別名的值或事務控制,那麼你就必須為每個所需的聯接創建一個TDatabase部件。

  1. 創建TDatabase部件

TDatabase 部件在Component Palette中的Data Access頁上,你能將其拖放在數據模塊(Data module)或窗體中。在設計時創建TDatabase 部件,用戶可以設置初始值和編寫OnLogin事件處理過程(Event Handle)。OnLogin事件給用戶提供了第一次注冊數據庫服務器時定制服務器安全參數,如口令,的能力。

  2. TDatabase的關鍵屬性

⑴ DatabaseName屬性

DatabaseName是所要聯接的數據庫名,並且用於DataSet軟件,它將出現在DataSet部件的DatabaseName屬性的下拉式列表框中。設置DataBaseName屬性是定義數據庫應用的特定別名。DataSet部件能引用該名字以取代直接使用BDE別名。當TDatabase部件的Connected屬性為True時不能修改該屬性。

⑵ AliaName屬性

AliasName是BDE配置工具定義的BDE別名的名字。TDatabase 從中獲取其缺省的設置。如果設置DriveName屬性,則該屬性將被清除,如果當Connected為True 時強行設置DriveName屬性將引發異常。

⑶ DriveName屬性

DriveName是BDE驅動程序,如STANDARD 、ORACLE、SYBASE、INFORMIX或INTERBASE的名字。如果設置AliasName,則該屬性值將被清除。

⑷ Params屬性

Params屬性包含了打開SQL服務器上數據庫時所需的參數。在缺省情況下,這些參數由BDE配置工具設置;用戶也可以用數據庫參數編輯器(Database Parameters Editor)修改這些參數。對於數據庫服務器而言,Params將描述一系列的參數,如服務器名、 數據庫名、用戶名和口令。

⑸ Connected屬性

Connected屬性指明是否建立數據庫的聯接,當應用程序打開數據庫中的一個表時Connected將被置為True;反之,關閉數據庫表,Connected將被置為False,除非KeepConnection為True。而將Connected置為True則可不需打開數據庫表即可建立數據庫聯接。TDatabase的KeepConnection屬性描述當數據庫中沒有表打開時是否維持數據庫聯連。

⑹ KeepConnection屬性

KeepConnection屬性描述當數據庫中沒有打開表時是否要保持與服務器的聯連, 如果數據庫應用需要打開和關閉單個數據庫中的多個表時,將KeepConnection 設置為True是很有用的,那樣,即使沒有打開任何表,應用仍能保持與數據庫的聯接,它能夠重復地打開和關閉數據庫表,而不需要重復執行聯接過程。如果KeepConnection置為False,當每次將Connected置為True,數據庫都必須執行注冊過程。

⑺ LoginPrompt屬性

LoginPrompt屬性用於控制如何處理SQL數據庫的安全性問題。如置為True,當應用程序試圖建立數據庫聯接時屏幕上將出現標准Delphi注冊對話框。用戶必須輸入正確的用戶名和口令。如果置為False,則應用程序將尋找TDatabase部件的Params 屬性中的注冊參數。下面是USERNAME和PASSWORD參數的例子:

  USERNAME = SYSDBA

PASSWORD = masterkey

⑻ TransIsolation屬性

TransIsolation屬性描述SQL服務器所有的事務控制獨立級別。 tiDirtyRead使所有修改都被返回,而不管記錄是否已被提交。tiReadCommitted將只返回提交的記錄,而提交的修改將不會在結果中反映出來。tiRepeatableRead 將只返回事務過程中最初的記錄,即使另一個應用程序將所作的修改提交。

各種數據庫服務器可能不同程度地支持這些獨立級別,或者根本不支持。 如果需要的獨立級別不被服務器支持,那麼Dephi將使用下一個更高的獨立級別,如下表所示:

表18.10 各類服務器TransIsolation設置

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

獨立級別     Oracle Sybase和     InterBase

Microsoft SQL

──────────────────────────────────────

Dirty Read Read Committed Read Committed Read Committed

Read Committed Read Committed Read Committed Read Committed

Repeatable read Repeatable read Not Supported Repeatable Read

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

各個獨立級別的含義請見表18.12。

3. TDatabase的關鍵方法

  ⑴ StartTransaction方法

StartTransartion方法在由TaransIsolation屬性指定的獨立級別下開始事務控制。如果在一個事務已被激活的情況下調用該方法,Delphi將引發異常。

調用了該方法後,對數據庫所做的修改一直由數據庫服務器維持到調用Commmit方法提交數據或調用Rollback方法取消修改為止。只有當聯接數據庫服務器時,才能調用該方法。

⑵ Rollback方法

Rollback方法返轉當前事務控制,並且取消自最近一次調用StartTransaction以來對數據庫所做的所有修改。

⑶ Commit方法

Commit方法提交當前事務控制,並且將自最近一次調用StartTransaction以來所有數據修改存入數據庫。

4. TDatabase的OnLogin事件的處理

OnLogin事件的觸發條件是當聯接SQL數據庫的TDatabase部件被打開並且LoginPrompt屬性為True。使用OnLogin事件處理過程可以在運行時設置注冊參數。OnLogin 事件處理過程得到TDatabase的注冊參數數組Params,並且使用Values屬性改變這些參數。

例如:

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

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

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

當控制從OnLogin事件處理過程中返回時,應用程序用這些參數來建立聯接。

OnLogin事件處理過程的聲明是這樣的:

TLoginEvent = procedure(Database: TDatabase; LoginParam: TStrings) of Object;

property OnLogin: TLoginEvent;

TLoginEvent類型是處理OnLogin事件的方法頭。Database參數是要聯接的數據庫。LoginParams是TStrings類型的對象,包含用戶名和口令,以及打開數據庫時所用的其它參數。用戶名是形如USER NAME = John.Doe的字符串,口令是形如PASSWORD = is_Password的字符串。當OnLogin事件處理過程被調用時應當在LoginParams中加入用戶名和口令。

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