亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Delphi中DataSource、ClientDataSe

發布時間:2020-03-04 19:03:49 來源:網絡 閱讀:726 作者:alexanda2000 欄目:開發技術

一、DataSource的兩個主要作用:

1、連接數據集和數據感知控件

2、連接兩個存在數據關系的數據集(比如數據要一起聯動,或者兩個數據集本身就是主從關系)

這時從數據集的DataSource要設置為指向主數據集的DataSource組件


二、兩個數據集設置主從方式(針對ADO控件,因為FireDAC的Dataset沒有datasource屬性)

假設有兩個表,teacher和student表,結構及數據如下,可以看出,一個老師有多個學生,student表通過teacherid與teacher表連接(也可以把兩個表看成是主從關系)。

teacher表:

ID?????????????? TeacherName

1???????????????????? alex

2??????????????????? miley

3???????????????????? joana

4????????????????????? BBQ


Student表:

ID????????? StudentName??????? TeacherID

1???????????????? john????????????????????????? 1

2??????????????? stephen???????????????????? 1

3????????????????? ooo???????????????????????? 1

4???????????????? ABC?????????????????????????? 2

5????????????????? EFG???????????????????????? 2

6???????????????? kathy????????????????????? 3

7????????????????? steph????????????????????? 4


1、參數方式

兩個數據集需要聯動時,可以在SQL語句中使用參數的方式。

(1)dataset1的語句是select * from teacher

(2)datasource1的dataset設置為dataset1

(3)dataset2的語句是select * from student where teacherid = :id (:id說明了需要接收id參數)

(4)dataset2的datasource屬性設置為datasource1

這樣就完成了聯動設置,當dataset1的記錄變化時,由于dataset2的datasource是datasource1,所以能夠接收到dataset1傳過來的新的id參數。因此dataset2的記錄也會根據dataset1的id不同而變化。

2、設置范圍方式(巢狀數據)

這種方式不需要寫代碼,通過組件配置就可以實現。

(1)dataset1的語句是select * from teacher

(2)datasource1的dataset設置為dataset1

(3)dataset2的語句是select * from student (這里不需要接收任何參數)

(4)dataset2的datasource屬性設置為datasource1

(5)點擊dataset2的masterfields的省略號,在彈出設置框中設置關聯關系

這樣dataset1和dataset2的主從關系就已經設置好了。


三、FireDAC設置主從關系

詳細英文頁面:http://docwiki.embarcadero.com/RADStudio/Rio/en/Master-Detail_Relationship_(M/D)

FireDAC設置主從也有兩種方式(實際上對應ADO的兩種方式):

1、基于參數的方式。和ADO的參數方式差不多,可用于 TFDQuery 或者 TFDStoredProc(只能用在這兩個控件上),主從是通過重新查詢實現。

2、基于范圍的方式。可以用于所有FireDAC的數據集控件,它是通過設置范圍的方式來實現,同時需要設置從表的IndexFieldName。(這個索引表示數據按哪個列來排列)


Feature????????????????????????????????????????????????????????????????????????????????????????????????????????? Parameter-based???????????????? Range-based

The detail query returns a limited number of records.???????????????????????????????????? +

The detail records are fresh.????????????????????????????????????????????????????????????????????????????????? +

Reduced traffic and DBMS workload on each master change.???????????????????????????????????????????????????????????????????? +

The cached updates preserved on the master change.???????????????????????????????????????????????????????????????????????????????? +

Works in offline mode.??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? +

Supports Centralized Cached Updates with propagation???????????????????????????????????????????????????????????????????????????? +


同時,FireDAC也有兩種緩存更新方式:

1、非集中式更新。主從表各自保存各自的緩存

2、集中式的更新。主從表共享同一份更新日志,可以做到更好的控制,實現級聯更新,以及實現自增值等。(個人覺得,集中式的更新,共享更新日志,是ClientDataset可以對接主表,形成巢狀數據庫的關鍵,因此巢狀數據在這種方式下才能形成,不管是ADO還是FireDAC)

1、參數方式:

與ADO相同,區別在第(4)步,是將從表的MasterSource指向主表(ADO中是Datasource)。同時,可以選擇是否設置MasterField字段,如果設置了就按照設置,不設置就按參數同名的字段。

2、范圍方式:

前面步驟與ADO的方式相同,從第(4)步開始:

(4)dataset2的MasterSource屬性設置為datasource1

(5)點擊dataset2的masterfields的省略號,在彈出設置框中設置關聯關系。同時設置IndexFieldNames字段(重要)

注:在從表里,MasterSource、MasterField里,指的都是主表,即關聯到主表的datasource、主表的聯接字段。


四、ClientDataSet主要作用:

1、作為獨立的、與數據庫無關的、全功能的內存數據集,實現大部分數據存儲和操作功能,這時它就相當于單層數據庫

2、作為多層數據庫的客戶端,連接本層或者中間層的provider控件(如果連接的不是本層的provider,則需要用DCOMConnect去連中間層),再由provider連接DataSet

3、存儲具有主從關系的巢狀數據集


五、ClientDataSet設置巢狀數據庫

用ClientDataSet設置巢狀數據庫,前提是ado組件(或其它table類組件)已經構建好了主從關系(如第二步第2點所述。

(1)放置TProvider組件,Dataset屬性設置成dataset1(即主從關系的主表)

(2)將clientdataset1的providername設置成provider1,將active設置為true,可以看到,clientdataseet1已經將主從關系表數據都取回來了。其中主表數據正常顯示,從表數據用一個字段表示,字段名一般為從表組件名,在這個示例中是adodataset2

(3)雙擊clientdataset1,彈出字段編輯器,然后點add all fields,這樣就自動生成了所有字段。在單層的程序中,這一步是必要的,因為沒有應用服務的connection提供信息,所以如果不手工增加一下字段信息的話,第(4)步就無法選擇也無法輸入巢狀字段名,會報無效的字段。

(4)將clientdataset2的datafield字段設置為clientdataset1的那個包含從表數據的字段,在本例中是adodataset2字段。這時巢狀數據關系就已經設置好了。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿鲁科尔沁旗| 鹤峰县| 新闻| 天全县| 乡宁县| 四子王旗| 瑞安市| 桦川县| 文水县| 区。| 孟州市| 高清| 即墨市| 大同县| 田林县| 永清县| 济源市| 石嘴山市| 大余县| 乐昌市| 栾城县| 蛟河市| 章丘市| 宁远县| 凤山县| 丹江口市| 鄱阳县| 沛县| 林口县| 墨江| 乃东县| 祁阳县| 安丘市| 清流县| 安吉县| 柏乡县| 四川省| 南丰县| 五家渠市| 北碚区| 南开区|