如何設置datasetfield ( 积分: 100 )

  • 主题发起人 主题发起人 qis2000
  • 开始时间 开始时间
Q

qis2000

Unregistered / Unconfirmed
GUEST, unregistred user!
各位戰友
我現在要把兩個表格用主從的方式連起來,並且要用在更新數據上,從網上得知,我用datasetfield的方式比較好,根據網上的步驟,做以下設定,用的是clientdataset:
1.masterdataset,commandtext:='select * from department',主表
2.detaildataset,commandtext:='select * from userdata',從表
3.在field editor中,用add all fields分別把兩個clientdataset的字段加上去
4.在masterdataset中,用field editor中的new field的方法,增加一個字段 details,type為dataset,field type為data
5.在detaildataset中,設 datasetfield為masterdatasetdetails
6.在active masterdataset或detaildataset時,出現提示,field 'details' not found
請教要如何處理,謝謝!
 
DataSetField是用来访问嵌套数据集的,只有面向对象的数据库如Oracle才直接支持。如果想在不能直接支持NestedDataSet(嵌套数据集)的数据库中使用,可以搭配Delphi的TDataSetProvider组件,因为TDataSetProvider可以把Master/Detail关系中的Master表的数据封包成带嵌套数据集的形式输出。具体步骤如下(我使用ADO数据集组件来作为TDataSetProvider的数据源,当然你也可以使用BDE组件或dbExpress组件,或者其它任何从TDataSet派生的组件)。
qryMaster,qryDetail:TADOQuery;
dsp:TDataSetProvider;
cdsMaster,cdsDetail:TClientDataSet;
srcMaster:TDataSource;
qryMaster.SQL.Text:='select * from department'
srcMaster.DataSet:=qryMaster;
qryDetail.DataSource:=srcMaster;
qryDetail.SQL.Text:='select * from userdata where departid=:id';
{我在这里假设department表中有个id字段表示部门号,而userdata中有个departid字段用来与department表的id关联。}
激活两个ADOQuery
在Object Inspector中设置dsp的DataSet属性设置为qryMaster,设置cdsMaster的ProviderName属性为qryMaster
激活cdsMaster,然后add all fields,可以看到有一个TDataSetField类型的字段,名为qryDetail,好了要的就是它,实际上它的全名是cdsMasterqryDetail。
设置cdsDetail的DataSetField属性为cdsMasterqryDetail,激活cdsDetail就可以了。当cdsMaster的记录移动时,cdsDetail的数据也会随之变化,只显示部门号跟cdsMaster的当前记录一样的数据。
 
实际上,你这种用法只有在多层系统、dbExpress数据库应用系统、Oracle数据库(以及其它支持嵌套数据集的面向对象式数据库系统)应用程序时才需要用到。你上面提到的做法根本就是烂得一塌糊涂。要在两个ClientDataSet之间建立主从关系,只要设置作为从表的ClientDataSet的MasterSource,MasterFields,IndexFieldNames属性就可以。具体用法可以参考联机帮助。如果还不知道,加偶QQ283680636,最多15分钟给你讲解。
 
謝謝地質災害兄:
用mastersource的方式進行關聯,我試過了,確實是可以,但是,在修改主表數據后,在存盤時,會出現 update affected more than 1 record這樣的錯誤信息,才從網上找到一些文章
http://topic.csdn.net/t/20000109/11/406.html
http://dn.codegear.com/tw/article/29825
所以就有了上面的問題,^_^,如果老兄愿意指教的話,明天就加你QQ向你請教,先謝謝了!
 
后退
顶部