---------------------------
Debugger Exception Notification
---------------------------
Project Lotus.exe raised exception class EOleException with message '用户进程中发生浮点异常错误。已取消当前事务。'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------select yhyear,yhmonth,yhcode,yhname,yhaddress,yhkind,useamount,
dbo.sp_calcznj(yhyear,yhmonth,yhcode) as znj
from v_usedatabymonthdbo.SP_CANCZNJ是一个函数,在SQL中运行没有问题,但在程序中就报错~~~adoquery1.Connection:=FrmQCDM.ADOCon;
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Text:=' select yhyear,yhmonth,yhcode,yhname,yhaddress,yhkind,useamount,'+
                      ' dbo.sp_calcznj(yhyear,yhmonth,yhcode) as znj'+
                      ' from v_usedatabymonth where pay_lock=0 and yhcode='''+yhcode+'''';
  adoquery1.open;
  adoquery1.First;不知什么原因

解决方案 »

  1.   

    贴出dbo.sp_calcznj(yhyear,yhmonth,yhcode)这个SQL自定义函数,才能分析你的异常原因
      

  2.   

    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GOALTER   function Sp_CalcZNJ(@YHYEAR INT,@YHMONTH INT,@YHCODE VARCHAR(10) )  
    RETURNS NUMERIC(18,2)  
    AS  
    BEGIN  
    /*按月计算滞纳金*/  
    DECLARE @USEAMOUNT NUMERIC(18,2)  
    DECLARE @ZNJ NUMERIC(18,2)  
    DECLARE @BEGINTAXDAY INT   --滞纳金开始计算日,18  
    DECLARE @TAXPRICE NUMERIC(18,5)  --滞纳金率  
    DECLARE @DAYS INT --@YHMONTH月的天数  
    DECLARE @DATE varchar(10)  --  
    DECLARE @TAXDAY INT    --滞纳金天数  
    DECLARE @I INT  
    DECLARE @PARTSUM NUMERIC(18,2)  
    DECLARE @M NUMERIC(18,2)  
    DECLARE @SYSNO INT  
    DECLARE @D DATETIME     --当前日期  
    --DECLARE @YHYEAR INT  
    --DECLARE @YHMONTH INT  
    --DECLARE @YHCODE VARCHAR(10)  
    SET @I=1  
    SET @ZNJ=0
      
      
    --SET @YHYEAR=2010  
    --SET @YHMONTH=1  
    --SET @YHCODE='008901'  
    SELECT @D=Currentdate FROM V_GETDATE  
    --SELECT '当前日期:'+CAST(@D AS VARCHAR(11))
    SELECT @Date=cast(@YHYEAR AS CHAR(4))+'-'+CAST(@YHMONTH AS VARCHAR(2))+'-01'  
    --select '当前年'+cast(DATEPART(YEAR,@D) as Char(4) )
    --select '当前月'+cast(DATEPART(MONTH,@D) as Char(2) )
      
    if DATEPART(YEAR,@D)=@YHYEAR  AND DATEPART(MONTH,@D)=@YHMONTH  
    BEGIN  
    --如果是本月则按当前日计算  
     SELECT @DAYS=DATEPART(DAY,@D)  
    -- SELECT '是本月' 
    END  
    ELSE  
      
    Select @DAYS=datediff( dd, dateadd(mm,   DATEDIFF(mm,0,@Date),   0),  
     dateadd(ms,-3,DATEADD(mm,   DATEDIFF(m,0,@Date)+1, 0)) ) +1  --select '本月天数:'+cast(@days as varchar(10))  
      
      
    SELECT @USEAMOUNT=USEAMOUNT,@SYSNO=REF_SYSNO FROM V_USEDATABYMONTH   
    WHERE YHYEAR=@YHYEAR AND YHMONTH=@YHMONTH  
    AND YHCODE=@YHCODE AND PAY_LOCK =0  
    SELECT  @BEGINTAXDAY=TAXLIMIT,@TAXPRICE=TAXPRICE  
    FROM SYSDATA WHERE SERNO=@SYSNO  
      
      
    --SELECT '滞纳金计算开始日:'+CAST(@BEGINTAXDAY AS VARCHAR(10) )  
    --SELECT '滞纳金计:'+CAST(@TAXPRICE AS VARCHAR(10))  
    --计算滞纳金天数  
    SELECT @TAXDAY=@DAYS-@BEGINTAXDAY  --SELECT '滞纳金天数:'+CAST(@TAXDAY AS VARCHAR(10))  SET @M=0  --SELECT '本月应交费用:'+CAST(@USEAMOUNT AS VARCHAR(10))  SET @PARTSUM=@USEAMOUNT  
      
    --SET @TAXDAY=3  
      
    WHILE @I<=@TAXDAY  
    BEGIN  
      SET @M=@M+@PARTSUM*@TAXPRICE
      SET @PARTSUM=@PARTSUM+@M  
      SET @I=@I+1  
    --  SELECT '累计部分和:'+CAST(@M AS VARCHAR(10))  
    END  
    SET @ZNJ=@M  
    --SELECT '滞纳金:'+cast(@ZNJ AS VARCHAR(10))  RETURN (@ZNJ)  
      
    END  
      
      
    GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO