15.4.2.3 創(chuàng)建主要──明細(xì)數(shù)據(jù)庫應(yīng)用
TTable部件中MasterSource屬性和MasterFields屬性是用于定義兩個(gè)數(shù)據(jù)庫表的一對(duì)多的關(guān)系。MasterSource屬性指定主表對(duì)應(yīng)的TDataSource部件,MasterFields屬性指定主表和明細(xì)表之間建立聯(lián)系的字段,主表和明細(xì)表之間建立一對(duì)多關(guān)系時(shí),可能不只是基于一個(gè)字段,可能有多個(gè)字段。如果有多個(gè)字段,那么在說明MasterFields屬性時(shí),多個(gè)字段之間要用分號(hào)隔開。如Table1.MasterFields := 'OrderNo;CustNo'。在設(shè)計(jì)階段可以使用字段連接設(shè)計(jì)器(Field Link Designer)為兩上表創(chuàng)建一對(duì)多的關(guān)系,在Object Inspector 中雙擊TTable部件的MasterFields便可以打開Field Link Designer,進(jìn)行一對(duì)多關(guān)系的創(chuàng)建。 如創(chuàng)建Customer.DB表和Order.DB表之間的一對(duì)多關(guān)系時(shí),使用Field Link Designer 如圖15.5所示。
圖15.5 使用Field Link Designer創(chuàng)建一對(duì)多關(guān)系
Field Link Designer提供了一種可視化的方法來創(chuàng)建主要──明細(xì)表之間的一對(duì)多關(guān)系。圖中Available Indexes組合框中存放著明細(xì)表中的關(guān)鍵字段和索引字段,可以選擇索引字段進(jìn)行連接。在主表中選擇一個(gè)用于連接的關(guān)鍵字段,然后將其與明細(xì)表中相應(yīng)的關(guān)鍵字段連接,單擊Add按鈕,主要──明細(xì)表的連接字段將顯示在Joined Fields列表框中,如:
CustNo->CustNo
15.5 TDataSource部件及其應(yīng)用
TDataSource部件是開發(fā)數(shù)據(jù)庫應(yīng)用程序中用到的非常重要的部件,它是連接數(shù)據(jù)集部件TTable或TQuery和數(shù)據(jù)瀏覽部件的橋梁。TDataSource部件本身十分簡單,它所擁有的屬性、事件和方法都比較少,在使用該部件時(shí)無需作太多的工作,它主要是為數(shù)據(jù)瀏覽部件服務(wù)的,如果在應(yīng)用程序中沒有使用數(shù)據(jù)瀏覽部件,我們也沒有必要為應(yīng)用程序設(shè)置TDataSource部件。
15.5.1 TDataSource部件的屬性
TDataSource部件除了其他部件都擁有的Name屬性和Tag屬性之外,主要有下面幾個(gè)屬性:
DataSet屬性:該屬性說明TDataSource部件從中獲取數(shù)據(jù)的數(shù)據(jù)集的名字,它可以是TTable部件的名字,也可以是TQuery部件的名字,甚至還可以指定其他窗體內(nèi)的數(shù)據(jù)集作為該屬性的值,如在下面的程序中我們指定窗體Form2中的table1作為窗體Form1中的DataSource1的DataSet屬性值:
TForm1.Formcreate(Sender : Tobject);
Begin
DataSource1.DataSet := Form2.Table1;
end;
Enable屬性:Enable屬性可以暫時(shí)性地切斷TDataSource部件和與之相連的數(shù)據(jù)集部件的連接。這是一個(gè)布爾型變量。當(dāng)它的值為False時(shí),TDataSource部件和數(shù)據(jù)集部件的連接被切斷,且所有與TDataSource部件相連的數(shù)據(jù)瀏覽部件中將變?yōu)橐黄瞻?,不顯示任何數(shù)據(jù)信息。當(dāng)Enabled的值變?yōu)門rue時(shí),TDataSource部件和數(shù)據(jù)集部件的連接恢復(fù),且與TDataSource部件相連的數(shù)據(jù)瀏覽部件恢復(fù)顯示數(shù)據(jù)。不過要實(shí)現(xiàn)上述這些功能,一般不使用TDataSource部件的Enabled屬性,而是調(diào)用數(shù)據(jù)集部件的DisableControls方法和EnableControls 方法,因?yàn)檎{(diào)用這兩個(gè)方法可以方便地控制與數(shù)據(jù)集部件相連的所有TDataSource部件以及與TDataSource部件相連的數(shù)據(jù)瀏覽部件。
AutoEdit屬性:這是一個(gè)布爾型變量,它用于說明是否將與TDataSource部件相連的數(shù)據(jù)集置于編輯狀態(tài)。當(dāng)AutoEdit的值為True時(shí),應(yīng)用程序運(yùn)行時(shí),與TDataSource相連的數(shù)據(jù)集部件自動(dòng)地被設(shè)置成編輯狀態(tài),當(dāng)用戶在與TDataSource部件相連的數(shù)據(jù)瀏覽部件中輸入新的值時(shí),數(shù)據(jù)集部件中的記錄也隨之改變。如果AutoEdit的值為False,用戶想通過數(shù)據(jù)瀏覽部件或程序修改數(shù)據(jù)集中的記錄,必須要調(diào)用數(shù)據(jù)集部件的Edit方法,將其置為編輯狀態(tài)之后才能夠進(jìn)行。
TTable部件中MasterSource屬性和MasterFields屬性是用于定義兩個(gè)數(shù)據(jù)庫表的一對(duì)多的關(guān)系。MasterSource屬性指定主表對(duì)應(yīng)的TDataSource部件,MasterFields屬性指定主表和明細(xì)表之間建立聯(lián)系的字段,主表和明細(xì)表之間建立一對(duì)多關(guān)系時(shí),可能不只是基于一個(gè)字段,可能有多個(gè)字段。如果有多個(gè)字段,那么在說明MasterFields屬性時(shí),多個(gè)字段之間要用分號(hào)隔開。如Table1.MasterFields := 'OrderNo;CustNo'。在設(shè)計(jì)階段可以使用字段連接設(shè)計(jì)器(Field Link Designer)為兩上表創(chuàng)建一對(duì)多的關(guān)系,在Object Inspector 中雙擊TTable部件的MasterFields便可以打開Field Link Designer,進(jìn)行一對(duì)多關(guān)系的創(chuàng)建。 如創(chuàng)建Customer.DB表和Order.DB表之間的一對(duì)多關(guān)系時(shí),使用Field Link Designer 如圖15.5所示。
圖15.5 使用Field Link Designer創(chuàng)建一對(duì)多關(guān)系
Field Link Designer提供了一種可視化的方法來創(chuàng)建主要──明細(xì)表之間的一對(duì)多關(guān)系。圖中Available Indexes組合框中存放著明細(xì)表中的關(guān)鍵字段和索引字段,可以選擇索引字段進(jìn)行連接。在主表中選擇一個(gè)用于連接的關(guān)鍵字段,然后將其與明細(xì)表中相應(yīng)的關(guān)鍵字段連接,單擊Add按鈕,主要──明細(xì)表的連接字段將顯示在Joined Fields列表框中,如:
CustNo->CustNo
15.5 TDataSource部件及其應(yīng)用
TDataSource部件是開發(fā)數(shù)據(jù)庫應(yīng)用程序中用到的非常重要的部件,它是連接數(shù)據(jù)集部件TTable或TQuery和數(shù)據(jù)瀏覽部件的橋梁。TDataSource部件本身十分簡單,它所擁有的屬性、事件和方法都比較少,在使用該部件時(shí)無需作太多的工作,它主要是為數(shù)據(jù)瀏覽部件服務(wù)的,如果在應(yīng)用程序中沒有使用數(shù)據(jù)瀏覽部件,我們也沒有必要為應(yīng)用程序設(shè)置TDataSource部件。
15.5.1 TDataSource部件的屬性
TDataSource部件除了其他部件都擁有的Name屬性和Tag屬性之外,主要有下面幾個(gè)屬性:
DataSet屬性:該屬性說明TDataSource部件從中獲取數(shù)據(jù)的數(shù)據(jù)集的名字,它可以是TTable部件的名字,也可以是TQuery部件的名字,甚至還可以指定其他窗體內(nèi)的數(shù)據(jù)集作為該屬性的值,如在下面的程序中我們指定窗體Form2中的table1作為窗體Form1中的DataSource1的DataSet屬性值:
TForm1.Formcreate(Sender : Tobject);
Begin
DataSource1.DataSet := Form2.Table1;
end;
Enable屬性:Enable屬性可以暫時(shí)性地切斷TDataSource部件和與之相連的數(shù)據(jù)集部件的連接。這是一個(gè)布爾型變量。當(dāng)它的值為False時(shí),TDataSource部件和數(shù)據(jù)集部件的連接被切斷,且所有與TDataSource部件相連的數(shù)據(jù)瀏覽部件中將變?yōu)橐黄瞻?,不顯示任何數(shù)據(jù)信息。當(dāng)Enabled的值變?yōu)門rue時(shí),TDataSource部件和數(shù)據(jù)集部件的連接恢復(fù),且與TDataSource部件相連的數(shù)據(jù)瀏覽部件恢復(fù)顯示數(shù)據(jù)。不過要實(shí)現(xiàn)上述這些功能,一般不使用TDataSource部件的Enabled屬性,而是調(diào)用數(shù)據(jù)集部件的DisableControls方法和EnableControls 方法,因?yàn)檎{(diào)用這兩個(gè)方法可以方便地控制與數(shù)據(jù)集部件相連的所有TDataSource部件以及與TDataSource部件相連的數(shù)據(jù)瀏覽部件。
AutoEdit屬性:這是一個(gè)布爾型變量,它用于說明是否將與TDataSource部件相連的數(shù)據(jù)集置于編輯狀態(tài)。當(dāng)AutoEdit的值為True時(shí),應(yīng)用程序運(yùn)行時(shí),與TDataSource相連的數(shù)據(jù)集部件自動(dòng)地被設(shè)置成編輯狀態(tài),當(dāng)用戶在與TDataSource部件相連的數(shù)據(jù)瀏覽部件中輸入新的值時(shí),數(shù)據(jù)集部件中的記錄也隨之改變。如果AutoEdit的值為False,用戶想通過數(shù)據(jù)瀏覽部件或程序修改數(shù)據(jù)集中的記錄,必須要調(diào)用數(shù)據(jù)集部件的Edit方法,將其置為編輯狀態(tài)之后才能夠進(jìn)行。