kbmMW 實現主從關係表的方法

2021-08-15 23:48:13 字數 3017 閱讀 1973

環境:

delphi xe10.2.2+kbmmw5.02+unidac7.02+fb3.0

在日常應用中,我們經常會用到主/從

(master/detail)

關係表,如客戶與訂單、角色與許可權等。在

kbmmw

中實現mater/detail

關係表的方法有兩種,各有優缺點。下面是我實現這兩個方法的過程。

首先,我對

kbmmw

是不了解的,並受到之前開發的影響,一直認為在客戶端乙個資料集控制項

(tkbmmwclientquery)

必須在伺服器端有乙個

(tkbmmwunidacquery)

與之聯絡,結果我的問題變成了怎麼在伺服器端使兩個

tkbmmwunidacquery

共存並分別響應客戶端的請求。 但

……。後來得紅魚兒大俠指導,才知道在伺服器端用乙個

tkbmmwunidacquery

就足以響應客戶端的請求了。一切才恢復到我的問題上來。

主從關係表的實現在

kbmmw

中有例子和說明文件。我照著做了,但是卻還是遇到問題。下面就將這個過程說一下。 在

kbmmw

的說明文件中明確說明,

kbmmw

實現主從關係表有兩種方法:

一、第一種方法

當主關係表中的記錄變化時,資料庫將查詢出與之相應的從關係表資料。

優點:l 

會得到最新的從表資料;

l  每次只傳送與主表相匹配的從表資料;

缺點:l 

每次主表的記錄變化時,都需要呼叫應用伺服器或資料庫。當然,如果不想這樣,也可以啟用從表中的快取,在快取中檢索從表資料。

實現方法:

建立乙個主關係表控制項。如。可以是

tkbmmwclientquery

並命名為:「

kcqmaster」。

或者任何其他

tkbmmw***xquery。

建立乙個從關係表控制項。如。可以是

tkbmmwclientquery

並命名為:「

kcqdetail」。

或者任何其他tkbmmw***xquery。

到底是tkbmmwclientquery

還是tkbmmw***xquery

取決於它是在客戶端還是伺服器端的主從關係表查詢控制項。

設定以下屬性:

—kcqmaster.query.text:= 『select * from customers』; —

kcqdetail.query.text:=' select * fromorders where customerid=:customerid '; -

將kcqdetail

中的customerid

引數,通過

params

屬性定義為

ftinteger

字段型別和

ptinput

引數型別。

注意:有一點必須強調,上述

sql語句中,引數

:customerid

必須與從表中的欄位名(

cusstomerid

)相同,如果不相同,

kbmmw

就不認了。也就找不出相應的從表資料。 -

新增乙個

tdatasource

,如。dsmaster

,並將其資料集屬性連線到

kcqmaster。

- kcqdetail.mastersource:= dsmaster;

- kcqdetail.masterfields:='id';//

這是主表中唯一的關鍵字段,用於搜尋詳細記錄。如果有多於乙個字段,可以通過(

;)分號來分隔各個字段;

- kcqdetail.detailfields:='customerid';//

這是在從表上的字段,用於查詢與特定主表記錄匹配的從表記錄。同樣,如果多於乙個字段,也是用(

;)分號來分隔。

- kcqdetail.requerydetails:= true;//

該屬性用於當主表記錄更改時,將對從表資料進行重新獲取。

二、第二種方法

kbmmw

自動過濾掉與當前主表記錄無關的從表資料。

優點:l 

在所有的主從表記錄被獲取之後,瀏覽主表非常快。從應用程式伺服器或資料庫中不需要再進行額外的資料請求。

l  它允許公文包主

/從關係模式。這意味著您可以儲存主從關係表資料在本地檔案中,斷開與網路的連線,你的主

/從關係表仍然可用。 缺點

: l  所有主表記錄的所有從表記錄都需要開啟。

l  你可能不會在任何時候都有詳細記錄的最新副本。

實現方法:

同樣,在客戶端或是伺服器端建立兩個代表主、從關係表的查詢控制項。

kcqmaster

和kcqdetail。

設定以下屬性:

- kcqmaster.query.text:= 『select * from customers』;

- kcqdetail.query.text:=' select * from orders '; -

新增乙個

tdatasource

,如。dsmaster

,並將其資料集屬性連線到

kcqmaster。

- kcqdetail.mastersource:= dsmaster;

- kcqdetail.masterfields:='id';//這是主表中唯一的關鍵字段。

- kcqdetail.detailfields:='customerid';//這是應該在細節表上的字段。

- kcqdetail.requerydetails:= false;//

該入屬性在每次主記錄更改時將在從表內容中過濾不用的資料。

我想:這兩種實現主/

《master/detail the kbmmw way forkbmmw v. 1.xx》kim madsen(kbmmw作者)

實現主從關係Form中彙總行金額 數量

背景說明 頭塊中的total欄位 headers.amount total 彙總行上面amount lines.amount 行中的amount是unit price lines.unit price 和quantity lines.quantity 的乘積 unit price和quantity的...

實現主從關係Form中彙總行金額 數量

下面以實際的例子來描述如何實現彙總計算,效果圖如下 背景說明 頭塊中的total欄位 headers.amount total 彙總行上面amount lines.amount 行中的amount是unit price lines.unit price 和quantity lines.quantit...

主從表設計和程式設計的幾種實現辦法

主從表操作是資料庫相關程式設計中繞不過去的技術之一。為了減少資料冗餘 滿足資料庫的正規化要求,必需考慮建立主表和從表,從以外鍵關聯。主從表可以看做是對母表進行縱向切割而得到的。由於表個數的增加,和外來鍵關係的存在 關係型資料庫 的名稱就是從這裡來的吧?使操作主從錶比操作單錶複雜了很多。程式設計的複雜...