F
fstao
Unregistered / Unconfirmed
GUEST, unregistred user!
delphi的问题:
数据库为mssql7,有两个表,分别是dbo.mastertable(主表,字段为masterid,name)和dbo.detailtable
(从表,字段为detailid,name,这个detailid与主表masterid关联的。)。用两tquery来做一个主从关系,
用两个Tupdatesql来处理数据,querymaster(主表)的cachedupdate为true,sql语句为"select masterid,
name from mastertable",querydetail(从表)的cachedupdate为true,sql语句为"select detailid,
name from detailtable where detailid=:masterid"。
第一种方法:
querymaster的AfterPost事件为:
Database1.StartTransaction;
try
QueryMaster,ApplyUpdates;
detailMaster,ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
querymaster.CommitUpdates;
querydetail.commitupdates;
运行时,先querymaster.insert,然后在主表和从表写入数据,然后querymaster.post时,发现主表能更新
数据,而从表不能更新数据,也就是说从表的数据不见了,这是为什么?
第二种方法:
如果我在form里添加button1,
Onclick事件为:
Database1.StartTransaction;
try
detailMaster,ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
querydetail.commitupdates;
querymaster.post;
querymaster的AfterPost事件改为:
Database1.StartTransaction;
try
QueryMaster,ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
querymaster.CommitUpdates;
这样就会主从表更新了,这又是为何呢?为何我用第一种方法从表不能更新数据,而第二种就行?如何把
第一种方法的代码改一改?
数据库为mssql7,有两个表,分别是dbo.mastertable(主表,字段为masterid,name)和dbo.detailtable
(从表,字段为detailid,name,这个detailid与主表masterid关联的。)。用两tquery来做一个主从关系,
用两个Tupdatesql来处理数据,querymaster(主表)的cachedupdate为true,sql语句为"select masterid,
name from mastertable",querydetail(从表)的cachedupdate为true,sql语句为"select detailid,
name from detailtable where detailid=:masterid"。
第一种方法:
querymaster的AfterPost事件为:
Database1.StartTransaction;
try
QueryMaster,ApplyUpdates;
detailMaster,ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
querymaster.CommitUpdates;
querydetail.commitupdates;
运行时,先querymaster.insert,然后在主表和从表写入数据,然后querymaster.post时,发现主表能更新
数据,而从表不能更新数据,也就是说从表的数据不见了,这是为什么?
第二种方法:
如果我在form里添加button1,
Onclick事件为:
Database1.StartTransaction;
try
detailMaster,ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
querydetail.commitupdates;
querymaster.post;
querymaster的AfterPost事件改为:
Database1.StartTransaction;
try
QueryMaster,ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
querymaster.CommitUpdates;
这样就会主从表更新了,这又是为何呢?为何我用第一种方法从表不能更新数据,而第二种就行?如何把
第一种方法的代码改一改?