怪问题(100分)

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

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库是sqlserver2000,主从表:master(id,name)和Item(id1,id,price),
我在数据库里把主表(master)的id与从表(item)的id建立关系(主键和外键),在
delphi6编程做一个主从表保存的例子,用Ado连接sqlserver2000,保存代码:
adoMaster.UpdateBatch; //保存主表
adoItem.UpdateBatch; //然后保存从表

运行发现一个问题,当填写完主从表的数据,然后保存时,只保存主表,不能保存
从表。如果我把数据库sqlserver2000的主表id与从表id建立的主键和外键关系删除掉,
我把delphi6的保存代码改为:
adoItem.UpdateBatch; //先保存从表
adoMaster.UpdateBatch; //然后保存主表

这样就没有问题了。我的问题是,我想保留在数据库里的主表(master)的id与从表(item)
的id的关系(主键和外键),在delphi6编程时能保存数据,如何做呢?delphi6已经打了两个补
丁。
 
很简单,你要在从表新增记录之前先POST主表,以便从表从主表取得ID
 
这样肯定不行了,因为我在从表的ONNewRecord事件里,已经取出主的id的值了。
 
你如果在程序设计中用了MasterFields关联主键,就不用在OnNewRecord中取值,
从表会自动加上主表的当前记录的ID为ID的,让系统处理比自己处理好些。
 
To ysai,我不知道你有没有这方面的实践,我看你这样写肯定不行的(虽然我没有试过)。
有谁做过,在主从表建立主键和外键的关系(是在sqlserver2000里设置主键和外键),而
且可以在delphi6编写程序实现添加和保存主从表。能否给我一个例子,是用ado连接数据库
的。
 
我的是在ACCESS和SQL SERVER 2000中都能用!
 
to ysai:
把你的例子给我看看,我要sqlserver2000的。多谢!

chentao@fuxi.com
 
ysai是对的,在DELPHI中建立主从关系后,从表会自动取主表的ID值。你的问题非常简单
如果是批更新,最好用如下形式更新主从表:
procedure PostData;
begin
ADOCnn.BeginTrans;
try
tabA.UpdateBatch;
tabB.UpdateBatch;
ADOCnn.CommitTrans;
except
ADOCnn.RollbackTrans;
end;
end;
 
接受答案了.
 
后退
顶部