关于主从更新的问题(100分)

  • 主题发起人 主题发起人 fstao
  • 开始时间 开始时间
F

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi的问题:
数据库为mssql7,有两个表,分别是dbo.mastertable(主表,字段为
masterid,name)和dbo.detailtable(从表,字段为detailid,name,这个
detailid与主表masterid关联的。)。用两tquery来做一个主从关系,用两个
Tupdatesql来处理数据,master(主表,是tquery)的cachedupdate为true,
sql语句为"select masterid,name from mastertable",detail(从表,是
tquery)的cachedupdate为true,sql语句为"select detailid,name from
detailtable where detailid=:deterid"。

form1的button1的onclick事件为:
Database1.StartTransaction;
try
Master.ApplyUpdates;
detail.ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
master.CommitUpdates;
detail.commitupdates;

form1的button2的onclick事件为:
master.insert;

master的AfterScroll事件为:
DETAIL.ParamByName('detailID').VALUE:=MASTER.FIELDBYNAME
('masterid').VALUE;
Detail.Close;
detail.Open;

detail的OnNewRecord事件为:
DETAILdetailID.VALUE:=MASTERmasterID.VALUE;


这样做得先按button2,然后在主表和从表插入数据,然后再按button1,才能
把主从数据保存。这样做有一个问题,每保存一条数据都要提交一次,我想
添加十多条记录,再提交一次。我上面的代码就有点问题,我master.insert多
条记录,再提交,只能保存最后一条主表记录的从表的记录,前面从表的数据都
不能保存,但可以保存全部主表的数据。请问如何做呢?

 
用cacheupdate
 
fasto:
呵呵,没办法,这是Delphi的缺陷,但不是Bug.

Cached updates and master-detail relationships
-----------------------------------------------
[Enterprise and Professional editions]
Cached Updates cannot be used effectively with
TQuery components when doing master-detail
links (DataSource property). This is because
the detail query is reexecuted each time the
master record pointer moves.
 
我想问这样的问题:
数据库是mssql7,有字段id、No、name和product_id,我想把product_id做成簇索
引,如何做?如果把product_id做成非簇索引,又如何做?
 
master的AfterScroll事件为:
DETAIL.ParamByName('detailID').VALUE:=MASTER.FIELDBYNAME
('masterid').VALUE;
* Detail.Close;
* detail.Open;
此处造成detail不能保存
 
fstao:这个问题以前碰到过。
你可以将
master的AfterScroll事件改为:
Detail.Filter:='detailID='+''''+masterid.FieldByname('masterid').asstring+'''';
Detail.Filtered:=True;

注意:不要在没保存前将
detail表 Close;
 
多人接受答案了。
 
后退
顶部