8
votes

VB6 Agrégation de Calc sur la forme de l'ADO Quand renvoie NULL Obtenir une erreur générale dans le rapport de données

J'utilise la commande ADO Shape sur mon rapport de données, cela fonctionne bien, mais lorsque ma fonction d'agrégation Calc (AgrProfit / accordxtended * 100) est NULL ou 0/0 * 100 Il indique une erreur générale et un rapport de données ne s'affingeant pas. S'il vous plaît aider.

mRS.Open "SHAPE {select products.productid,products.productcode,isnull(products.description,descr) as description,isnull(vendor.description,'*** NOT FOUND ***') as groupdescription, " & _
    "isnull(sum(totalcost),0) as mTotalCost,isnull(sum(extended) - (sum(totalcost)),0) as mProfit,  " & _
    "sum(charges) as mCharges,sum(discount) as mDiscounts, sum(retextended) as mReturns, " & _
    "reportuom, sum(totalcost) as mTotalCost, isnull(case when sum(extended) = 0 then 0 else (sum(extended) - (sum(totalcost)))/sum(extended)*100 end,0)  as mgpm, sum(totalcost) as mTotalCost, case when sum(extended) = 0 then 0 else (sum(extended) - (sum(totalcost)))/sum(extended)*100 end  as mgpm, sum(case when extended < 0 then  (0 - (totalqty/products.reportqty))  else (totalqty/products.reportqty) end) as mTotalQty, isnull(sum(extended),0) as mExtended,  sum(case when extended < 0 then  (0 - (totalqty/products.reportqty)) else (totalqty/products.reportqty) end) / " & mTotalQty & " * 100 as mPercTotalQty, sum(extended) / " & mTotalExtended & " * 100 as mPercExtended " & _
    "From " & _
        "(select finishedsales.QtyReturned,finishedsales.productid,finishedsales.description as descr, finishedsales.averageunitcost* case when [return]=1 then convert(money,0-totalqty) else totalqty end as TotalCost,(chargeallowance * qty) + (chargeamountdiscounted * qty) as charges,(allowance * qty) + (amountdiscounted * qty)+ (extended-(extended * multiplier)) as discount,0 as rettotalqty, 0 as retextended,totalqty,round(extended * multiplier,4) as extended  From finishedsales " & _
        " left join products on products.productid = finishedsales.productid " & _
        .gReportCriteria & _
        "Union All " & _
        "select finishedsales.QtyReturned, finishedsales.productid,finishedsales.description as descr,0 as totalcost,0 as charges,0 as discount,totalqty as rettotalqty ,abs(round(extended,4)) as retextended,0 as totalqty, 0 as extended From finishedsales " & _
            "left join products on products.productid = finishedsales.productid " & _
        Replace(UCase(.gReportCriteria & " and [RETURN] = 1"), "[RETURN] = 0", "[return] = 1") & _
    ") as finishedsales " & _
    "left join products on products.productid=finishedsales.productid  " & _
    "left join vendor on products.vendorcode=vendor.vendorcode " & _
    "group by descr,products.productid,products.productcode,products.description,vendor.description,reportuom " & _
    "order by groupdescription, " & IIf(frmReportProducts.chkTop And fVal(frmReportProducts.txtTop) > 0, "finishedsales.mtotalqty desc,", "") & " products.description}  AS Command1 COMPUTE Command1, SUM(Command1.mTotalQty) AS agrTotalQty,  SUM(Command1.mExtended) AS agrExtended, SUM(Command1.mProfit) AS agrProfit, CALC(agrProfit/agrExtended*100) As agrGPM BY groupdescription", mcn


1 commentaires

Est-ce dans l'accès MS?


3 Réponses :



0
votes

Il semble que vous utilisiez l'accès MS ou quelque chose qui interface avec MS Access. Si tel est le cas, vous pouvez peut-être utiliser commutateur :

Remplacer:

CALC (AgrProfit / accordxtended * 100)

avec: xxx

L'idée est de remplacer null avec 0, remplacez la division de 0 avec 0, ou d'autres renvoyer le rapport réel.


0 commentaires

2
votes

Donc, on dirait que vous utilisez le Fonctions de mise en forme de données ADO ici, et le calc (expression) code> vous permet d'utiliser des fonctions VBA répertoriées ici dans l'expression. La suggestion de Guru @ c-livre provoque une erreur car NULLIF () n'est pas une fonction VBA, mais toute l'expression peut être réécrite comme ceci:

CALC(IIF(IsNull(agrProfit), 0, IIF(agrProfit=0, 0, agrProfit/agrExtended) *100))


0 commentaires