sqlserver2000下mastertable/detailtable表,以字段‘入库单号’相连,主从表用来表示一个入库表单,mastertable为表单的通用项,如此表单的编号,入库人,入库日期等等,detailtable表示入库单的主体,如入库零件,数量,单价等等
主外键都设置好了,delphi中用2个adoquery分别连接主从表,2个datasource,多个DBEdit连接主表,一个dbgrid连接从表,一个DBNavigator用来新建表单,删除表单。1.用从表的Datasource进行主从表同步,而在主表也就是入库单的MasterQuery的AfterScroll中,进行从表刷新
procedure TFrom1.MasterQueryAfterScroll(DataSet: TDataSet);
begin
    //保持主从表同步
  DetailQuery.Parameters.ParamByName('入库单号').Value :=
    MasterQuery.fieldbyname('入库单号').Value; 
    if DetailQuery.Active then
  begin
    DetailQuery.Close;
    DetailQuery.Open;
  end;
end;
2.从表的更新方式改为批量更新。DetailQuery.locktype:=ltBatchOptimistic;
3.主表的NewRecord事件中,给入库单编号赋值(我定义的入库单号不是自动增长的)
   
4.从表的NewRecord事件中把入库单的编号等于主表的入库单编号5.在保存按钮中
try
  DM.ADOConnection1.BeginTrans;
    try      if datesourceMaster.DataSet.State in [dsInsert,dsEdit] then
        datesourceMaster.DataSet.Post;
      
      DetailQuery.UpdateBatch;      DM.ADOConnection1.CommitTrans;
    except
      DetailQuery.CancelBatch;
      DM.ADOConnection1.RollbackTrans;
    end;
  finally      end;添加后,只在主表中添加了记录,而从表中没有添加,若从表的更新方式不改为批量更新,
try
  DM.ADOConnection1.BeginTrans;
    try      if datesourceMaster.DataSet.State in [dsInsert,dsEdit] then
        datesourceMaster.DataSet.Post;
      if datesourceDetail.DataSet.State in [dsInsert,dsEdit] then
        datesourceDetail.DataSet.Post;       
      DM.ADOConnection1.CommitTrans;
    except
            DM.ADOConnection1.RollbackTrans;
    end;
  finally      end;
则提示违反了主表的外键约束,
急死我了,各位大虾帮帮忙吧!