私は 2 つのほぼ同一のデータベースを持っています (2 番目は最初のデータベースのコピーで、異なる会社/製品情報で変更されています)。正しく機能しなかったエージング レポートがあり、修正する必要がありました。1 つのデータベース (A) で動作していますが、2 番目のデータベース (B) で「無効」エラーが発生します。
レポート クエリは、基本的に注文情報と顧客情報を取得する別のクエリから生成されます。そこから、問題のクエリは、出荷された時間に応じて注文をチャンクに分割し、残高を返します。次のコード セグメントを含むエラー メッセージが表示されます。
Round(Sum(IIf((Date()-[ShipDate] Is Null),[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS Current_Unshipped
Is Null が他の値に変更された場合、クエリは正常に実行されます。「変数がnullの場合」コードを導入しようとすると、エラーが発生します。私は次のことを試しましたが、役に立ちませんでした。
Round(Sum(IIf((nz[ShipDate]),[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS Current_Unshipped
発送日がnullの場合に「NULL」を返す別の列がありますが、これは驚くほど機能します。最初のコード セグメントは他のデータベースで問題なく動作するため、混乱しています。未発送の注文の列を生成できるようにする必要があるため、[ShipDate] がありません。コードが機能しない理由がわかりません。
全体
(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0))
コードのセグメントは、バランスがどのように生成されるかであり、それが機能します。また、データベースの約 100 万か所に実装されています。設計者は、クエリが実行されるたびに未払いの合計残高をどこかに保存するのではなく、自動生成することを考えました。
クエリ コード全体も以下に掲載されています。誰かが私を正しい方向に向けることができれば、それは大いに役立ちます。
SELECT DISTINCTROW
Round(Sum(IIf((Date()-[ShipDate]<31),[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS [Current],
Round(Sum(IIf((Date()-[ShipDate] Is Null),[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS Current_Unshipped,
Round(Sum(IIf((Date()-[ShipDate])<61 And (Date()-[ShipDate]>30),[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS [31-60 Days],
Round(Sum(IIf((Date()-[ShipDate])<91 And (Date()-[ShipDate]>60),[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS [61-90 Days],
Round(Sum(IIf((Date()-[ShipDate])>90,[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS [91+ Days],
Round(Sum(nz([LineTotal])+(CLng(nz([LineTotal])*nz([SalesTaxRate])*100)/100)+nz([FreightCharge])-nz([Total Payments])),2) AS Balance,
[Receivables Aging Report Query].CompanyName,
[Receivables Aging Report Query].OrderDate,
[Receivables Aging Report Query].ShipDate,
[Receivables Aging Report Query].OrderID,
nz((Round(Date()-[ShipDate])),"NULL") AS Span,
FROM [Receivables Aging Report Query]
GROUP BY
[Receivables Aging Report Query].CompanyName,
[Receivables Aging Report Query].OrderDate,
[Receivables Aging Report Query].ShipDate,
[Receivables Aging Report Query].OrderID
HAVING(((Round(Sum(nz([LineTotal])+(CLng(nz([LineTotal])*nz([SalesTaxRate])*100)/100)+nz([FreightCharge])-nz([Total Payments])),2))>0 Or (Round(Sum(nz([LineTotal])+(CLng(nz([LineTotal])*nz([SalesTaxRate])*100)/100)+nz([FreightCharge])-nz([Total Payments])),2))<0) AND (([Receivables Aging Report Query].ShipDate) Is Not Null)) OR (((Round(Sum(nz([LineTotal])+(CLng(nz([LineTotal])*nz([SalesTaxRate])*100)/100)+nz([FreightCharge])-nz([Total Payments])),2))>0 Or (Round(Sum(nz([LineTotal])+(CLng(nz([LineTotal])*nz([SalesTaxRate])*100)/100)+nz([FreightCharge])-nz([Total Payments])),2))<0) AND (([Receivables Aging Report Query].ShipDate) Is Null))
ORDER BY
[Receivables Aging Report Query].OrderID;