두 개의 데이터베이스가 거의 같습니다 (두 번째는 첫 번째 복사본을 만들고 다른 회사/제품 정보로 수정 한 것입니다). 내가 고쳐야 만했던 제대로 된 일을하지 않는 노화 보고서가 있습니다. 나는 그것을 하나의 데이터베이스 (A)에서 작업하지만, 두 번째 데이터베이스 (B)는 "Invalid"오류를 일으킨다.Access Query에서 "Null의 사용이 잘못되었습니다."
보고서 쿼리는 기본적으로 주문 정보와 고객 정보를 가져 오는 다른 쿼리에서 생성됩니다. 거기에서 문제의 쿼리는 주문이 배송 된 시점에 따라 주문을 청크로 분해하고 잔액을 반환합니다. 오류 메시지가 다음 코드 세그먼트와 함께 표시됩니다.
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
shipdate가 null 인 경우 "NULL"을 반환하는 다른 열이 있습니다. 놀랍게도 작동합니다. 첫 번째 코드 세그먼트는 다른 데이터베이스에서 완벽하게 작동하므로 혼란 스럽습니다. 배송되지 않은 주문에 대한 열을 생성 할 수 있어야하므로 누락 된 [ShipDate]가 필요합니다. 나는 왜 코드가 작동하지 않는지에 대해 상실감을 느낀다.
코드의 전체
(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0))
세그먼트
는 균형이 생성되는 방법이며, 그것은 작동합니다. 또한 데이터베이스의 약 1 백만 개소에 구현되었습니다. 디자이너는 쿼리가 실행될 때마다 어딘가에 저장하지 않고 총 잔액을 자동으로 생성하려고 생각했습니다.전체 쿼리 코드도 아래에 게시됩니다. 누구든지 올바른 방향으로 나를 가리킬 수 있다면 큰 도움이 될 것입니다.
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;
하. 나는 이것이 도움을 요청하는 것을 게시하는 것을 잊었다. 문제는 데이터베이스에 null이 있다는 것이었기 때문에 실패했습니다. 데이터베이스의 가장 일반적인 필드를 통해 쿼리를 생성하고 Null이 있으면 -1을 반환합니다. –