我用ADO时是这样写的.
var i:integer;
 with adoquery1 do
  begin
   close;
   sql.clear;
   sql.add('select distinct 物料编码 where zd_4 where 订单号码=:a and 公司款号=:b');
   parameters.parambyname('a').value:=trim(cxcombobox1.text);
   parameters.parambyname('b').value:=trim(cxcombobox2.text);
   open;
  end;
 for i:=0 to adoquery1.recordcount-1 do
  begin
   wiht adoquery2 do
    begin
      close;
      sql.clear;
      sql.add('select distinct 物料编码,物料类别,主显,次显 from zd_3 where 订单号码=:a and 公司款号=:b and 物料编码=:c');
      parameters.parambyname('a').value:=trim(cxcombobox1.text);
      parameters.parambyname('b').value:=trim(cxcombobox2.text);
      parameters.parambyname('c').value:=adoquery1.fieldbyname('物料编码').value;
      open;
    end;
   with adoquery3 do
    begin
     close;
     sql.clear;
     sql.add('update zd_4 set 物料类别=:a,主显=:b,次显=:c where 订单号码=:d and 公司款号=:e and 物料编码=:f');
      parameters.parambyname('a').value:=adoquery2.fieldbyname('物料类别').value;
      parameters.parambyname('b').value:=adoquery2.fieldbyname('主显').value;
      parameters.parambyname('c').value:=adoquery2.fieldbyname('次显').value;
      parameters.parambyname('d').value:=trim(cxcombobox1.text);
      parameters.parambyname('e').value:=trim(cxcombobox2.text);
      parameters.parambyname('f').value:=adoquery1.fieldbyname('物料编码').value;
      exesql;
     end;
   adoquery1.next;  end
 现在想把上面的写进SQL储存过程中,不知道如何写请教了.

解决方案 »

  1.   

    不用存储过程,看似能一句SQL语句就能完成
      

  2.   


    手写,你自己测测update zd_4 
    set 物料类别= z10.物料类别,主显= z10.主显,次显= z10.次显 
    from zd_4 z4,(select distinct 物料编码,物料类别,主显,次显 from zd_3 where 订单号码=:a and 公司款号=:b and 物料编码 in (select distinct 物料编码 where zd_4 where 订单号码=:a and 公司款号=:b)) z10
    where z4.订单号码=z10.订单号码 and z4.公司款号=z10.公司款号 and z4.物料编码=z10.物料编码
      

  3.   

    向楼上学习,攒个热闹:CREATE PROCEDURE Dmupdate
    @Orderon varchar(1000),
    @Companyon varchar(1000)
    AS
    begin
    DECLARE @id INT,@count int
    DECLARE @Orderontwo varchar(1000)
    DECLARE @Categories varchar(1000)---物料类别
    DECLARE @Main varchar(1000)--主要
    DECLARE @Minor varchar(1000)--次要select distinct [物料编码],IDENTITY(int,1,1)   AS   ID_Num into   #temp   
    from zd_4 where [订单号码]=@Orderon 
    and [公司款号]=@Companyonselect @count=count(distinct [物料编码]) from zd_4
            where [订单号码]=@Orderon 
            and [公司款号]=@Companyonset @id=1while @id<>@count 
    begin
     select @Orderontwo=[物料编码] from #temp 
            where ID_Num=@id
     
    select distinct [物料编码],@Categories=[物料类别],@Main=[主显],@Minor=[次显] from zd_3
           where [订单号码]=@Orderon and 
           [公司款号]=@Companyon and 
           [物料编码]=@Orderontwo
    update zd_4 set [物料类别]=@Categories,[主显]=@Main,[次显]=@Minor
           where [订单号码]=@Orderon and 
          [公司款号]=@Companyon and [物料编码]=@Orderontwoset @id=@id+1
    endend
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      A,B,vSQl:string;
    begin
      A:=Quotedstr(Trim(ComboBox1.Text));
      B:=Quotedstr(Trim(ComboBox2.Text));  vSQl:='update zd_4 set 物料类别=zd_3.物料类别,主显=zd_3.主显,次显=zd_3.次显'
            +' From zd_4 join zd_3 on zd_4.订单号码=zd_3.订单号码'
            +' and zd_4.公司款号=zd_3.公司款号 and zd_4.物料类别=zd_3.物料类别'
            +' and zd_4.订单号码='+A+' and zd_4.公司款号='+B;  ADOQuery1.Close;
      ADOQuery1.SQL.Text:=vSQl;
      ADOQuery1.ExecSQL;
    end;