procedure TfrmProduct.BitBtn1Click(Sender: TObject);
begin
  inherited;
  with quData do
  begin
    Close;
    Open;
    Insert;
    FieldByName('ProductCode').AsString:=Edit1.Text;
    FieldByName('Productname').AsString:=Edit2.Text;
    FieldByName('ProductClassId').AsInteger:=TransProductClassId(DBLookupComboBox1.Text);
    FieldByName('ServerId').AsInteger:=TransServerId(DBLookupComboBox2.Text);
    FieldByName('StockCode').AsString:=Edit3.Text;
    FieldByName('Amount').AsString:=Edit4.Text;
    FieldByName('UnitPrice').AsString:= Edit5.Text;
    FieldByName('StockTotalPrice').AsString:= Edit6.Text;
    FieldByName('RetailPrice').AsString:= Edit7.Text;
    FieldByName('Stockdate').AsDateTime:= DateTimePicker1.DateTime;
    FieldByName('SmallStorage').AsString:= Edit8.Text;
    FieldByName('ReMark').AsString:= Edit9.Text;
  end;
    ADOConnection1.Open;
    ADOConnection1.BeginTrans;
  try
    ADOConnection1.CommitTrans;
    InforMsg('保存成功');
  except
    ADOConnection1.RollbackTrans;
  end; 
end;quData的SQL为:
select a.ProductCode,a.Productname,c.ProductClassName,d.Servername,b.StockCode,
       b.Amount,b.UnitPrice,b.StockTotalPrice,a.RetailPrice,
       b.Stockdate,b.Re,a.SmallStorage,a.ProductPYM,a.ProductClassId,b.ServerIdfrom Product a
left join StockMX b on a.ProductID=b.ProductID
left join ProductClass c on a.ProductClassID=c.ProductClassID
left join Server d on b.ServerId=d.ServerId

解决方案 »

  1.   

    SQL语句在查询分析器里运行没问题吧?
    try
        quData.post//加上这个
        ADOConnection1.CommitTrans;
        InforMsg('保存成功');
      except
      

  2.   

    我遇到过,当时因为我用了cacheupdated你检查下,不能为true;或者用flush什么的写进硬盘。
      

  3.   

    Insert后没有Post
    如果用了Cacheupdate需要ApplyUpdates
      

  4.   

    procedure TfrmProduct.BitBtn1Click(Sender: TObject);
    begin
      inherited;
      ADOConnection1.Open;
      ADOConnection1.BeginTrans;
      try
        with quData do
        begin
          Close;
          Open;
          Insert;
          FieldByName('ProductCode').AsString:=Edit1.Text;
          FieldByName('Productname').AsString:=Edit2.Text;
          FieldByName('ProductClassId').AsInteger:=TransProductClassId(DBLookupComboBox1.Text);
          FieldByName('ServerId').AsInteger:=TransServerId(DBLookupComboBox2.Text);
          FieldByName('StockCode').AsString:=Edit3.Text;
          FieldByName('Amount').AsString:=Edit4.Text;
          FieldByName('UnitPrice').AsString:= Edit5.Text;
          FieldByName('StockTotalPrice').AsString:= Edit6.Text;
          FieldByName('RetailPrice').AsString:= Edit7.Text;
          FieldByName('Stockdate').AsDateTime:= DateTimePicker1.DateTime;
          FieldByName('SmallStorage').AsString:= Edit8.Text;
          FieldByName('ReMark').AsString:= Edit9.Text;
          Post;
        end;
        ADOConnection1.CommitTrans;
        InforMsg('保存成功');
      except
        ADOConnection1.RollbackTrans;
      end; 
    end;
      

  5.   

    楼主,你的BeginTrans不能够这么用的呀,要先BeginTrans,才进行插入,才进行Post,才进行CommitTrans。另外,建议用SQL来插入数据。
      

  6.   

    procedure TfrmProduct.BitBtn1Click(Sender: TObject);
    begin
      inherited;  ADOConnection1.BeginTrans;  //修改之处一  with quData do
      begin
        Close;
        Open;
        Insert;             //修改之处二,为什么不用UPDATE TABLE SET FIELD=‘’来插入呢
        FieldByName('ProductCode').AsString:=Edit1.Text;
        FieldByName('Productname').AsString:=Edit2.Text;
        FieldByName('ProductClassId').AsInteger:=TransProductClassId(DBLookupComboBox1.Text);
        FieldByName('ServerId').AsInteger:=TransServerId(DBLookupComboBox2.Text);
        FieldByName('StockCode').AsString:=Edit3.Text;
        FieldByName('Amount').AsString:=Edit4.Text;
        FieldByName('UnitPrice').AsString:= Edit5.Text;
        FieldByName('StockTotalPrice').AsString:= Edit6.Text;
        FieldByName('RetailPrice').AsString:= Edit7.Text;
        FieldByName('Stockdate').AsDateTime:= DateTimePicker1.DateTime;
        FieldByName('SmallStorage').AsString:= Edit8.Text;
        FieldByName('ReMark').AsString:= Edit9.Text;
      end;
        ADOConnection1.Open;  try
        ADOConnection1.CommitTrans;
        InforMsg('保存成功');
      except
        ADOConnection1.RollbackTrans;
      end; 
    end;
      

  7.   

    有两种可能,
      1)  少POST
      2)SQL语句有问题。
       插入时的表最好是单表的,
       a.ProductCode,a.Productname,c.ProductClassName,d.Servername,b.StockCode,
           b.Amount,b.UnitPrice,b.StockTotalPrice,a.RetailPrice
      这不是一个有的字段吧。