在三层结构下如何提交一个主从表的记录,主表可以保存,从表不行了,不要告诉我就用ClientDataSete的属性ApplyUpdates,请大家帮着查查,为什么主表可以,从表不行。主表采用的是
commandText的方法,而从表是用ApplyUpdates的方法。能给一些例子或方法吗?
谢谢!
数据库为ORACLE,主表中DJH是关键字,从表中Masterid和ID为关键字,其中主表中的
DJH关联从表中的Masterid.
 s_Sql:='insert into chwTest(DJH,opdate,memo)'
        +' Values('''+djhed.Text+''',:opdate,'''+memoed.Text+''')';
  with Dm.mastCDataSet do
  begin
    Close;
    CommandText:=s_Sql;
    Params.ParamByName('opdate').Value:=formatdatetime('yyy-mm-dd',opdtp.Date);
    Execute;
  end;
//以上是数据写入主表
//以下是打开从表,写入数据
  s_Sql:='select * from chwtestdet where masterid='''+djhed.Text+'''';
  with Dm.mastCDataSet do
  begin
    Close;
    CommandText:=s_Sql;
    Open;
    Dm.detCDataSet.Edit;
    DM.detCDataSet.Post;
    Dm.detCDataSet.First;
    I:=1;
//以下的代码的作用是把从表(对应的ClientDataSet为DM.detCDataSet)中的数据
写到另一个空的ClientDataSet中即DM.mastCdataSet
    while not Dm.detCDataSet.Eof do
    begin
      DM.mastCDataSet.Insert;
      Fieldbyname('masterid').AsString:=djhed.Text;
      Fieldbyname('Id').AsString:=inttostr(I);
      Fieldbyname('code').AsString:=DM.detCDataSet.fieldbyname('code').AsString;
      Fieldbyname('name').AsString:=DM.detCDataSet.fieldbyname('name').AsString;
      Fieldbyname('spec').AsString:=DM.detCDataSet.fieldbyname('spec').AsString;
      Fieldbyname('memo').AsString:=DM.detCDataSet.fieldbyname('memo').AsString;
      inc(I);
      DM.detCDataSet.Next;
    end;
    I:=DM.mastCDataSet.ApplyUpdates(-1);
//以上是提交数据
    if I>0 then showmessage('保存失败!')else
    showmessage('保存成功!');
    Exit;
  end;

解决方案 »

  1.   


      s_Sql:='select * from chwtestdet where masterid='''+djhed.Text+'''';
      with Dm.mastCDataSet do
      begin
        Close;
        CommandText:=s_Sql;
        Open;
        Dm.detCDataSet.Edit;
        DM.detCDataSet.Post;
        Dm.detCDataSet.First;
        I:=1;
    //以下的代码的作用是把从表(对应的ClientDataSet为DM.detCDataSet)中的数据
    写到另一个空的ClientDataSet中即DM.mastCdataSet
        while not Dm.detCDataSet.Eof do
        begin
          DM.mastCDataSet.Insert;
          Fieldbyname('masterid').AsString:=djhed.Text;
          Fieldbyname('Id').AsString:=inttostr(I);
          Fieldbyname('code').AsString:=DM.detCDataSet.fieldbyname('code').AsString;
          Fieldbyname('name').AsString:=DM.detCDataSet.fieldbyname('name').AsString;
          Fieldbyname('spec').AsString:=DM.detCDataSet.fieldbyname('spec').AsString;
          Fieldbyname('memo').AsString:=DM.detCDataSet.fieldbyname('memo').AsString;
          post;//注意这里,需要保存
          inc(I);
          DM.detCDataSet.Next;
        end;
        I:=DM.mastCDataSet.ApplyUpdates(-1);
    //以上是提交数据
        if I>0 then showmessage('保存失败!')else
        showmessage('保存成功!');
        Exit;
      end;