var
  HeadData :Variant;
  An,a :Integer;
begin
  inherited;
  HeadData :=null;
  HeadData :=VarArrayCreate([0,qyCust.FieldCount -1],varVariant);
  for an :=0 to qyCust.FieldCount -1 do
  HeadData[An] :=qyCust.Fields[an].Value;
  ClientDataSet1.Data :=qyCustMx.Data;
  ClientDataSet2.Data :=qyCustN.Data;
  if (qyCust.ChangeCount >0) or (qyCustN.ChangeCount>0) or (qyCustMx.ChangeCount>0) then
  begin
   an :=Application.MessageBox('',' ', mb_YesNocancel+mb_IconQuestion+mb_DefButton2);
    if an=idyes then
     begin
       PostData;
     end;    IF An=IdNo  Then
       Begin
        qyCust.CancelUpdates;
        qyCustMx.CancelUpdates;
       End;
   IF An=IdCancel Then exit;
   
  end;   qyCust.Insert;
   for an :=0 to qyCust.FieldCount -1 do    if (qyCust.Fields[An].IsNull) and (qyCust.Fields[an].FullName<>'docid') then
    //qyCust.Edit;
     qyCust.Fields[an].Value :=HeadData[an];
     qyCust.FieldByName('DocId').asstring :='';
     HeadData :=null;
     qyCustMx.Active:=False;
     changeSql('select * from '+DetailTable+' Where DocId='+#39+qyCust.FieldByname('DocId').AsString+#39+' '+DetailSortStr,qyCustMx);
     qyCustMx.Active:=True;
     qyCustMx.Last;     ClientDataSet1.First;
     While Not ClientDataSet1.Eof Do
     Begin
      qyCustMx.append;
      For A:=0 to  ClientDataSet1.FieldCount-1 do
      qyCustMx.fieldByname(ClientDataSet1.fields[a].fieldName).text:=ClientDataSet1.fields[a].text;
      qyCustMx.post;
      ClientDataSet1.next;
     End;     qyCustN.Active :=False;
     changeSql('select * from EvaN Where DocId='+#39+qyCust.FieldByname('DocId').AsString+#39+' '+DetailSortStr,qyCustN);
     qyCustN.Active:=True;
     qyCustN.Last;
    // getmaxDetailLine1;
     ClientDataSet2.First;
    while not ClientDataSet2.eof do
    begin
      qyCustN.Append;
      for a :=0 to ClientDataSet2.FieldCount -1 do
      qyCustN.FieldByName(ClientDataSet2.Fields[a].FieldName).text :=ClientDataSet2.Fields[a].text;
      qyCustN.Post;
      ClientDataSet2.Next;
    end;  问题很奇怪,有的可以复制,有的就不可以。查不出错误在哪里?