Midas進階 - 巢狀資料表實現Master/Detail的應用系統
首先,還應該知道Master/Detail到底是什麼關係;
其次,要明白什麼是巢狀資料表是什麼意思;
Master/Detail這種主細關係,只要做過資料庫程式的人應該都知道,在C/S結構裡隨時都是,很長見的;
巢狀資料表應該如何理解?它就是分布式系統和C/S結構的對於Master/Detail的不同操作機制而引申的;從用戶端而言,在C/S結構中,Master/Detail可以用兩個資料集組件分別取出表中具有Master/Detail關係的資料,但是在分布多中,對於用戶端而言,我們只關心Master的資料集的處理方式,而如何對應Master/Detail則是在應用服務方面進行操作,當我們正確串連了用戶端的MasterClinetDataSet(TClientDataSet)時,其所對應的Detail就會隨著資料包自動的下載到用戶端,這就是巢狀資料表的初步解釋;而它的正真定義應該是:當資料封包在封裝資料時,這個資料封包甚至能夠把一個資料集封裝起來;
下邊用一個常式來說明:
應用服務端:在應用伺服器上要實現兩個資料群組件的M/D(Master/Detail,以後用M/D代替)的關係,可以用TTable or TQuery ,TADOQuery or TADOTable or TADODataSet組件都完全可以;這兒要建立它們的M/D關係,和C/S中的完全一樣(中間需要通過一個TDataSource串連);
用戶端:在用戶端只需要用一個TClientDataSet來接收資料,這兒更能體現“巢狀“,所謂的接收資料是從應用服務端下載資料,是將M/D資料都下載下來,這後,Delphi可以自動的識別這是一個M/D結構的;此時需要將另一個TClientDataSet組件加進來,而且要設定它的DataSetField為下載資料的TClientDataSet中的Detail資料欄位(可以這樣理解);但不應該忘記了要執行TClientDataSet.Fetch Params,只有這樣才可以實現Detail -> TClientDataSet的DataSetField的設定;
設定完成後,就可以正確運行了;
下邊我給出設定執行個體,供參考
應用服務端表單檔案如下:
object DMF_LX: TDMF_LX
OldCreateOrder = False
Left = 192
Top = 107
Height = 409
Width = 570
object ADOConnection1: TADOConnection
Connected = True
ConnectionString =
'Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initia' +
'l Catalog=pubs;Data Source=(local)'
/////資料連線字串,有必要看一看;
LoginPrompt = False
Provider = 'SQLOLEDB.1'
Left = 72
Top = 32
end
object MADODataSet: TADODataSet
Connection = ADOConnection1
CursorType = ctStatic
CommandText = 'select * from publishers'
Parameters = <>
Left = 64
Top = 104
object MADODataSetpub_name: TStringField
FieldName = 'pub_name'
Size = 40
end
object MADODataSetcity: TStringField
FieldName = 'city'
end
object MADODataSetstate: TStringField
FieldName = 'state'
FixedChar = True
Size = 2
end
object MADODataSetcountry: TStringField
FieldName = 'country'
Size = 30
end
end
object DADODataSet: TADODataSet
Connection = ADOConnection1
CursorType = ctStatic
CommandText = 'select * from titles'
DataSource = MDDataSource
IndexFieldNames = 'pub_id'/////////這兒建立關係;
MasterFields = 'pub_id' /////////這兒建立關係;
Parameters = <>
Left = 168
Top = 104
end
object GADODataSet: TADODataSet
Connection = ADOConnection1
Parameters = <>
Left = 272
Top = 104
end
object MDDataSource: TDataSource
DataSet = MADODataSet
Left = 264
Top = 32
end
object MDataSetProvider: TDataSetProvider
DataSet = MADODataSet
Constraints = True
Left = 64
Top = 168
end
object DDataSetProvider: TDataSetProvider
DataSet = DADODataSet
Constraints = True
Left = 176
Top = 168