程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第十五章-數據訪問部件的應用及編程(二)(1)

第十五章-數據訪問部件的應用及編程(二)(1)

編輯:Delphi

數據集部件TTable或TQuery具有很多的事件。為這些事件編寫相應的程序代碼可以進行有效性驗證、計算可計算字段的值、確認對數據庫表的多種操作等等。這些事件及其描述如表15.4所示。 

表15.4 數據集部件常用的事件

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

事 件 描 述

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

BeforeOpen,Afteropen 在數據集部件被打開之前/之後被觸發

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

BeforeClose,Afterclose 在數據集部件被關閉之前/之後被觸發

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

BeforeInsert,AfterInsert 在數據集部件進入插入狀態之前/之後被觸發

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

BeforeEdit,AfterEdit 在數據集部件被編輯之前/之後被觸發

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

BeforePost,AfterPost 在數據集部件投寄被修改的記錄之前/之後被觸發

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

BeforeCancel,AfterCancel 在數據集部件取消前一步操作之前/之後被觸發

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

BeforeDelete,AfterDelete 在數據集部件刪除當前記錄之前/之後被觸發

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

OnNewRecord 當建立一條新記錄時被觸發

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

OnCalcFields 當為表中的計算字段計算字段值時被觸發

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

15.4 TTable部件及應用 

在前一節裡我們介紹了數據集部件TTable 和TQuery 的共同的一些屬性和方法。TTable部件是Delphi數據庫編程中要經常使用的最重要的部件之一,它是數據庫應用程序訪問數據庫時必須使用的數據集部件之一,在這一節裡,我們重點介紹TTable部件特有的屬性和方法,TTable部件所有的屬性、方法和事件都可以在聯機幫助中查到。 

15.4.1 TTabel部件主要的屬性 

DatabaseName屬性和TableName屬性:

DatabaseName屬性是說明數據庫應用程序所操作的數據庫的名字,它可以是由BDE定義的數據庫的別名、顯式說明的數據庫文件所在的磁盤路徑或者由TDatabase部件定義的一個數據庫名。DatabaseName屬性常常是一個由BDE定義的數據庫的別名。使用由BDE定義的數據庫的別名代替數據庫實際所在的路徑和名字,好處是當實際的數據庫存放的位置發生變化時,只需利用BDE簡單地設置一下該數據庫的別名,而數據庫應用程序無需修改。有關BDE的使用請參看BDE的設置應用。TabelName屬性用以說明當前TTable部件所連接的實際的數據庫表。這兩個屬性一般都在設計階段指定,當然在程序運行過程中也可以設置,但是要修改這兩個屬性時,必須要在TTabel的Active屬性為False時進行,當TTable的Active屬性為True時,這兩個屬性是不能被修改和設置的。

TableType屬性:

該屬性說明與TTable部件相連接的數據庫表的類型。當TableType屬性設置成Default時,該屬性所說明的數據庫表的類型由數據庫文件的擴展名決定。

● 若數據庫文件的擴展名為.DB或沒有擴展名,表的類型是Paradox表

● 若數據庫文件的擴展名為.DBF時,表的類型是dBASE表

● 若數據庫文件的擴展名為.TXT時,表的類型是ASCII表 

如果TableType屬性不設定為Default,那麼與TTable 部件相連的數據庫表的類型由TableType中的設置的值決定,不用考慮數據庫文件的擴展名。

KeyExclusive屬性:

該屬性的一個作用是說明在數據庫表中查找記錄時,將記錄移到與查找值相匹配的記錄處還是將記錄指針移到與查找值相匹配的記錄後面一條記錄處。該屬性是布爾型變量,當它的值為False時(缺省情況下為False),將記錄指針移到相匹配的記錄處,為True時,將記錄指針移到相匹配記錄的後面一條記錄處。該屬性另一個作用是在表中指定檢索范圍時,用來說明是否包括滿足過濾條件的邊界記錄。當KeyExclusive的值為False時,檢索范圍包括邊界記錄,否則不包括邊界記錄,有關詳細的操作請參看“限定表中記錄的檢索范圍”。

IndexFields屬性和IndexFieldsCount屬性:

IndexFields的屬性值是數據庫表中字段名列表,它包含與TTable部件相連的數據庫表中的全部索引字希。IndexFieldsCount屬性說明表中索引字段的個數。這兩個屬性值都是只讀的,只有在程序運行過程中可用。

IndexName屬性和IndexFieldNames屬性:

IndexName屬性中存放著在建立數據庫表時為數據庫表定義的所有輔助索引名,它是一個輔助索引名列表,是只讀屬性。IndexFieldNames屬性指定用於數據庫表索引排序的字段名,多個字段名之間用分號隔開。例如對Customer.DB表中的客戶記錄按郵政編碼ZipCode和客戶號碼CustNo排序時可以設定IndexFieldNames的值為:

ZipCode ; CustNo

在IndexFieldNames屬性中指定的字段必須存在於相應的數據庫表中,否則會導致錯誤。IndexName和IndexFieldName是互斥的,每次只能指定其中一個屬性的值,不能同時為兩個屬性都指定屬性值。

Exclusive屬性:

該屬性是一個布爾型屬性,它標明是否以共享方式打開數據庫表,如果Exclusive的值為True,當打開一個數據庫表時,其他用戶就不能訪問該表了,若Exclusive的值為False,將以共享方式打開一個數據庫表。顯然不能將其他用戶正在訪問的表以互斥方式打開(設定Exclusive的值為True)。對於SQL數據庫服務器上的數據庫表,當以互斥方式被一個用戶打開時,其他用戶可以讀取該表中的數據,但不能修改表中的數據,當然有些數據庫服務器不支持這種方式,這要具體參看有關的數據庫服務器的文檔。

ReadOnly屬性和CanModify屬性:

這兩個屬性都是布爾型屬性,ReadOnly屬性決定用戶是否能夠對表中的數據進行讀寫。ReadOnly為True 時,用戶只能讀取表中的數據,ReadOnly為False時,用戶可以讀寫表中的數據(假設數據庫已授權用戶能夠讀寫其中的數據庫表)。CanModify屬性是一個只讀屬性,用戶不能夠修改其屬性值,它反映了用戶對數據庫表擁有的實際特權,當ReadOnly為True時CanModify將自動地被置為False,當ReadOnly為False時,如果數據庫允許用戶對表進行讀寫時,CanModify為True,否則CanModify為False。當CanModify為False時,數據庫表是只讀的,但不能將其置成編輯狀態或插入狀態;當CanModify屬性為True時,雖然數據庫表對應的數據集部件可以置成編輯和插入狀態,但是這並不意味著用戶能夠插入和修改表中的數據,因為這還要受到其他因素的限制,如用戶對SQL數據庫服務器的訪問權限等的限制。

TTable部件還有其他一些屬性請參看聯機幫助

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