功夫终于没有白费

    技术2022-05-11  56

           其实这几天一直想把VBA程序里的那段代码优化一下,因为那段代码是写在程序里面执行的,效率很低,改进的话就写成一个储存过程算了。不过,由于是多条件查询,所以,想来想去,今天最终还是在储存过程中执行动态sql语句,这样做的好处就是可以传递一段条件语句,也就是传一个参数就行了,不用一个一个参数的传,还得加好多判断。第一次写这样的储存过程,还真的有点不习惯,还花了不少时间去调试。不过,还好,总算调试通过了。下面我把储存过程的代码和调用实例放上来,如果大家觉得还有什么好的建议的话,我们可以一起讨论一下。

     /*  先创建有两个输入参数,一个输出参数的储存过程*/create procedure 总部送货单数量求和    @条件  nvarchar(1000),   @销售方式  nvarchar(100),   @总数  int outputas   declare @sql nvarchar(4000)IF (isnull(@条件,'s')) <>'s' beginset @sql="SELECT  sum(isnull(总部送货单明细.数量,0)) FROM 总部送货单明细  INNER JOIN 总店送货单 ON 总店送货单.送货单号 = 总部送货单明细.送货单号  INNER JOIN 产品资料表 ON 产品资料表.产品编号 = 总部送货单明细.产品名称  INNER JOIN hjg销售方式 ON hjg销售方式.销售方式编号 = 总部送货单明细.销售方式  LEFT OUTER JOIN 回桶明细表 ON 总部送货单明细.送货单号 = 回桶明细表.送货单号 AND  总部送货单明细.产品名称 = 回桶明细表.产品名称  LEFT OUTER JOIN 回库明细表 ON 回库明细表.送货单号 = 总部送货单明细.送货单号 AND 回库明细表.产品名称 = 总部送货单明细.产品名称  WHERE 总店送货单.落单日期 > (SELECT MAX(盘点日期) FROM dbo.盘点主表) "+ @条件 +" and  hjg销售方式.销售方式 ='"+@销售方式 +"'"  EXEC @总数=sp_executesql   @sql  OUTPUT  --执行,获得返回值  end

    /* 先写一个函数,方便多次调用。

    */Function 查询总数(sql_wh As String, fs As String) As String

     Dim comm As New ADODB.Command Set comm = New ADODB.Command Dim rs As New ADODB.Recordset Set rs = New ADODB.Recordset  Dim prmByRoyalty, prmByRoyalty2, prmByRoyalty3 As ADODB.Parameter

     comm.CommandText = "总部送货单数量求和" comm.CommandType = adCmdStoredProc comm.ActiveConnection = CurrentProject.Connection

     Set prmByRoyalty = comm.CreateParameter("条件", adVarChar, adParamInput, 400) Set prmByRoyalty2 = comm.CreateParameter("销售方式", adVarChar, adParamInput, 400) Set prmByRoyalty3 = comm.CreateParameter("总数", adInteger, adParamReturnValue, 4)  comm.Parameters.Append prmByRoyalty comm.Parameters.Append prmByRoyalty2 comm.Parameters.Append prmByRoyalty3 prmByRoyalty.Value = sql_wh prmByRoyalty2.Value = fs  Set comm.ActiveConnection = CurrentProject.Connection Screen.MousePointer = 11 rs.Open comm, , 1, 1 Screen.MousePointer = 1 查询总数 = Nz(rs.Fields.Item(0).Value, 0)  '返回值End Function

    /*  在程序中调用函数

    */

    sql_wh=....  /*略*/

     Me.调出 = 查询总数(sql_wh, "调出")

    PS:

        记录一下今天的日子,2007年2月9号,想不到这么快就有30天了,幸福的时光总是过得那么快!

     

     


    最新回复(0)