数据库中问了很多主细表的问题,可是没有我满意的,现在还是不得不问啊。谢谢
我主表设置了关键字“单据编号”,从表用“单据编号”和主表关联起来,但是从表没有关键字,也就是说单据编号+货物编号可以为多条记录,在新增时,当主表的单据编号加入后,我现Post主表,然后再Edit主表,Edit细表,然后细表逐项增加数据,保存时却出错了,不知道是什么原因,我的做法如下:
  try
    ItemDataSet.Post;   //保存之前先Post,如果出错,则不保存,置于编辑状态
    MasterDataSet.Post;
    MasterDataSet.Edit;
    ItemDataSet.Edit;
  except
    Application.messagebox('数据保存失败!请检查编码是否重复,或稍后再试',p_msgTitle,MB_OK+mb_iconwarning);
    MasterDataSet.Edit;
    ItemDataSet.Edit;
    Abort;
  end;如果都不出错,然后再如下:
  if not DM.ADOConnection1.InTransaction then
  begin
    DM.ADOConnection1.BeginTrans;
    try
      MasterDataSet.updatebatch;
      ItemDataSet.UpdateBatch;
      DM.ADOConnection1.CommitTrans;
    except
      DM.ADOConnection1.RollbackTrans;
      Application.messagebox('数据保存失败!请检查编码是否重复。',p_msgTitle,MB_OK+mb_iconwarning);
      //raise;
      //Abort;
    end;
  end
  else
  begin
    Application.MessageBox('服务器忙请稍后再试!',p_msgTitle,MB_OK+mb_iconWarning);
  end;不知道是什么原因啊,在第一步细表Post的时候就出错,大家帮帮我找找原因。

解决方案 »

  1.   

    老兄把一个简单的事情搞得这么复杂。提示:
    1.在application中添加公共函数单元
      如:
        unit Unit_Pub_Function;    interface
        ...    //公共函数--保存主单
        function Save_Main(cId,FieldName,FieldValue:string):boolean;
        
        //公共函数--保存子单(明细单)
        function store_save_detail(cid,f_name,f_value:string):boolean;    ...
        //写这两个函数2.  其它的窗体中需要时,引用这两个函数旧可以了。
        
      

  2.   

    我在编辑时发现从表的GRID 会显示不出正在输入的数据。要先将主表POST 才行,唉.
      

  3.   

    用三层分布式编程,APPLYUPDATES!