呵呵!我还是把代码直接粘上吧!大家看着比较方便!unit Purchase;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, ExtCtrls;type
  TForm4 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Bevel1: TBevel;
    Button1: TButton;
    Button2: TButton;
    ADOQuery1: TADOQuery;
    ADOQuery2: TADOQuery;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form4: TForm4;implementationuses PurchaseInfo, DataModule;{$R *.dfm}procedure TForm4.Button2Click(Sender: TObject);
begin
   form4.Close;
end;procedure TForm4.Button1Click(Sender: TObject);
var
  str:string;
  int:Integer;
begin
  if edit1.Text='' then
  begin
    showmessage('请输入采购单编号');
    edit1.SetFocus;
    exit;
  end;
  if edit2.Text='' then
  begin
    showmessage('请输入商品编号');
    edit1.SetFocus;
    exit;
  end;
  if edit3.Text='' then
  begin
    showmessage('请输入进货价');
    edit1.SetFocus;
    exit;
  end;
  if edit4.Text='' then
  begin
    showmessage('请输入进货数量');
    edit1.SetFocus;
    exit;
  end;
  adoquery1.Close;
  adoquery1.SQL.Clear;
  if form4.Tag=1 then
  begin
    adoquery1.SQL.Add('select * from Purchase where 采购单编号=:cgbh');
    adoquery1.Parameters.ParamByName('cgbh').Value:=edit1.Text;
    adoquery1.Open;
    if adoquery1.RecordCount>0 then
    begin
      showmessage('采购单编号已存在,请重新输入');
      edit1.Text:='';
      edit1.SetFocus;
      exit;
    end;
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('insert into Purchase');
    adoquery1.SQL.Add('values(:cgbh,:spbh,:jhj,:jhsl,:jhsj)');
  end;
  if form4.Tag=2 then
  begin
    str:=edit1.Text;
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('update Purchase set 采购单编号=:cgbh,商品编号=:spbh,'
    +'进货价=:jhj,进货数量=:jhsl,进货时间=:jhsj where 采购单编号=:oldcgbh');
    adoquery1.Parameters.ParamByName('oldcgbh').Value:=str;
  end;
  adoquery1.Parameters.ParamByName('cgbh').Value:=edit1.Text;
  adoquery1.Parameters.ParamByName('spbh').Value:=edit2.Text;
  adoquery1.Parameters.ParamByName('jhj').Value:=edit3.Text;
  adoquery1.Parameters.ParamByName('jhsl').Value:=edit4.Text;
  adoquery1.Parameters.ParamByName('jhsj').Value:=edit5.Text;
  adoquery1.ExecSQL;
  form5.ADOQuery1.Close;
  form5.ADOQuery1.Open;
  close;
end;end.

解决方案 »

  1.   

    case self.tag of
    1:
    begin
      //你的操作
      with adoquery1 do
      begin
        close;
        sql.text:='UPDATE MerchInfo SET 库存数量=库存数量+'+ 你的数量+' WHERE 商品编号='+Quoter(你的编号);
        execsql;
      end;
    end;
    2:
    begin
      //你的操作
      with adoquery1 do
      begin
        close;
        sql.text:='UPDATE MerchInfo SET 库存数量=库存数量+'+ 你的数量差+' WHERE 商品编号='+Quoter(你的编号);
        execsql;
      end;
    end;
    end;
      

  2.   

    CASE 语句???
    没用过,我是第一次用delphi,要放哪里????
    这样吧!你就当我怎么都不会!,直接添加到单元代码里面,那样子我还能看得懂!也方便我学习,谢谢!
      

  3.   

    其实,这个CASE语句我是看的懂,就是里面的SQL语句里面的数量及其数量差,以及Quoter不懂,关键是这里面如何获取几转化
      

  4.   

    是什么数据库,ACCESS 还是SQL??
      

  5.   

    如果是SQL可以在Puchase中写一个触发器,将更新修改的动作交给SQL,DELPHI中什么事都不用管了,省事,触发器代码以下create trigger Tr_Puchase on Puchase
    instead of insert, update
    as
    SET NOCOUNT ON
    if not exists(select 1 from deleted )--判断新增操作
    update MerchInfo set m.库存数量=m.库存数量+i.进货数量 from MerchInfo m,inserted i 
    where m.商品编号=i.商品编号
    else 
    update MerchInfo set 库存数量=库存数量-(m.库存数量-d.库存数量)
    from MerchInfo m,deleted d where m.商品编号=d.商品编号
    SET NOCOUNT OFF    go
      

  6.   

    修正一下:create trigger Tr_Puchase on Puchase
    instead of insert, update
    as
    SET NOCOUNT ON
    if not exists(select 1 from deleted )--判断新增操作
    update MerchInfo set m.库存数量=m.库存数量+i.进货数量 from MerchInfo m,inserted i 
    where m.商品编号=i.商品编号
    else 
    update MerchInfo set 库存数量=库存数量-(d.库存数量-i.库存数量)
    from MerchInfo m,deleted d,inserted i where m.商品编号=d.商品编号
    SET NOCOUNT OFF    go