15.3.5 數(shù)據(jù)集部件與數(shù)據(jù)瀏覽部件的連接
數(shù)據(jù)集部件TTabel和TQuery具有三個方法,DisableControls 方法、EnableControls方法、Refresh方法用于控制數(shù)據(jù)集部件和與其相連的數(shù)據(jù)瀏覽部件之間的連接,以及控制數(shù)據(jù)瀏覽部件的顯示。在用戶修改和更新以及遍歷數(shù)據(jù)庫表中的記錄時,調(diào)用DisableControls方法具有重要意義,調(diào)用DisbaleControls方法以切斷TTable或TQuery部件與數(shù)據(jù)瀏覽部件的連接,使數(shù)據(jù)瀏覽部件暫時失效,否則,在對TTable或TQuery部件的每次修改之后,窗體中所有與它們相連的數(shù)據(jù)瀏覽部件都要更新其顯示內(nèi)容,這親顯然會減慢處理速度。當(dāng)遍歷表中的記錄時記錄指針每移動一下,窗體中的數(shù)據(jù)瀏覽部件也隨之更新一下其中的顯示內(nèi)容,在屏幕上產(chǎn)生閃爍。
EnableControls方法的作用與DisbaleControls方法的作用是相反的,調(diào)用EnableControls方法,使TTable或TQuery部件恢復(fù)與數(shù)據(jù)瀏覽部件的連接,使暫時失效的數(shù)據(jù)瀏覽部件恢復(fù)到正常顯示表中記錄信息的狀態(tài)。
Refresh方法用于刷新數(shù)據(jù)瀏覽部件中的顯示。在調(diào)用Refresh方法時,必須要確保TTable或TQuery部件是打開的。當(dāng)數(shù)據(jù)集中的記錄被修改之后,調(diào)用Refresh方法,數(shù)據(jù)瀏覽部件中顯示的信息也隨之改變。
15.3.6 數(shù)據(jù)集部件的事件
數(shù)據(jù)集部件TTable或TQuery具有很多的事件。為這些事件編寫相應(yīng)的程序代碼可以進(jìn)行有效性驗證、計算可計算字段的值、確認(rèn)對數(shù)據(jù)庫表的多種操作等等。這些事件及其描述如表15.4所示。
表15.4 數(shù)據(jù)集部件常用的事件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
事 件 描 述
───────────────────────────────────
BeforeOpen,Afteropen 在數(shù)據(jù)集部件被打開之前/之后被觸發(fā)
───────────────────────────────────
BeforeClose,Afterclose 在數(shù)據(jù)集部件被關(guān)閉之前/之后被觸發(fā)
───────────────────────────────────
BeforeInsert,AfterInsert 在數(shù)據(jù)集部件進(jìn)入插入狀態(tài)之前/之后被觸發(fā)
───────────────────────────────────
BeforeEdit,AfterEdit 在數(shù)據(jù)集部件被編輯之前/之后被觸發(fā)
───────────────────────────────────
BeforePost,AfterPost 在數(shù)據(jù)集部件投寄被修改的記錄之前/之后被觸發(fā)
───────────────────────────────────
BeforeCancel,AfterCancel 在數(shù)據(jù)集部件取消前一步操作之前/之后被觸發(fā)
───────────────────────────────────
BeforeDelete,AfterDelete 在數(shù)據(jù)集部件刪除當(dāng)前記錄之前/之后被觸發(fā)
───────────────────────────────────
OnNewRecord 當(dāng)建立一條新記錄時被觸發(fā)
───────────────────────────────────
OnCalcFields 當(dāng)為表中的計算字段計算字段值時被觸發(fā)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
15.4 TTable部件及應(yīng)用
在前一節(jié)里我們介紹了數(shù)據(jù)集部件TTable 和TQuery 的共同的一些屬性和方法。TTable部件是Delphi數(shù)據(jù)庫編程中要經(jīng)常使用的最重要的部件之一,它是數(shù)據(jù)庫應(yīng)用程序訪問數(shù)據(jù)庫時必須使用的數(shù)據(jù)集部件之一,在這一節(jié)里,我們重點介紹TTable部件特有的屬性和方法,TTable部件所有的屬性、方法和事件都可以在聯(lián)機幫助中查到。
15.4.1 TTabel部件主要的屬性
DatabaseName屬性和TableName屬性:
DatabaseName屬性是說明數(shù)據(jù)庫應(yīng)用程序所操作的數(shù)據(jù)庫的名字,它可以是由BDE定義的數(shù)據(jù)庫的別名、顯式說明的數(shù)據(jù)庫文件所在的磁盤路徑或者由TDatabase部件定義的一個數(shù)據(jù)庫名。DatabaseName屬性常常是一個由BDE定義的數(shù)據(jù)庫的別名。使用由BDE定義的數(shù)據(jù)庫的別名代替數(shù)據(jù)庫實際所在的路徑和名字,好處是當(dāng)實際的數(shù)據(jù)庫存放的位置發(fā)生變化時,只需利用BDE簡單地設(shè)置一下該數(shù)據(jù)庫的別名,而數(shù)據(jù)庫應(yīng)用程序無需修改。有關(guān)BDE的使用請參看BDE的設(shè)置應(yīng)用。TabelName屬性用以說明當(dāng)前TTable部件所連接的實際的數(shù)據(jù)庫表。這兩個屬性一般都在設(shè)計階段指定,當(dāng)然在程序運行過程中也可以設(shè)置,但是要修改這兩個屬性時,必須要在TTabel的Active屬性為False時進(jìn)行,當(dāng)TTable的Active屬性為True時,這兩個屬性是不能被修改和設(shè)置的。
TableType屬性:
該屬性說明與TTable部件相連接的數(shù)據(jù)庫表的類型。當(dāng)TableType屬性設(shè)置成Default時,該屬性所說明的數(shù)據(jù)庫表的類型由數(shù)據(jù)庫文件的擴展名決定。
● 若數(shù)據(jù)庫文件的擴展名為.DB或沒有擴展名,表的類型是Paradox表
● 若數(shù)據(jù)庫文件的擴展名為.DBF時,表的類型是dBASE表
● 若數(shù)據(jù)庫文件的擴展名為.TXT時,表的類型是ASCII表
如果TableType屬性不設(shè)定為Default,那么與TTable 部件相連的數(shù)據(jù)庫表的類型由TableType中的設(shè)置的值決定,不用考慮數(shù)據(jù)庫文件的擴展名。
KeyExclusive屬性:
該屬性的一個作用是說明在數(shù)據(jù)庫表中查找記錄時,將記錄移到與查找值相匹配的記錄處還是將記錄指針移到與查找值相匹配的記錄后面一條記錄處。該屬性是布爾型變量,當(dāng)它的值為False時(缺省情況下為False),將記錄指針移到相匹配的記錄處,為True時,將記錄指針移到相匹配記錄的后面一條記錄處。該屬性另一個作用是在表中指定檢索范圍時,用來說明是否包括滿足過濾條件的邊界記錄。當(dāng)KeyExclusive的值為False時,檢索范圍包括邊界記錄,否則不包括邊界記錄,有關(guān)詳細(xì)的操作請參看“限定表中記錄的檢索范圍”。
IndexFields屬性和IndexFieldsCount屬性:
IndexFields的屬性值是數(shù)據(jù)庫表中字段名列表,它包含與TTable部件相連的數(shù)據(jù)庫表中的全部索引字希。IndexFieldsCount屬性說明表中索引字段的個數(shù)。這兩個屬性值都是只讀的,只有在程序運行過程中可用。
IndexName屬性和IndexFieldNames屬性:
IndexName屬性中存放著在建立數(shù)據(jù)庫表時為數(shù)據(jù)庫表定義的所有輔助索引名,它是一個輔助索引名列表,是只讀屬性。IndexFieldNames屬性指定用于數(shù)據(jù)庫表索引排序的字段名,多個字段名之間用分號隔開。例如對Customer.DB表中的客戶記錄按郵政編碼ZipCode和客戶號碼CustNo排序時可以設(shè)定IndexFieldNames的值為:
ZipCode ; CustNo
在IndexFieldNames屬性中指定的字段必須存在于相應(yīng)的數(shù)據(jù)庫表中,否則會導(dǎo)致錯誤。IndexName和IndexFieldName是互斥的,每次只能指定其中一個屬性的值,不能同時為兩個屬性都指定屬性值。
Exclusive屬性:
該屬性是一個布爾型屬性,它標(biāo)明是否以共享方式打開數(shù)據(jù)庫表,如果Exclusive的值為True,當(dāng)打開一個數(shù)據(jù)庫表時,其他用戶就不能訪問該表了,若Exclusive的值為False,將以共享方式打開一個數(shù)據(jù)庫表。顯然不能將其他用戶正在訪問的表以互斥方式打開(設(shè)定Exclusive的值為True)。對于SQL數(shù)據(jù)庫服務(wù)器上的數(shù)據(jù)庫表,當(dāng)以互斥方式被一個用戶打開時,其他用戶可以讀取該表中的數(shù)據(jù),但不能修改表中的數(shù)據(jù),當(dāng)然有些數(shù)據(jù)庫服務(wù)器不支持這種方式,這要具體參看有關(guān)的數(shù)據(jù)庫服務(wù)器的文檔。
ReadOnly屬性和CanModify屬性:
這兩個屬性都是布爾型屬性,ReadOnly屬性決定用戶是否能夠?qū)Ρ碇械臄?shù)據(jù)進(jìn)行讀寫。ReadOnly為True 時,用戶只能讀取表中的數(shù)據(jù),ReadOnly為False時,用戶可以讀寫表中的數(shù)據(jù)(假設(shè)數(shù)據(jù)庫已授權(quán)用戶能夠讀寫其中的數(shù)據(jù)庫表)。CanModify屬性是一個只讀屬性,用戶不能夠修改其屬性值,它反映了用戶對數(shù)據(jù)庫表擁有的實際特權(quán),當(dāng)ReadOnly為True時CanModify將自動地被置為False,當(dāng)ReadOnly為False時,如果數(shù)據(jù)庫允許用戶對表進(jìn)行讀寫時,CanModify為True,否則CanModify為False。當(dāng)CanModify為False時,數(shù)據(jù)庫表是只讀的,但不能將其置成編輯狀態(tài)或插入狀態(tài);當(dāng)CanModify屬性為True時,雖然數(shù)據(jù)庫表對應(yīng)的數(shù)據(jù)集部件可以置成編輯和插入狀態(tài),但是這并不意味著用戶能夠插入和修改表中的數(shù)據(jù),因為這還要受到其他因素的限制,如用戶對SQL數(shù)據(jù)庫服務(wù)器的訪問權(quán)限等的限制。
TTable部件還有其他一些屬性請參看聯(lián)機幫助
相關(guān)推薦:2010年9月計算機等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |