我想在數據庫編寫一個這樣功能的存儲過程:
在采購表單tPurchaseOrder中有幾個字段:Order_courset(客戶),Order_dec(規格),Order_pric(單價)
在入庫表單tPOInComing字段中有Coming_courset(客戶),Coming_dec(規格),Coming_pric(單價)
在財務表單tCoumony字段中有Coumony_courset(客戶),Coumony_dec(規格),Coumony_pric(單價),
在DELPHI中有一個窗口,用來輸入某客戶的規格指定產品單價,同時改變采購表單,入庫表單中為空的單價(因考慮單價有變動,已采購付款的單價不需修改)和總價。
請給出這個功能的存儲過程,以及在DELPHI中用語句調用這個存儲過程的參數代碼,在DELPHI中ADOStoredProc與數據庫的連接都已成功,只需編寫代碼。如果分數不夠還可再加。

解决方案 »

  1.   

    这个可以使用触发器来实现,根本不需要使用存储过程,在采购表单表里设置一个触发器,当INSERT 或 UPDATE 的时候找出要更新的入库表单和财务表单里的对应项目,修改他就可以了
      

  2.   

    lsh_ahjz(我爱DELPHI) :能給我程式代碼嗎?
      

  3.   

    jinjazz(人雅的标记--落寞刺客):為什麼要這樣設?單價在采購時不知道,只有在財務輸入單價後才能寫入采購,入庫,出庫表中
      

  4.   

    jinjazz(人雅的标记--落寞刺客) :采購要不要錢那是董事長的事,這與我無關,我也不是在討論采購要不要錢的問題。
      

  5.   

    財務表單写insert和update触发器
      

  6.   

    CREATE PROCEDURE seabird
        @Order_courset varchar(50),@Order_dec varchar(50),@Order_pric varchar(50)
    AS
       update tPurchaseOrder set Order_pric=@Order_pric where Order_courset=@Order_courset and Order_dec=@Order_dec   update tPOInComing set Coming_pric=@Order_pric where Coming_courset=@Order_courset and Coming_dec=@Order_dec and Coming is not null
    GO
      

  7.   

    /*67 调整入库单价,修改当前移动均价*/
    ALTER PROCEDURE SMSP_EditStockPrice
      @Storage01 integer ,/*修改的入库清单编号*/
      @CurPrice  numeric(15,6) , /*修改后的入库商品的入库单价*/
      @ReturnInfo varchar(100) OUTPUT   /*返回信息*/
    AS
      
      DECLARE
        @InStoreOdd01 varchar(20),   /*对应的入库单编号*/
        @SumInOdd01 varchar(20),     /*汇总入库单编号*/
        @Goods01 varchar(30),        /*商品编号*/
        @Goods02 varchar(30),        /*商品名称*/
        @StoreNum numeric(11,2),     /*当前结存库存量*/
        @CurAverPrice numeric(15,6), /*当前移动均价*/
        @StorageNum numeric(11,2),   /*入库清单的入库数量*/
        @StoragePrice numeric(15,6),   /*入库清单的暂估入库价格*/
        @NewAverPrice numeric(15,6) /*新的移动均价*/
        /*更新商品属性中的移动均价*/
        /*新的商品移动均价=结存库存量×当前移动均价+调整入库商品的入库数量×(发票入库单价-暂估入库单价)/结存库存量*/
        /*注意结存数为0不能修改入库单价*/    /*根据入库清单编号查找商品编号,根据商品编号查询该商品的当前结存数,如果为0 退出*/
        SELECT @Goods01=Goods01,@StoragePrice=Storage05,@StorageNum=Storage04,@InStoreOdd01=InStoreOdd01  --入库商品编号、单价、数量
        FROM Storage
        WHERE Storage01=@Storage01    SELECT @Goods02=Goods02,@CurAverPrice=Goods22  --商品名称、移动单价
        FROM Goods
        WHERE Goods01=@Goods01    SELECT @StoreNum=SUM(Storage12)
        FROM Storage
        WHERE Goods01=@Goods01
        AND Storage12>0    IF (@StoreNum IS NULL) OR (@StoreNum=0)
        BEGIN
          SET @ReturnInfo='商品:<'+@Goods02+'>,由于当前库存的结存数量为0,无法分摊因调整入库单价造成的差额,不能调价!'
          RETURN
        END
       
        SET @NewAverPrice=(@StoreNum*ISNULL(@CurAverPrice,0)+@StorageNum*(@CurPrice-@StoragePrice))/@StoreNum    /*修改商品的移动均价*/
        UPDATE Goods SET Goods22=@NewAverPrice
        WHERE Goods01=@Goods01    /*修改商品入库单价*/
        UPDATE Storage SET Storage05= @CurPrice
        WHERE Storage01=@Storage01
       
        /*修改商品入库单入库金额*/
        UPDATE InStoreOdd SET InStoreOdd05=InStoreOdd05+@StorageNum*(@CurPrice-@StoragePrice)
        WHERE InStoreOdd01=@InStoreOdd01
        
        /*如果入库单已经汇总到汇总入库单中,更新汇总入库单金额*/
        SELECT @SumInOdd01=InStoreOdd17
        FROM InStoreOdd
        WHERE InStoreOdd01=@InStoreOdd01
       
        IF ISNULL(@SumInOdd01,'')<>''
        BEGIN
          UPDATE SumInOdd SET SumInOdd04=SumInOdd04+@StorageNum*(@CurPrice-@StoragePrice)
          WHERE SumInOdd01=@SumInOdd01
        END
        SET @ReturnInfo='成功调整入库单价!已修改入库单价、移动均价、入库单金额、汇总入库单金额。'/*--------------------------------*/
    GO
      

  8.   

    delphiseabird(沙鸥):在DELPHI调用中不指明条件直接用EXEC能行吗?我用以下语句怎么调用不成功
    with ADOStoreProc1 do
      begin
         Parameters.ParamByName('@Order_courset').value:=edtcousset.text;
         Parameters.ParamByName('@Order_dec').value:=edtdec.text;
         Prepared:true;
      end;
      

  9.   

    dephi要怎样调用存储过程,谁有例子,能不能发一个
    [email protected]
      

  10.   

    SP_AutoSetSumInOdd是ADO存储过程,设置调用的存储过程。
    SP_AutoSetSumInOdd.Parameters.ParamByName('@EndDate').Value := frmSetDateTime.C_Date;
          SP_AutoSetSumInOdd.Parameters.ParamByName('@UserName').Value :=frmLogin.sUserName+'['+frmLogin.sUserID+']';
          SP_AutoSetSumInOdd.ExecProc;
          ShowMessage(SP_AutoSetSumInOdd.Parameters.ParamByName('@ReturnInfo').Value);
      

  11.   

    @ReturnInfo为存储过程中定义的输出变量
      

  12.   

    readersm68(地主):你這句SP_AutoSetSumInOdd.Parameters.ParamByName('@UserName').Value :=frmLogin.sUserName+'['+frmLogin.sUserID+']';是什麼作用,我下面語句到底錯在那裡
    with ADOStoreProc1 do
      begin
    Parameters.ParamByName('@Order_courset').value:=edtcousset.text;
         Parameters.ParamByName('@Order_dec').value:=edtdec.text;
         Prepared:true;
      end;
    ADOStoreProc1是我在ADO的存储过程,具體要怎樣修改才能執行。謝謝你的支持!!