2017-01-13 8 views
0

필드 값을 표시하기 위해 텍스트 상자를 사용하는 MS 액세스 보고서를 작성하려고합니다. 다음을 나타내는 다른 텍스트 상자가 있습니다. 첫 번째 값은 별도의 테이블에있는 항목보다 높거나 낮습니다.MS 액세스 식 작성기를 사용하여 한 테이블의 필드를 다른 테이블의 DLookup과 비교하십시오.

보고서에는 "Table 1"의 레코드 원본과 "Value1"필드에 숫자를 표시하는 "txt_Value1"이라는 텍스트 상자가 있습니다. 두 번째 테이블 인 "Customer_Criteria"에는 비교 대상 필드 "PassValue"가 있습니다. 내 표현식 작성기 문은 다음과 같습니다.

IIf([txt_Value1]<(DLookUp("[PassValue]","[Customer_Criteria]","[Customer] = 'ABC'")),"TRUE","FALSE") 

이 문은 올바른 논리 결과가 무엇인지에 관계없이 항상 false를 반환합니다. 나는 그것을 테스트 한

, 쓰기 :

IIf(1<(DLookUp("[PassValue]","[Customer_Criteria]","[Customer] = 'ABC'")),"TRUE","FALSE") 

그리고 정확한 결과를 얻을 수 있습니다. 또한, 내가 쓰는 경우 :

IIf([txt_Value1]< 1,"TRUE","FALSE") 

나는 정확한 결과를 얻는다. 텍스트 상자 값과 Dlookup을 비교하기 위해 누락 된 점은 무엇입니까?

답변

1

제가 알다시피, 두 필드는 모두 숫자입니다. 액세스는 이러한 필드를 텍스트로 간주 할 수 있으므로 사용 유형 변환을 정확하게 비교하기 위해 이 시도 : 필드 NULL 값을 포함 할 수있는 경우

IIf(CLng(Nz([txt_Value1],0))< _ 
    CLng(Nz(DLookUp("[PassValue]","[Customer_Criteria]","[Customer] = 'ABC'"),0)), _ 
    "TRUE","FALSE") 

Nz

는 오류를 반환합니다이 경우 형식 변환 기능에 필요합니다.

+0

'PassValue'는 아마도 이미 int입니다. 이 경우 두 번째 'CLng'은 필요하지 않습니다. 또한 'txt_Value1'이 null이되거나 DLookup이 널 (null PassValue)를 반환하지 못하도록하거나 (조건에 일치하는 레코드가없는 경우) 시스템에있는 다른 유효성 검사에 따라'Nz'가 필요하지 않을 수도 있습니다. . 마지막으로'txt_Value1'에 타이핑 된 것이 숫자인지 확인해야합니다. – SunKnight0