Sql 未进行除法时的0除法错误

Sql 未进行除法时的0除法错误,sql,vba,ms-access,Sql,Vba,Ms Access,我正在vba中运行一个简单的插入查询 DoCmd.RunSQL "INSERT INTO tblBldgComparePer ( Bldg, Utility, LYRAvgUnits, LYRAVGUNITDif, LYRUnits, LYRUNITDIF, PrevMonUnits, PMUNITDIF, CurrentUnits, AvgOfTotCost, LYRAVGCOSTDif, LYRTotCost, LYRCOSTDIF, PrevMonTotCost, PMCOSTDIF, C

我正在vba中运行一个简单的插入查询

DoCmd.RunSQL "INSERT INTO tblBldgComparePer ( Bldg, Utility, LYRAvgUnits, LYRAVGUNITDif, LYRUnits, LYRUNITDIF, PrevMonUnits, PMUNITDIF, CurrentUnits, AvgOfTotCost, LYRAVGCOSTDif, LYRTotCost, LYRCOSTDIF, PrevMonTotCost, PMCOSTDIF, CurrentTotCost ) SELECT qryBldgComparePer.Bldg, qryBldgComparePer.Utility, qryBldgComparePer.LYRAvgUnits, qryBldgComparePer.LYRAVGUNITDif, qryBldgComparePer.LYRUnits, qryBldgComparePer.LYRUNITDIF, qryBldgComparePer.PrevMonUnits, qryBldgComparePer.PrevMonUNITDif, qryBldgComparePer.CurUnits, qryBldgComparePer.LYRAVGTotCost, qryBldgComparePer.LYRAVGTotCostDif, qryBldgComparePer.LYRTotCost, qryBldgComparePer.LYRTotCostDIF, qryBldgComparePer.PrevMonTotCost, qryBldgComparePer.PrevMonTotCostDif, qryBldgComparePer.CurTotCost FROM qryBldgComparePer;", False
但是,当我运行此查询时,我得到一个除以0的错误。它所基于的查询,
qryBldgComparePer
显示得很好,没有被0除的错误。有可能,但如果分母为0,我可以在IIF语句中放入字段,使字段改为=0。在插入时,是否会绕过它,从而尝试除以0?我在网上查过了,没有发现类似的病例。非常感谢你们提供的任何帮助。谢谢大家!

以下是导致错误的所有代码:

strSQL = "SELECT bc.Bldg, bc.Utility, bc.LYRAVGUnits, IIF( bc.LYRAvgUnits = 0, NULL, Abs(([bc].[LYRAvgUnits]-[bc].[CurUnits])/[bc].[LYRAvgUnits])) AS [LYRAVGUNITDif], bc.LYRUnits, IIF( bc.LYRUnits = 0, NULL, Abs(([bc].[LYRUnits]-[bc].[CurUnits])/[bc].[LYRUnits])) AS [LYRUNITDif], bc.PrevMonUnits, IIF( bc.PrevMonUnits = 0, NULL, Abs(([bc].[PrevMonUnits]-[bc].[CurUnits])/[bc].[PrevMonUnits])) AS [PrevMonUNITDif], bc.CurUnits, bc.LYRAVGTotCost, IIF(bc.LYRAvgTotCost = 0, NULL, Abs(([bc].[LYRAvgTotCost]-[bc].[CurTotCost])/[bc].[LYRAvgTotCost])) AS [LYRAVGTotCostDif], bc.LYRTotCost, IIF(bc.LYRTotCost = 0, NULL, Abs(([bc].[LYRTotCost]-[bc].[CurTotCost])/[bc].[LYRTotCost])) AS [LYRTotCostDif], bc.PrevMonTotCost, IIF( bc.PrevMonTotCost = 0, NULL, Abs(([bc].[PrevMonTotCost]-[bc].[CurTotCost])/[bc].[PrevMonTotCost])) AS [PrevMonTotCostDif], bc.CurTotCost FROM qryBldgCompare AS bc " & _
"WHERE (bc.CurUnits <> 0) AND ((((Abs(([bc].[LYRAvgUnits]-[bc].[CurUnits])/[bc].[LYRAvgUnits]))>" & PerDif & ")) OR (((Abs(([bc].[LYRUnits]-[bc].[CurUnits])/[bc].[LYRUnits]))>" & PerDif & ")) OR (((Abs(([bc].[PrevMonUnits]-[bc].[CurUnits])/[bc].[PrevMonUnits]))>" & PerDif & ")) OR (((Abs(([bc].[LYRAvgTotCost]-[bc].[CurTotCost])/[bc].[LYRAvgTotCost]))>" & PerDif & ")) OR (((Abs(([bc].[LYRTotCost]-[bc].[CurTotCost])/[bc].[LYRTotCost]))>" & PerDif & ")) OR (((Abs(([bc].[PrevMonTotCost]-[bc].[CurTotCost])/[bc].[PrevMonTotCost]))>" & PerDif & ")));"
CurrentDb.QueryDefs("qryBldgComparePer").SQL = strSQL
DoCmd.RunSQL "DELETE FROM tblBldgComparePer;"
DoCmd.RunSQL "INSERT INTO tblBldgComparePer ( Bldg, Utility, LYRAvgUnits, LYRAVGUNITDif, LYRUnits, LYRUNITDIF, PrevMonUnits, PMUNITDIF, CurrentUnits, AvgOfTotCost, LYRAVGCOSTDif, LYRTotCost, LYRCOSTDIF, PrevMonTotCost, PMCOSTDIF, CurrentTotCost ) SELECT qryBldgComparePer.Bldg, qryBldgComparePer.Utility, qryBldgComparePer.LYRAvgUnits, qryBldgComparePer.LYRAVGUNITDif, qryBldgComparePer.LYRUnits, qryBldgComparePer.LYRUNITDIF, qryBldgComparePer.PrevMonUnits, qryBldgComparePer.PrevMonUNITDif, qryBldgComparePer.CurUnits, qryBldgComparePer.LYRAVGTotCost, qryBldgComparePer.LYRAVGTotCostDif, qryBldgComparePer.LYRTotCost, qryBldgComparePer.LYRTotCostDIF, qryBldgComparePer.PrevMonTotCost, qryBldgComparePer.PrevMonTotCostDif, qryBldgComparePer.CurTotCost FROM qryBldgComparePer;", False
strSQL=“选择bc.Bldg,bc.Utility,bc.LYRAVGUnits,IIF(bc.LYRAVGUnits=0,NULL,Abs([bc].[LYRAVGUnits]-[bc].[CurUnits]/[bc]/[bc].[LYRAVGUnits])作为[LYRAVGUNITDif],bc LYRAVGUnits,IIF(bc lyriririvgunits=0,NULL,Abs([bc].[LYRAVGUnits]-[bc]/[bc].[CurUnits]/[bc]作为[lyrdiff],bc.PrevMonUnits,IIF([bc])。[PrevMonUnits]-[bc].[CurUnits]/[bc].[PrevMonUnits])作为[PrevMonUNITDif],bc.CurUnits,bc.LYRAVGTotCost,IIF(bc.LYRAVGTotCost=0,NULL,Abs([bc].[LYRAVGTotCost]/[bc].[LYRAVGTotCost])作为[LYRAVGTotCostDif],bc.LYRTotCost,IIF(bc.LYRTotCost=0,NULL,Abs([bc].[LYRTotCost]/[bc].[Lyrtcost])[LYRTotCostDif]、bc.PrevMonTotCost、IIF(bc.PrevMonTotCost=0,NULL,Abs([bc].[PrevMonTotCost]-[bc].[CurTotCost]/[bc].[PrevMonTotCost])作为[PrevMonTotCostDif]、bc.CurTotCost从qryBldgCompare作为bc”&_
其中(bc.CurUnits 0)和(((Abs(([bc].[LYRAvgUnits].[bc].[CurUnits]/[bc].[LYRAvgUnits].[LYRAvgUnits])>)或((Abs([bc].[LYRUnits].[CurUnits]/[bc].[LYRUnits])或(((Abs([bc].[PrevMonUnits].[bc].[CurrUnits].[PrevMonUnits]/[bc].[PrevMonUnits]))>)或(([LyrRotUnits].[LyrOtbc].[LyrotUnits].[LyrOtbc].[LyrOtbc]/[LyrOttf&]))或([C].[LyrOtt]成本].[LyrOttf&])>“&PerDif&”或((Abs(([bc].[LYRTotCost].[bc].[CurTotCost])/[bc].[LYRTotCost])>”&PerDif&”)或((Abs([bc].[PrevMonTotCost].[bc].[CurTotCost]/[bc].[PrevMonTotCost])>“&PerDif&”);”
CurrentDb.querydfs(“qryBldgComparePer”).SQL=strSQL
DoCmd.RunSQL“从tblBldgComparePer删除
DoCmd.RunSQL“插入tblBldgComparePer(建筑、公用事业、LYRAvgUnits、LYRAVGUNITDif、LYRUnits、LYRUNITDIF、PrevMonUnits、PMUNITDIF、CurrentUnits、AvgOfTotCost、LYRAVGCOSTDif、LyrToToToToCost、LYRCOSTDIF、PrevMonToToToToToCost、PMCOSTDIF、CurrentToToToCost)选择qryBldgComparePer.Bldg、qryBldgComparePer.PUBLITY、qryBldgComparePer.LYRAVGUNITF、qryBldgComparePer.LYRRUNITS、qryBldgComparePer.LYRRUNITF、qryBldgComparePer.PREVIMONUTS、qryBldgComparePer.PREVIMONUTIF、qryBldgComparePer.LYRAVGTOTFdgComparePer.LyrtoCost,qryBldgComparePer.LyrtoCostDif,qryBldgComparePer.PrevMontoToCost,qryBldgComparePer.PrevMontoToCostDif,qryBldgComparePer.CurtoCostDif,qryBldgComparePer;“,False

这可能发生在您的
WHERE
子句中:

WHERE (bc.CurUnits <> 0) AND 
      ((((Abs(([bc].[LYRAvgUnits]-[bc].[CurUnits])/[bc].[LYRAvgUnits]))>" & PerDif & "))

tblBldgComparePer
是驻留在外部SQL Server或Oracle数据库上的链接表吗?它有插入触发器吗?tblBldgComparePer有计算/虚拟列吗?没有tblBldgComparePer只是Access中的一个常规表。我不确定这两个表是什么,但我不这么认为。我可能知道它们是什么它有一个。
WHERE (IIF(bc.CurUnits = 0 , 0, Abs(([bc].[LYRAvgUnits]-[bc].[CurUnits])/[bc].[LYRAvgUnits])>" & PerDif & ")