2014-10-17 2 views
1

두 개의 데이터베이스가 거의 같습니다 (두 번째는 첫 번째 복사본을 만들고 다른 회사/제품 정보로 수정 한 것입니다). 내가 고쳐야 만했던 제대로 된 일을하지 않는 노화 보고서가 있습니다. 나는 그것을 하나의 데이터베이스 (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; 

답변

0

사용이 :

Round(Sum(IIf(DateDiff("d",Date(),[ShipDate])=0,[LineTotal]+CLng([LineTotal]*[SalesTaxRate]*100)/100+[FreightCharge]-Nz([Total Payments],0),0)),2) AS Current_Unshipped 
+0

하. 나는 이것이 도움을 요청하는 것을 게시하는 것을 잊었다. 문제는 데이터베이스에 null이 있다는 것이었기 때문에 실패했습니다. 데이터베이스의 가장 일반적인 필드를 통해 쿼리를 생성하고 Null이 있으면 -1을 반환합니다. –

관련 문제