TDateset 有组件,Query1,Table2
Query1(主) 和Table2(从) 是主从表,
当同时向Query1 和Table2中 添加数据时,说table2不在edit或insert状态下。Unit1.pasprocedure TForm1.N_AddClick(Sender: TObject);//添加数据  界面到Form3中去了
begin
  Form3.ShowModal;
  Form1.N_allClick(self);
end;//////////////
Unit3.pas 中:  Form1.Query1.Close;
  Form1.Table2.Close;
  Form1.Query1.SQL.Clear;
  Form1.Query1.SQL.Append(str);
  Form1.Query1.Prepare;
  Form1.Query1.ExecSQL;
  Form1.Query1.Close;//如果没有下面的,就没有出错。  Form1.Table2.Open;
  Form1.Table2.Insert;
  Form1.Table2.AppendRecord([P_ID,P_Co_Name,P_Co_contact,P_Co_Phone,P_Co_Fax,P_Consultant,P_Signer,P_Sum,P_Auditing]);
  Form1.Table2.Post;
  Form1.Table2.Close;
  Form3.Close;

解决方案 »

  1.   

    AppendRecord会自动提交Post数据
    所以不用Post
      

  2.   

    Form1.Table2.Open;
      Form1.Table2.AppendRecord([P_ID,P_Co_Name,P_Co_contact,P_Co_Phone,P_Co_Fax,P_Consultant,P_Signer,P_Sum,P_Auditing]);
      Form1.Table2.Close;
      

  3.   

    Insert用法是追加一条空记录,AppendRecord用法是追加一条记录,
    InsertRecord、AppendRecord过程调用前需要把DataSet的状态改为Edit,Insert、Append、InsertRecord、AppendRecord调用之后会把DataSet的状态改为browse
    如:
      with Form1.Table2 do
      begin
         Open;
        Edit;
         AppendRecord([P_ID,P_Co_Name,P_Co_contact,P_Co_Phone,P_Co_Fax,P_Consultant,P_Signer,P_Sum,P_Auditing]);
         Close;
      end;或者:  with Form1.Table2 do
      begin
         Open;
         Insert;
        Edit;
         FieldByName('ID').AsString:=P_ID;     ... ...
         
         Post;
         Close;
      end;
      

  4.   

    Form1.Table2.Insert;
    Form1.Table2.AppendRecord([P_ID,P_Co_Name,P_Co_contact,P_Co_Phone,P_Co_Fax,P_Consultant,P_Signer,P_Sum,P_Auditing]);
    这两个不能同时出现在操作中吧~~
      

  5.   

    appendrecord和insertrecord都会自动提交的,post是要编辑数据时才用,一般是先table1.edit;
    table1.fieldbyname('??').value:=??;
    table1.post;
    插入整条记录时不用post